0x00 前言
有时候,pip install 用的好好的,突然就一屏幕红字:
ERROR: Error checking for conflicts.
Traceback (most recent call last):
File "c:\programdata\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 2672, in version
return self._version
File "c:\programdata\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 2806, in __getattr__
raise AttributeError(attr)
AttributeError: _version
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:\programdata\anaconda3\lib\site-packages\pip\_internal\commands\install.py", line 517, in _warn_about_conflicts
package_set, _dep_info = check_install_conflicts(to_install)
File "c:\programdata\anaconda3\lib\site-packages\pip\_internal\operations\check.py", line 110, in check_install_conflicts
package_set, _ = create_package_set_from_installed()
File "c:\programdata\anaconda3\lib\site-packages\pip\_internal\operations\check.py", line 49, in create_package_set_from_installed
package_set[name] = PackageDetails(dist.version, dist.requires())
File "c:\programdata\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 2680, in version
raise ValueError(msg, self)
ValueError: ("Missing 'Version:' header and/or METADATA file at path: c:\\programdata\\anaconda3\\lib\\site-packages\\-ip-19.0.1.dist-info\\METADATA", Unknown [unknown version] (c:\programdata\anaconda3\lib\site-packages))
虽然不影响使用(啊大家可能没注意到,即便老报错但你 pip install 的东西是确实正常安装好了的),
但终归还是看着心烦,处理一下吧。
0x01 问题分析
这个问题在 pip 的Github项目里,作为 Issue #6194 被讨论过,
直接说结论的话就是:site-package
目录下存在开头为 -
,0
,%
,~
的问题文件夹。
这些文件夹可以简单的理解为坏了的文件夹,
比起删除,更加优雅(显摆)的方法是直接更新他们:
sudo -H pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
这里的 pip
要换成各位自己的路径,例如 /Users/your_name/anaconda3/bin/pip
0x02 解决方案
只需要看最后的ValueError中的path:
ValueError: ("Missing 'Version:' header and/or METADATA file at path:
c:\\programdata\\anaconda3\\lib\\site-packages\\-ip-19.0.1.dist-info\\METADATA", Unknown [unknown version]
(c:\programdata\anaconda3\lib\site-packages))
我们看到,路径是 site-packages
目录下的 -ip-19.0.1.dist-info
去括号里的你自己的路径那个文件夹下面,例如我这里的是 c:\programdata\anaconda3\lib\site-packages
找到这个 -ip-19.0.1.dist-info
文件夹,删掉就正常了。