みなさん 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) […]