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
文件夾,刪掉就正常了。