pip install と python3 -m pip install の違い
最初に押さえたいこと
-
pip installは、今そのシェルで見つかったpipコマンドを実行します -
python3 -m pip installは、指定したpython3に紐づくpipを実行します -
Python が複数入っている環境では、後者のほうが「どの Python に入るか」が明確です
-
仮想環境、macOS、Linux、WSL、複数バージョン共存環境では
python3 -m pipのほうが安全なことが多いです -
迷ったら
python3 -m pip install パッケージ名を使うと事故が減ります
目次
-
pip installの意味 -
python3 -m pip installの意味 -
何が違うのか
-
どんなときに困るのか
-
使い分けの目安
-
よくある確認コマンド
pip install の意味
pip install requests のように書くと、シェルが pip というコマンドを探して実行します。
つまり、実際にはこういう流れです。
# シェルが PATH から pip を探して実行する
pip install requests
ここで重要なのは、実行される pip が「今使いたい Python のもの」とは限らないことです。
たとえば、次のような環境はよくあります。
-
pythonは Python 2 系や別バージョンを指している -
python3は Python 3.11 を指している -
pipは別の Python に紐づいている -
Homebrew, pyenv, system Python が混在している
この状態で pip install すると、意図しない場所にパッケージが入ることがあります。
python3 -m pip install の意味
こちらは python3 で pip モジュールを直接実行しています。
# python3 が持っている pip を使ってインストールする
python3 -m pip install requests
-m は「モジュールを実行する」という意味です。
つまり、次のように読めます。
-
python3を起動する -
その Python の中で
pipモジュールを実行する -
その結果としてインストールが走る
この書き方の良いところは、「どの Python を使っているか」が明確なことです。
何が違うのか
違いをひとことで言うと、次の通りです。
🍀 pip install は「どの pip が呼ばれるか」が環境依存
🍀 python3 -m pip install は「この python3 に対して入れる」が明確
比較するとこうなります。
| 書き方 | 何を基準に動くか | トラブルの起きやすさ |
|---|---|---|
pip install |
PATH 上の pip コマンド |
やや高い |
python3 -m pip install |
指定した python3
|
低い |
どんなときに困るのか
よくあるのが、「インストールしたのに import できない」問題です。
たとえば次のようなケースです。
pip install requests
python3 app.py
でも app.py でこうなることがあります。
# requests を使いたいのに見つからない
import requests # ModuleNotFoundError になることがある
なぜかというと、pip install で入った先と、python3 app.py で動いている Python が別だからです。
実際にはこんなズレが起きています。
# こちらの pip でインストールされた
pip install requests
# でも実行しているのは別の Python
python3 app.py
この問題は、次のようにそろえると起きにくくなります。
# 同じ python3 を基準に pip も実行する
python3 -m pip install requests
python3 app.py
よくある場面ごとのイメージ
1. Python が複数入っている
たとえば以下のような環境です。
-
/usr/bin/python3 -
Homebrew の Python
-
pyenv で入れた Python
-
仮想環境の Python
このとき pip がどれを指すかは、PATH の順番次第です。
which python3
which pip
結果がこうなら注意です。
/usr/local/bin/python3
/usr/bin/pip
この場合、python3 と pip が別物です。
2. 仮想環境を使っている
仮想環境を有効化していれば pip install でも正しく入ることは多いです。
ただし、仮想環境にちゃんと入れていることを明示したいなら、やはりこちらが分かりやすいです。
# 仮想環境の python を使って pip を実行する
python -m pip install flask
コード例も合わせると、こんな流れです。
# 仮想環境を作る
python3 -m venv .venv
# 仮想環境を有効化する
source .venv/bin/activate
# どの python / pip を使っているか確認
which python
which pip
# 同じ python を基準にインストール
python -m pip install flask
3. sudo と組み合わせるとき
sudo pip install は環境を壊しやすいので、基本的には避けたいです。
特にシステム Python に直接入れると、OS や他ツールの依存関係に影響することがあります。
⭐️ システム領域に直接 pip install するより、仮想環境を使うほうが安全だにゃ
使い分けの目安
実務では次の感覚で十分です。
pip install を使ってよい場面
-
仮想環境の中にいて
-
which pipとwhich pythonの対応が分かっていて -
手元の環境を自分で把握できている
python3 -m pip install を使ったほうがよい場面
-
Python が複数入っている
-
macOS で system Python と別 Python が混在している
-
サーバーで環境差分がありそう
-
「どの Python に入れるか」を明示したい
-
トラブルを減らしたい
結論としてはこれです。
⭐️ 迷ったら python3 -m pip install を使うのが安全だにゃ
よくある確認コマンド
どこに入るのか分からないときは、次を確認するとかなり見通しがよくなります。
# どの Python を使っているか確認
which python
which python3
# どの pip を使っているか確認
which pip
which pip3
# pip がどの Python に紐づいているか確認
python3 -m pip --version
# import 先の確認
python3 -c "import sys; print(sys.executable)"
--version はかなり便利です。
python3 -m pip --version
# 例:
# pip 24.0 from /Users/me/.pyenv/versions/3.11.8/lib/python3.11/site-packages/pip (python 3.11)
この出力を見ると、
-
どの
pipが使われているか -
どの Python に紐づいているか
が分かります。
実際にどう書くのがよいか
たとえば README や社内ドキュメントでは、次のように書くと親切です。
# Python 3 系に対して明示的にインストールする
python3 -m pip install -r requirements.txt
仮想環境前提ならこうです。
# 仮想環境の Python を使って依存関係を入れる
python -m pip install -r requirements.txt
この書き方だと、読む側も「この Python に入れるんだな」と理解しやすくなります。
ありがちな誤解
pip3 install なら十分では?
pip3 も pip よりは意図が明確ですが、それでも「どの Python 3 系か」は曖昧なことがあります。
たとえば Python 3.10 と 3.12 が共存していると、pip3 がどちらを向くかは環境次第です。
そのため、より確実なのは次です。
python3 -m pip install package-name
さらに特定バージョンを狙うならこうです。
python3.11 -m pip install package-name
これはかなり明快です。
さいごに
pip install と python3 -m pip install の違いは、単なる書き方の差ではありません。
本質は「どの Python 環境にインストールするかを、明示できるかどうか」です。
普段は pip install でも動くことがあります。
ただ、環境が少し複雑になるだけで、パッケージの入れ先ズレが起きやすくなります。
特に次のような症状が出たら、この違いを疑う価値があります。
-
インストールしたのに import できない
-
ターミナルでは動くのに VS Code では動かない
-
pip listにはあるのに、実行時には見つからない -
仮想環境を使っているのに挙動が変
そんなときは、python3 -m pip --version と python3 -c "import sys; print(sys.executable)" を並べて確認すると原因に近づけます。
英語ファイル名: difference-between-pip-install-and-python3-m-pip-install.md