「なんでPythonのパッケージ管理すぐ死んでしまうん?」
環境
- 今回起きた環境は以下、すでにPipfileは作成済
$ python -V
Python 3.7.6
起きたこと
-
pip install
とかpipenv install
あたりのライブラリインストールがうまく動かなくなった - pipのバージョンみても以下のようにエラーが吐かれていました
$ pip -V
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/pkg_resources/__init__.py", line 583, in _build_master
ws.require(__requires__)
File "/usr/local/lib/python3.7/site-packages/pkg_resources/__init__.py", line 900, in require
needed = self.resolve(parse_requirements(requirements))
File "/usr/local/lib/python3.7/site-packages/pkg_resources/__init__.py", line 791, in resolve
raise VersionConflict(dist, req).with_context(dependent_req)
pkg_resources.VersionConflict: (pip 20.1 (/usr/local/lib/python3.7/site-packages), Requirement.parse('pip==19.3.1'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/opt/python/libexec/bin/pip", line 6, in <module>
from pkg_resources import load_entry_point
File "/usr/local/lib/python3.7/site-packages/pkg_resources/__init__.py", line 3251, in <module>
@_call_aside
File "/usr/local/lib/python3.7/site-packages/pkg_resources/__init__.py", line 3235, in _call_aside
f(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/pkg_resources/__init__.py", line 3264, in _initialize_master_working_set
working_set = WorkingSet._build_master()
File "/usr/local/lib/python3.7/site-packages/pkg_resources/__init__.py", line 585, in _build_master
return cls._build_from_requirements(__requires__)
File "/usr/local/lib/python3.7/site-packages/pkg_resources/__init__.py", line 598, in _build_from_requirements
dists = ws.resolve(reqs, Environment())
File "/usr/local/lib/python3.7/site-packages/pkg_resources/__init__.py", line 786, in resolve
raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'pip==19.3.1' distribution was not found and is required by the application
原因
- これっぽい、pipのバージョンがコンフリクトを起こしているみたい
- 要求されているpipは
19.3.1
で、実行しているpipは20.1
だから- どこかでupgradeした説(Warningでるからね...)
pkg_resources.VersionConflict: (pip 20.1 (/usr/local/lib/python3.7/site-packages), Requirement.parse('pip==19.3.1'))
対策
- 要求されているpipのバージョン(今回は
19.3.1
)をインストールする - インストール方法はPyPAの公式ドキュメントに記載されていました
- また、ローカル環境のPythonとpipがひもづいていない場合にも、この方法は有用です
# python get-pip.pyを実行するためのファイルをcurlで取得
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1824k 100 1824k 0 0 1650k 0 0:00:01 0:00:01 --:--:-- 1650k
# 引数でpipのバージョンを指定してpipをインストールする
$ python get-pip.py pip==19.3.1
Looking in indexes: https://pypi.python.org/simple/
Collecting pip==19.3.1
Downloading pip-19.3.1-py2.py3-none-any.whl (1.4 MB)
|████████████████████████████████| 1.4 MB 553 kB/s
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 20.1
Uninstalling pip-20.1:
Successfully uninstalled pip-20.1
Successfully installed pip-19.3.1
結果
- 指定されたバージョンのpipがローカルのPythonと紐付いてダウンロードされています
- あとは好きに
pip install
なりpipenv install
なりしてください
$ pip -V
pip 19.3.1 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)