説明なんていらねぇって人は、一番最後の最後に実行すべきコマンドをまとめます。へどうぞ。
#結果
ここでは基本的にPython3での話です。(Python2でも同じやり方でできるはずですが…)
発生プロセスは、まず、Python2,Python3ともにosにデフォルトでインストールされていて、pip/pip3をインストールすると言う場面において、
$ sudo apt install python3-pip
とすると、python3-pipつまりpip3がインストールされます。このとき、pip3のVersionは、おそらく「8.x.x」でしょう。
ここで何らかの理由(Version-9以上でなければならないとか、VersionをUpgradeするようpip/pip3に言われるなど)により、下のコマンドを実行します。
$ pip3 install --upgrade pip
もしくは、
$ sudo -H pip3 install --upgrade pip
すると全てのpip3
コマンドで、次のようなErrorがでる。ここでは例として-V
を実行する。
$ pip3 -V
すると、
Traceback (most recent call last):
File "/usr/bin/pip", line 9, in <module>
from pip import main
ImportError: cannot import name main
このような、Errorがでる。
#原因
Errorが何を言っているのかと言うと、インポートエラーで「main」という名前のモデュールがインポートできない、そしてどこのことかと言うと/usr/bin/pip
のline 9
にあるfrom pip import main
と言うところですよということである。
つまりあるべきところに「main」がないので、うまくimportできないのである。
このErrorの原因は他のwebサイトでも解説されているように、version-8以下とversion-9以上が非互換であるせいである。version-8仕様のファイルではversion-9以上は上手く動作することができない。
pip(python-pip)とpip3(python3-pip)の違い
pipとpip3は基本的に同じものであるしかし、環境上にpython2とpython3が共存している場合pipだけでは、python2とpython3で互換がないライブラリなどがおかしくなったりそもそも、python2とpython3で別々に管理したいと言う場合に、
python2では、pip → python2用のpip
python3では、pip3(python3-pip) → python3用のpip
と言う使い分けをするのである。
#対処
一つ目の対処
他のwebサイトでは、まず
$ sudo python3 -m pip uninstall pip
を行い、ライブラリは
$ python3 -m pip install numpy
このようにpython3を用いてインストールするようにと書かれているが、それはめんどくさいので、今までどおり
$ pip3 install numpy
でライブラリをインストールできるようにする。
二つ目の対処
まず、pip -upgrade pip
でインストールしたpip3をアンインストールする。
$ sudo python3 -m pip uninstall pip
そして、apt
でインストールしたpip3をアンインストールする。
$ sudo apt autoremove python3-pip
これで、pip3
は全てアンインストールされました。そして今度はapt
ではなくget-pip.py
というブートストラップを使って、標準インストールします。
まず、
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
これで、get-pip.py
がダウンロードされます。そしてget-pip.py
を使ってpip3をインストールします。
$ python3 get-pip.py --user
ここで、ModuleNotFoundError: No module named 'distutils.util'
と言うようなErrorが出た場合、python3-distutils
をインストールします。
$ sudo apt install python3-distutils
そしてもう一度、
$ python3 get-pip.py --user
そうすると
Successfully installed pip-19.2.3 setuptools-41.2.0 wheel-0.33.6
pip-19.2.3インストールされるでしょう。(pip-19.x.xと言うべきですが)
#最後に実行すべきコマンドをまとめます。
#Python2、Python3両方ともインストールし直す場合。------------------
# -upgradeでインストールされたpipをアンインストール。(No module named pipとでる場合はそのまま進む。)
$ sudo python -m pip uninstall pip
$ sudo python3 -m pip uninstall pip
# aptでインストールされたpipをアンインストール。
$ sudo apt autoremove python3-pip
$ sudo apt autoremove python-pip
# get-pip.pyをダウンロード。
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
# pipを標準インストール。(get-pip.pyがhome dirにあるとして、home dirで実行)
$ python3 get-pip.py
$ python get-pip.py
# 「$ python3 get-pip.py」で「ModuleNotFoundError: No module named 'distutils.util'」と出てくる場合。
$ sudo apt install python3-distutils
# もう一度「$ python3 get-pip.py」を実行する。
#Python3のみインストールし直す場合。-------------------------------
radeでインストールされたpipをアンインストール。(No module named pipとでる場合はそのまま進む。)
$ sudo python3 -m pip uninstall pip
# aptでインストールされたpipをアンインストール。
$ sudo apt autoremove python3-pip
# get-pip.pyをダウンロード。
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
# pipを標準インストール。(get-pip.pyがhome dirにあるとして、home dirで実行)
# 「--user」をつけることで「sudo」でする必要がなくなる。
$ python3 get-pip.py --user
# 「$ python3 get-pip.py」で「ModuleNotFoundError: No module named 'distutils.util'」と出てくる場合。
$ sudo apt install python3-distutils
# もう一度「$ python3 get-pip.py」を実行する。
以上。