Ubuntuでは、Pythonのpip/pip3がプリインストールされていませんでした。
これらのインストールに予想外にもつまずいたので、記録を残します。
はじめに
Pythonにパッケージをインストールするときには、pipコマンドが便利です。 しかし、Ubuntuにはデフォルトでpipがインストールされていません。
試しにpandasをpipインストールしてみると、
$ pip install pandas Command 'pip' not found, but can be installed with: sudo apt install python-pip
エラーが表示され、代わりにpipのインストール手順が示されます。
しかし、この提示されたインストール手順も、そのままではうまく機能しませんでした。
試行錯誤の結果pip / pip3のインストールに成功したので、その記録を残します。
作業環境
Ubuntu18.04.1 LTS を
Windows10の上に、VMwareによって構築した仮想環境で起動しています。
www.bioerrorlog.work
Ubuntuでpip/pip3をインストールする
pipとpip3は違う
まず、前提としてpipとpip3の違いについて確認させてください。
pip3
はPython3を指定したpipコマンド、pip
はPython2/3のどちらにも設定できるメインのpipコマンド、という整理のようです。
お恥ずかしい話、当初pipコマンドはすべてpipで、pip3はおまけのようなものだと思っていました。
しかし、UbuntuのようにPython2とPython3が両方インストールされている場合には、この違いが無視できません。
デフォルトではpip
と打てばPython2の、pip3
と打てばPython3のpipとして機能します。
逆に、Python2かPython3のどちらか片方しかインストールしていない場合は、pip
と打てば該当のPythonが指定されます。
まさに、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をインストールする他の方法を見つけました。
How to Install Pip on Ubuntu 16.04 LTS | Liquid Web
これによると、"get-pip.py"をあるURLから取得・実行すればいいようです。
URLから"get-pip.py"ファイルを取得するにはcurl
コマンドを使います。
デフォルトではインストールされていないので、aptでインストールします。
$ sudo apt install curl
インストールが終わったら、"get-pip.py"ファイルをcurl
で取得します。
$ curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
これで、"get-pip.py"ファイルが取得できました。
この"get-pip.py"を、python
コマンドで実行します。
$ sudo python get-pip.py
これで"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'
しかしこのやり方ではエラーを吐かれてしまい、なかなか解消することが出来ませんでした。
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がインストールされていることが分かります。
結論:アップデートしてから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
おわりに
今回は、Ubuntuでpip/pip3をインストールときの試行錯誤を記録しました。
蓋を開ければ解決方法は単純で、インストール前にアップデートしておくというものです。 これはpip/pip3のインストールのみならず、他の多くのパッケージでも適応できる教訓だと思うので、肝に銘じておきます。
ところで、updateとupgradeは具体的にどのような操作を行っているのでしょうか。 漠然とイメージが掴めるばかりに、実際の処理を私は理解できていません。
知らないことが増えていくのは、楽しいことです。
参考
- 多くのネット上の情報で助言されているのは、updateのみでした。↩