0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

pip install と python3 -m pip install の違い

0
Posted at

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 パッケージ名 を使うと事故が減ります

目次

  1. pip install の意味

  2. python3 -m pip install の意味

  3. 何が違うのか

  4. どんなときに困るのか

  5. 使い分けの目安

  6. よくある確認コマンド

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 の意味

こちらは python3pip モジュールを直接実行しています。

# 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

この場合、python3pip が別物です。

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 pipwhich 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 なら十分では?

pip3pip よりは意図が明確ですが、それでも「どの Python 3 系か」は曖昧なことがあります。

たとえば Python 3.10 と 3.12 が共存していると、pip3 がどちらを向くかは環境次第です。

そのため、より確実なのは次です。

python3 -m pip install package-name

さらに特定バージョンを狙うならこうです。

python3.11 -m pip install package-name

これはかなり明快です。

さいごに

pip installpython3 -m pip install の違いは、単なる書き方の差ではありません。
本質は「どの Python 環境にインストールするかを、明示できるかどうか」です。

普段は pip install でも動くことがあります。
ただ、環境が少し複雑になるだけで、パッケージの入れ先ズレが起きやすくなります。

特に次のような症状が出たら、この違いを疑う価値があります。

  • インストールしたのに import できない

  • ターミナルでは動くのに VS Code では動かない

  • pip list にはあるのに、実行時には見つからない

  • 仮想環境を使っているのに挙動が変

そんなときは、python3 -m pip --versionpython3 -c "import sys; print(sys.executable)" を並べて確認すると原因に近づけます。

英語ファイル名: difference-between-pip-install-and-python3-m-pip-install.md

0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?