pipのVersionConflictを修正して、ライブラリインストール実行を正常に行う

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110571/83f393d6-dcd0-eb32-8715-b702057f3e8a.png)

「なんでPythonのパッケージ管理すぐ死んでしまうん？」

# 環境
- 今回起きた環境は以下、すでにPipfileは作成済

```sh
$ python -V
Python 3.7.6
```

# 起きたこと
- `pip install`とか`pipenv install`あたりのライブラリインストールがうまく動かなくなった
- pipのバージョンみても以下のようにエラーが吐かれていました

```sh
$ 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でるからね...)

```sh
pkg_resources.VersionConflict: (pip 20.1 (/usr/local/lib/python3.7/site-packages), Requirement.parse('pip==19.3.1'))
```

# 対策
- 要求されているpipのバージョン(今回は`19.3.1`)をインストールする
- インストール方法は[PyPAの公式ドキュメント](https://pip.pypa.io/en/stable/installing/)に記載されていました
- また、ローカル環境のPythonとpipがひもづいていない場合にも、この方法は有用です

```sh
# 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`なりしてください

```sh
$ pip -V                                                                                                                                       
pip 19.3.1 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
```