みなさん pip 使っていますか?
Python では pip が使えるのでパッケージ管理が非常に便利ですよね!
使いたいパッケージがあれば pip で install すればすぐに使えるようになりますし、消す時も uninstall すれば良いだけなので楽です。
そんな pip ですが、pip の使い方には大きく分けて pip install と python -m pip install の2つが存在することはご存知でしょうか?
ウェブサイト等によっても、紹介される pip のコマンドは上記の2つでバラバラだと思います。この2つの pip の使い方にはどのような違いがあるのでしょうか?
このページでは、その「2つの pip の使い方」における違いについて解説していきたいと思います。
Contents
pip install と python -m pip install の違い
本質的には下記のどちらも行われることは同じで、要は pip モジュールが実行されて <Package> というパッケージのインストールが行われます。
pip install <Package>python -m pip install <Package>
ただ、<Package> というパッケージがインストールされる点は同じですが、インストール先の Python のバージョンが異なる可能性があります。
パッケージは Python のバージョンごとに管理される
まず前提として、PC 内には複数のバージョンの Python をインストールすることが可能です。
さらに、pip でのパッケージのインストールは、それぞれのバージョンの Python に対して独立に行われます。
つまり、特定のバージョンの Python に <Package> というパッケージをインストールしたとしても、他のバージョンの Python ではその <Package> を使うことはできません。他のバージョンでも使用したいのであれば、そのバージョンの Python に対してもその <Package> をインストールする必要があります。

この、パッケージのインストール先の Python のバージョンが、pip install と python -m pip install を実行した場合とで異なる場合があります。
スポンサーリンク
インストール先の Python のバージョンが異なる(可能性がある)
では、なぜパッケージのインストール先の Python のバージョンが、pip install と python -m pip install を実行した場合とで異なる場合があるのでしょうか?
この点について解説していきます。
まず、複数のバージョンの Python がインストールされている場合、Python 本体だけでなく pip モジュールもバージョンごとに別々に存在することになります。

そして、pip モジュールによるパッケージのインストール先は、その pip モジュールを持つバージョンの Python のみとなります。ですので、どの pip モジュールを利用してインストールを行うかによって、インストール先の Python が異なることになります。

さらに、下記の2つのコマンドでは、PC の設定によっては異なる pip モジュールが実行される可能性があります。すなわち、下記の2つのコマンドのどちらを利用するかによって、パッケージのインストール先の Python が変わってしまうことになります。
pip install <Package>python -m pip install <Package>
pip install:pip のバージョンの Python にインストールされる
まず、pip install <Package> で <Package> のインストールを行なった場合、その <Package> は、pip コマンドで実行される pip モジュールを持つ Python にインストールされることになります。
もし、複数のバージョンの Python がインストールされている場合、pipモジュールに関しても複数存在することになりますが、pip コマンドで実行されるモジュールはそのうちのいずれかの1つのみです。

そして、pip install <Package> を実行した場合、その pip コマンドで実行される pip モジュールを持つバージョンの Python に対して <Package> がインストールされることになります。

pip コマンドで実行される pip モジュールがどのバージョンの Python のものなのかについては、下記の pip -V コマンドにより調べることができます。
下記の場合、pip コマンドで実行される pip モジュールは Python 3.9 のものであることになりますので、pip install <Package> を実行すれば Python 3.9 に対して <Package> がインストールされることになります。
% pip -V pip 21.3.1 from /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pip (python 3.9)
以降では、pip コマンド時に実行される pip モジュールを持つ Python のバージョンを、単に pip のバージョンと呼ばせていただきます。
python -m pip install:python のバージョンの Python にインストールされる
それに対して、python -m pip install <Package> を実行した場合、<Package> は、python コマンドで実行されるバージョンの Python に対してインストールが行われることになります。

要は python -m pip とは、python で実行されるバージョンの Python が持つ pip モジュールを実行するためのコマンドです。ですので、python コマンドで実行されるバージョンの Python に対してパッケージがインストールされることになります。
この python コマンドで実行される Python に関しては、下記の python -V コマンドにより調べることができます。下記の場合、python -m pip install <Package> を実行すれば、Python 3.10 に対して <Package> がインストールされるということですね!
% python -V Python 3.10.2
以降では、python コマンドで実行される Python のバージョンを、単に python のバージョンと呼ばせていただきます。
pip と python のバージョンが異なる場合は注意
ここまでの解説の通り、実行される pip モジュールの違いによって、パッケージのインストール先の Python のバージョンが異なります。
pip のバージョンと python バージョンとが同じであれば、異なるコマンドではあるものの、下記の2つで得られる結果は同じものになります。
pip install <Package>python -m pip install <Package>
ただし、pip と python のバージョンが異なるのであれば、2つのコマンドでインストール先の Python のバージョンが異なってしまうことになります。

このような場合、例えば pip install でインストールしたパッケージを Python スクリプトの中から使用し、その Python スクリプトを python コマンドで実行しようとすると、下記のようなエラーが発生することになります。これは、python コマンドで実行される Python と、pip でパッケージがインストールされる Python のバージョンが異なるからです。
ModuleNotFoundError: No module named 'パッケージ'
もちろん、pip コマンドと python コマンドで実行される Python のバージョンが統一されていれば pip install と python -m pip install の両方で同じ pip モジュールが実行されるので問題はありません。そもそも pip コマンドと python コマンドで実行される Python のバージョンは同じであることの方が多いはずです。
ただし、もし異なる場合は、各コマンドによるパッケージのインストール先の Python のバージョンをしっかり意識してコマンドを利用する必要があります。
python -m pip install の方が無難
いずれにせよ、パッケージのインストールを行う際のコマンドは python -m pip install に統一する方が無難だと思います。
Python スクリプトを実行する際にも、python xxx.py のように python コマンドを実行すると思いますが、python -m pip install でパッケージのインストールを行うことで、パッケージのインストール先をスクリプト実行時に使用しているバージョンの Python に統一することができます(python xxx.py でも python -m pip install でも同じバージョンの Python が使用される)。
その結果、パッケージのインストール先の Python と、python コマンド実行時に実行される Python の不整合を防ぐことができます。
逆に pip install でパッケージのインストールを行なった場合、python コマンド実行時に使用される Python のバージョンのものとは異なるバージョンに対してインストールが行われ、結局 Python スクリプトを実行する際にインストールしたパッケージが使用できないようなことが起こり得ます。
なので、パッケージのインストールを行う際には python -m pip install を利用する方が無難だと思います。
ちなみに、pip の公式ドキュメントでも python -m pip install の方が使用されています。
https://pip.pypa.io/en/stable/
また、ここまで Python を実行するコマンドを python で表記してきましたが、もしあなたが Python スクリプトを実行する際に python3 や python3.10 など、python にバージョン名を付加したコマンドを使用しているのであれば、パッケージインストール時にもそのコマンドを利用した方が良いです。
例えば、私は python3.10 test.py などのように、Python スクリプトを実行する際には python3.10 コマンドを実行するようにしています。なので、パッケージインストール時にも python3.10 -m pip install を実行するようにしています。
python3.10 -m pip install
また、uninstall 等を行う際も同様で、pip を介してパッケージ管理を行う際には、python -m pip xxx の方のコマンドを利用する方が良いと思います。
さらに言えば、バージョンの異なる Python を別々のパッケージ構成で利用したいような場合も python -m pip xxx の方のコマンドを使用するのが便利だと思います。
python の部分をバージョンに応じて変更することで、Python のバージョンごとのパッケージのインストールの制御を簡単に行うことができます。
例えば python 3.8 にのみ <Package1> というパッケージをインストールし、Python 3.9 にのみ <Package2> というパッケージをインストールして Python を利用したいような場合、下記を実行すれば良いことになります。
% python3.8 -m pip install <Package1> % python3.9 -m pip install <Package2>
もちろん仮想環境などを利用して Python をバージョンごとに管理するような手段もありますが、いずれにしても下記コマンドの違いは理解しておくと、今後役にたつと思います。
pip install <Package>python -m pip install <Package>
スポンサーリンク
まとめ
このページでは、下記の2つのコマンドの違いについて解説しました!
pip install <Package>python -m pip install <Package>
両方 pip モジュールが実行されてインストールが行われるという点に違いはありませんが、実行される pip モジュールの違いにより、2つのコマンドでパッケージのインストール先の Python のバージョンが異なる可能性があります。
特に複数バージョンの Python を PC 内にインストールしている場合、どのバージョンにパッケージをインストールするかをコントロールしながら Python を利用していく必要があり、そんな時には、後者の python -m pip install <Package> の方が便利だと思います(python の部分は使用する Python に合わせて適宜変更してください)。
いずれにしても、pip を利用する際は python -m pip install <Package> コマンドを実行する方が無難だと思います!


[…] 【Python】”pip install” と “python -m pip install” の違い | だえうホームページ (daeudaeu.com) […]