pip install –upgrade pipでpipのバージョンを上げるとImportError: cannot import name mainで動かなくなった話

aptでpipをインストールした後にpipのバージョンアップを試みると、pipが動かなくなってしまったのでその対策をまとめます。

現象

WSL (Windows Subsysmte for Linux)、つまりUbuntu 16.04でpipのバージョン9以上を使いたかったのです。でもaptでインストールされたのはpip 8.1.1だったのでpipをアップグレードをしたら、pipが壊れて動かなくなりました。

やったこと

# pipのインストール
$ sudo apt install python-pip

# バージョン確認
$ pip --version
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

# pip 9以上を使いたかったのでのバージョンアップ
$ pip install --upgrade pip

起きたエラー

pipコマンドが壊れて、pipで何かやろうとするとこのエラーが出るようになってしまいました。

$ pip
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    from pip import main
ImportError: cannot import name main

なぜこのエラーが起きるかの原因については、こちらのサイトがわかりやすかったです。どうにもpip 10からディレクトリ構造など諸々変わってしまったのが原因みたい・・・。

pip install --upgrade pip (10.0.0) 後の奇妙な挙動について - 雑記
TL;DR pipを10.0.0に更新した後に ~$ pip Traceback (most recent call last): File "/usr/bin/pip", line 9, in from pip import main I...

対策

pipのアンインストール

とりあえずpipを一旦アンインストールします。

# pipのアンインストール
$ sudo apt --purge remove python-pip

このままもう1回aptでpipをインストールしても動かなくなってしまっているので、pipを完全にアンインストールしてやります。

$ python -m pip uninstall pip

これでpipインストール前の綺麗な状態に戻りました。

aptを使わずにpipをインストール

aptのpipパッケージが新しくなればこのアップデートで動かなくなる問題も解決するかもしれませんが、今回はaptを使ったpipのインストールは諦めて、使わない方法に切り替えます。

# aptを使わずpipのインストール
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ sudo python get-pip.py

これでpipがインストールされました。バージョンを確認すると、目的のpip 9以上がインストールされているのが確認できます。

$ pip --version
pip 18.1 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)

 

コメント