気がつけばpip install
やpip freeze
でエラーが出るようになったので対応した。
- pip 19.0.1
- Python 3.6.6
エラーは以下の通り。
$ pip freeze
Exception:
Traceback (most recent call last):
File "/Users/yag_ays/.pyenv/versions/main/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2584, in version
return self._version
File "/Users/yag_ays/.pyenv/versions/main/lib/python3.6/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 "/Users/yag_ays/.pyenv/versions/main/lib/python3.6/site-packages/pip/_internal/cli/base_command.py", line 176, in main
status = self.run(options, args)
File "/Users/yag_ays/.pyenv/versions/main/lib/python3.6/site-packages/pip/_internal/commands/freeze.py", line 93, in run
for line in freeze(**freeze_kwargs):
File "/Users/yag_ays/.pyenv/versions/main/lib/python3.6/site-packages/pip/_internal/operations/freeze.py", line 62, in freeze
req = FrozenRequirement.from_dist(dist)
File "/Users/yag_ays/.pyenv/versions/main/lib/python3.6/site-packages/pip/_internal/operations/freeze.py", line 239, in from_dist
req = dist.as_requirement()
File "/Users/yag_ays/.pyenv/versions/main/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2716, in as_requirement
if isinstance(self.parsed_version, packaging.version.Version):
File "/Users/yag_ays/.pyenv/versions/main/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2551, in parsed_version
self._parsed_version = parse_version(self.version)
File "/Users/yag_ays/.pyenv/versions/main/lib/python3.6/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] (/Users/yag_ays/.pyenv/versions/3.6.6/envs/main/lib/python3.6/site-packages))
調べてみると、どうやら-
から始まるディレクトリが生成されているとエラーが出るようだ。
pip19.0.1 list error"AttributeError: _version" · Issue #6194 · pypa/pip
実際に上記のログを元にpyenvのsite-packagesに行くと、謎の-umpy
というディレクトリが存在した。おそらくNumpyをインストール/アップデートするときに生じたゴミと思われる。
$ cd /Users/yag_ays/.pyenv/versions/main/lib/python3.6/site-packages
$ ls
total 19112
drwxr-xr-x 3 yag_ays Users 96 1 24 11:33 -umpy
drwxr-xr-x 3 yag_ays Users 96 1 24 11:33 -umpy-1.15.1.dist-info
[...]
なので、これを別名に書き換えることで解決。
# ハイフンから始まるファイルを別名に置き換える
$ mv ./-umpy umpy
$ mv ./-umpy-1.15.1.dist-info/ umpy-1.15.1.dist-info
$ pip freeze
absl-py==0.5.0
aiofiles==0.4.0
alabaster==0.7.12
[...]