Ubuntuでpip / pip3がインストールできないときの対処法 | Python2 / 3

Ubuntuでは、Pythonのpip / pip3がインストールされていませんでした。 pip / pip3のインストールに予想外にもつまずいたので、記録を残します。



Introduction

Pythonにパッケージをインストールするときには、pipコマンドが便利です。 しかし、UbuntuにデフォルトでインストールされているPythonには、pipがインストールされていませんでした。

試しにpandasをpipインストールしてみると、

$ pip install pandas

Command 'pip' not found, but can be installed with:

sudo apt install python-pip

エラーが表示され、代わりにpipのインストール手順が示されました。

しかし、この提示されたインストール手順も、はじめはうまく機能しませんでした。

試行錯誤の結果、pip / pip3のインストールに成功しましたので、記録を残します。


Material

Ubuntu18.04.1 LTS を
Windows10の上に、VMwareによって構築した仮想環境で起動しています。
www.bioerrorlog.work


Results

pipとpip3は違う

まず、前提として私が勘違いしていたのは、pipとpip3の違いについてです。

どうやら、pipはPython2、pip3はPython3、のpipコマンドのようです。

teratail.com

私はpipコマンドはすべてpipで、pip3はおまけのようなものだと思っていましたが、UbuntuのようにPython2とPython3が両方インストールされている場合には、この違いが無視できません。 pipと打てばPython2の、pip3と打てばPython3のpipとして機能するようです。

逆に、Python2かPython3のどちらか片方しかインストールしていない場合は、どちらもpipで大丈夫らしいです。

まさに、Pythonプログラムを実行する時のpython/python3コマンドと同じでしょう。 Pyhon3で実行するときはpython3を用い、単にpythonで実行すれば、Python2で実行されます。

つまり今回は、pipとpip3をそれぞれ別々にインストールする必要があるわけです。


はじめはapt installが機能しなかった
: pip× / pip3×

それでは、pipとpip3をインストールしてみます。

上述したように、pipを使おうとすると、次のようなインストール手順が提示されます。

pip:sudo apt install python-pip

$ pip install pandas

Command 'pip' not found, but can be installed with:

sudo apt install python-pip


pip3:sudo apt install python3-pip

$ pip3 install pandas

Command 'pip3' not found, but can be installed with:

sudo apt install python3-pip


しかし、このどちらもエラーを吐かれてしまい、上手くいきませんでしたので、とりあえず別の方法を探しました。


"get-pip.py"からpipをインストールする
: pip○ / pip3×

しばらく解決方法を探していると、pipをインストールする他の方法を見つけました。

www.liquidweb.com

このサイトよると、"get-pip.py"をあるURLから取得して、実行すればいいようです。

URLから"get-pip.py"ファイルを取得するにはcurlコマンドを使いますが、デフォルトではインストールされていないので、aptでインストールしました。

$ sudo apt install curl

インストールが終わったら、次のようにして"get-pip.py"ファイルを取得します。

$ curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"

これで、"get-pip.py"ファイルが出力されました。

そうしたら、この"get-pip.py"をpythonで実行します。

$ sudo python get-pip.py

これで、pipがインストールされました。

pipがちゃんとインストールされたかを--versionで確認すると、

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

確かにpipがインストールされています。


次は、pip3のインストールを試みます。 "get-pip.py"のコードの中身を少し読んでみるとPython2とPython3の両方の環境に対応していたため、pipと同じ要領で"get-pip.py"をpython3で実行してみます。

$ sudo python3 get-pip.py 
~
ModuleNotFoundError: No module named 'distutils.util'

しかし、エラーを吐かれてしまい、pip3についてはこのやり方が上手くいきませんでした。

apt updateしてからapt installする
: pip○ / pip3○

解決策を探して長いこと右往左往していましたが、実に単純な操作で解決しました。 apt installする前にアップデートしてみたら、上手くいったのです。

アップデートは次のふたつの手順で行いました。

$ sudo apt update
~
$ sudo apt upgrade
~

アップデート終了後に再びpip3をインストールしてみると、

$ sudo apt install python3-pip

見事、今度はエラーなくインストールに成功しました。

pip3がちゃんとインストールされたかを--versionで確認すると、

$ pip3 --version
pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6)

確かにpip3がインストールされていることが分かります。


Conclusion:アップデートしてからapt installすべし

まず行うべきはアップデートです。

$ sudo apt update
$ sudo apt upgrade

ただし、このupdate/upgradeの両方が必要なのか、updateだけで大丈夫なのか、私にはいまいち理解できていません1


その後、pipとpip3をそれぞれapt installします。

$ sudo apt install python-pip
$ sudo apt install python3-pip


上手くいかなければ、"get-pip.py"からpipとpip3をそれぞれインストールします。

$ curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
$ sudo python get-pip.py
$ sudo python3 get-pip.py

Discussion

今回は、Ubuntuでpip / pip3をインストールときの試行錯誤を記録しました。

蓋を開ければ解決方法は単純で、インストール前にアップデートしておくというものです。 これはpip / pip3のインストールのみならず、他の多くのパッケージでも適応できる教訓だと思うので、肝に銘じておきます。

ところで、updateとupgradeは具体的にどのような操作を行っているのでしょうか。 漠然とイメージが掴めるばかりに、実際の処理を私は理解できていません。

知らないことが増えていくのは、楽しいことです。


  1. 多くのネット上の情報で助言されているのは、updateのみでした。