UbuntuでPython 3.8.10 がインストールされているにも関わらずpipコマンドがありませんでした。
調べてみると次のようなことがわかりました。
- Ubuntuには独自にカスタマイズされたpipパッケージが提供されている
- Ubuntu版のpipコマンドと通常のpipコマンドの違い
- Ubuntuでpipコマンドを使うときの注意点
将来、調べたことを忘れてしまい「なんでだっけ?」となるのは確実なので、そのときに参照できるよう記事として残しておきたいと思います。皆様の参考にもなれば幸いです。
Ubuntu版のpipコマンド
Ubuntuでは独自にカスタマイズされたpipコマンドが提供されています。インストールして使い始める前にいくつか知っておくべきことがありますので、その説明から始めましょう。
カスタマイズされたpipコマンド
一般ユーザーがUbuntu版のpipコマンドでパッケージをインストールすると –user オプションが指定されたものとして実行され、パッケージはユーザー個別のディレクトリ(~/.localディレクトリ配下など)に置かれます。したがって他のユーザーがPythonを実行するとき、このパッケージは通常参照することはできません。
この点がUbuntu版のpipでカスタマイズされた部分です。通常のpipコマンドでは、このように–userオプションが自動的に追加されることはありません。
root権限でUbuntu版のpipコマンドを実行した場合、–userオプションが自動的に追加されることはありません。したがってパッケージはすべてのユーザーが参照できるシステム共通の場所(/usr/local/libディレクトリ配下など)に置かれます。この振る舞いは通常のpipコマンドと変わるところはありません。
root権限でpipコマンドを実行するとは、「rootユーザーがpipコマンドを実行」するだけでなく、「一般ユーザーがsudoコマンドを使ってroot権限でpipコマンドを実行」することも含まれるので注意してください。
–userオプションの詳細についてはPyPAの「パッケージをインストールする」の「ユーザサイトへインストールする」部分を参照してください。
Ubuntu版のpipの注意点
Ubuntu版のpipコマンドを使ってPyPIからパッケージをインストールすると、Ubuntuのパッケージ管理に不具合が発生する可能性があるとのことです。
これについては「Ubuntu環境のPython」の「pip」ページを参照してください。
ただし、これはroot権限でpipコマンドを実行する場合に限られると思います。一般ユーザーで実行した場合は個別の場所にパッケージが置かれるので、Ubuntuのパッケージ管理に影響を与えるとは考えづらいからです。
Ubuntu版のpipがデフォルトでインストールされていない、そしてUbuntu版のカスタマイズもこの点を考慮してことなのかもしれません。pipを簡単に使わせない、あるいは–userオプションを自動的に追加することによってUbuntuのパッケージ管理に影響を与えないようにした、と考えるのが自然ではないでしょうか。
最後に、システム共通の場所にパッケージをインストールする場合は、pipコマンドではなくaptコマンドでインストールすることが推奨されるようです。
pipコマンドのインストール
Ubuntu版のpipコマンドを使う際の注意点もわかったので、インストール方法を説明しましょう。
と言ってもUbuntuのリポジトリから次のコマンドでインストールするだけです。pipをインストールする前にリポジトリのアップデートは忘れずに実施しましょう。
$ sudo apt update $ sudo apt install python3-pip
Ubuntu版のpipの使い所
ここまでの話を踏まえると、pipコマンドはUbuntuのPython環境に影響を与えないように注意して使うべきでしょう。
そのようなケースには次の2つが考えられます。
- 一般ユーザーで使う
- Pythonの仮想環境でパッケージをインストールするときに使う
これらはそれぞれユーザー個別のディレクトリ、あるいは仮想環境にパッケージがインストールされるので、UbuntuのPython環境への影響は限定的でしょう。
これ以外の場合は、aptコマンドを使ってパッケージをインストールするのが良いと思います。
なお、aptでインストールできるPythonパッケージの名前は「python3-<パッケージ名>」のようになっているようです。
おわりに
Ubuntuについてはわかりましたが、他のLinuxディストリビューションではどうなんでしょうか?やはりパッケージ管理システムに不具合が出ることはあるのでしょうか?
やはり最初からPythonの仮想環境を使っておくのが良いですかね。これについてはまた機会があれば検討したいと思います。
最後までお読みいただきありがとうございます。