#------------问题描述--------------
更新到pip 19.0.1
原来pip list可以正常使用并且返回各个package安装版本
又强制安装了一个package的版本
然后pip list 报了一大堆错
问题总结为:
就是因为强制安装了两个版本生成了一个 ‘-’开头的文件夹 这个文件夹里面没有METADATA这个文件
解决方法:
大概就是修改
(别怕修改源码 只要你确定没问题并且改的回来就改,实在不放心先把原来的复制出来,改一个新的放进文件夹,玩儿坏了再把之前备份的拖进来就完事儿了)
/usr/local/var/pyenv/versions/3.7.0/lib/python3.7/site-packages/pip/_vendor/pkg_resources/
(这里更换成你自己对应版本的文件夹,win版本的话 去你的报错里面找 红色那一大段最后一个报错点)
里面的init.py 那个文件的最后一个报错行我这里是2589。
在报错点前面加上一行 让他打印出来哪个文件夹出了故障:
if version is None:
print(self._provider.__dict__)
然后删除那个文件夹就完事儿了。
这个就是在源码里面加上这一段 下次再pip list 报错的时候 就会在一大段红的上面有白色的字,打印出了出问题的文件地址
去你的Finder里面用command+shift+G 到那个文件夹里看看发生了啥,如果是-开头的那个文件夹 删掉就好
#---------------------问题解决的原来帖子--------------------
https://github.com/pypa/pip/issues/6194
Environment
- pip version:19.0.1
- Python version:3.7
- OS:MacOS
I update pip from 10.1 to 19.0.1, and I wanna check my python packages, I input "pip list" then two errors occurred.
Description
Expected behavior
Exception:
Traceback (most recent call last):
File "/usr/local/var/pyenv/versions/3.7.0/lib/python3.7/site-packages/pip/_vendor/pkg_resources/init.py", line 2584, in version
return self._version
File "/usr/local/var/pyenv/versions/3.7.0/lib/python3.7/site-packages/pip/_vendor/pkg_resources/init.py", line 2691, in getattr
raise AttributeError(attr)
AttributeError: _version
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/var/pyenv/versions/3.7.0/lib/python3.7/site-packages/pip/_internal/cli/base_command.py", line 176, in main
status = self.run(options, args)
File "/usr/local/var/pyenv/versions/3.7.0/lib/python3.7/site-packages/pip/_internal/commands/list.py", line 148, in run
self.output_package_listing(packages, options)
File "/usr/local/var/pyenv/versions/3.7.0/lib/python3.7/site-packages/pip/_internal/commands/list.py", line 205, in output_package_listing
data, header = format_for_columns(packages, options)
File "/usr/local/var/pyenv/versions/3.7.0/lib/python3.7/site-packages/pip/_internal/commands/list.py", line 271, in format_for_columns
row = [proj.project_name, proj.version]
File "/usr/local/var/pyenv/versions/3.7.0/lib/python3.7/site-packages/pip/_vendor/pkg_resources/init.py", line 2589, in version
raise ValueError(tmpl % self.PKG_INFO, self)
ValueError: ("Missing 'Version:' header and/or METADATA file", Unknown [unknown version] (/usr/local/var/pyenv/versions/3.7.0/lib/python3.7/site-packages))
# -------------解决方法---------------
so i have been having the same probem so i experimented a bit and i think this could help:
i edited:
~/.local/lib/python3.6/site-packages/pip/_vendor/pkg_resources/init.py
and added just before line 2589 a print so it looks like this
@property def version(self): try: return self._version except AttributeError: version = _version_from_file(self._get_metadata(self.PKG_INFO)) if version is None: print(self._provider.__dict__) #this tmpl = "Missing 'Version:' header and/or %s file" raise ValueError(tmpl % self.PKG_INFO, self) return version
the self is a object filled with None and Unknown data:
{'project_name': 'Unknown', 'py_version': None, 'platform': None, 'location': '~/.local/lib/python3.6/site-packages', 'precedence': -1, '_provider': <pip._vendor.pkg_resources.PathMetadata object at 0x7f0faa49d4e0>, '_key': 'unknown'} {'project_name': 'Unknown', 'py_version': None, 'platform': None, 'location': '~/.local/lib/python3.6/site-packages', 'precedence': -1, '_provider': <pip._vendor.pkg_resources.PathMetadata object at 0x7f0faa49d4e0>, '_key': 'unknown'}
but the _provider returns this:
{'module_path': '~/.local/lib/python3.6/site-packages', 'egg_info': '~/.local/lib/python3.6/site-packages/-rpcio-1.18.0.dist-info'} {'module_path': '~/.local/lib/python3.6/site-packages', 'egg_info': '~/.local/lib/python3.6/site-packages/-rpcio-1.18.0.dist-info'}