Macでpip3がどのPythonを指しているか確認する方法


pip3 install で入れたはずなのに、python3 で動かすと ModuleNotFoundError になる。この食い違いは、pip3 と python3 が別々のPythonを指しているときに起きます。

確認は2つのコマンドで済みます。pip3 -V の from の後ろと、python3 -m pip -V の from の後ろが同じ場所なら一致、違えば食い違いです。

pip3 -V
python3 -m pip -V

食い違っていてもいなくても、入れるときは python3 -m pip install パッケージ名 の形にすれば、実行に使う python3 と入れ先が必ずそろいます。

以下は、このサイトの運営に使っているMac(macOS 26.6.2)で、2026年10月19日に一時フォルダで再現した結果です。このMacにはAnaconda、Xcode付属、Homebrewの3.11と3.12の、計4つのPythonがあります。

このMacの python3 と pip3 の正体

which ではなく which -a を使うと、PATH上の候補がすべて出ます。上にあるものが実際に使われます。

$ which -a python3
/Users/me/opt/anaconda3/bin/python3
/usr/bin/python3
$ which -a pip3
/Users/me/opt/anaconda3/bin/pip3
/usr/bin/pip3
$ which -a pip
/Users/me/opt/anaconda3/bin/pip
$ which -a python
/Users/me/opt/anaconda3/bin/python

次に、pip自身に「どのPython用か」を答えさせます。

$ python3 -c "import sys;print(sys.executable, sys.version)"
/Users/me/opt/anaconda3/bin/python3 3.9.7 (default, Sep 16 2021, 08:50:36) 
[Clang 10.0.0 ]
$ pip3 -V
pip 21.2.4 from /Users/me/opt/anaconda3/lib/python3.9/site-packages/pip (python 3.9)
$ python3 -m pip -V
pip 21.2.4 from /Users/me/opt/anaconda3/lib/python3.9/site-packages/pip (python 3.9)

読み方は、from の後ろがpipの置き場所(=ライブラリの入れ先)、末尾のカッコがそのPythonの版です。このMacでは pip3・pip・python3 -m pip がすべてAnacondaを指していて、ふだんのターミナルでは食い違いは起きていません。

PATHに名前が出てこないPythonもある

which -a python3 にはHomebrewのPythonが出てきません。このMacのHomebrewは python@3.11 と python@3.12 という版指定の形で入っていて、/opt/homebrew/bin には数字付きの名前しか置かれていないためです。

$ ls -l /opt/homebrew/bin | grep -E " (python|pip)[0-9.]*(-config)? " | awk "{print \$9, \$10, \$11}"
pip3.11 -> ../Cellar/python@3.11/3.11.14_3/bin/pip3.11
pip3.12 -> ../Cellar/python@3.12/3.12.13_4/bin/pip3.12
python3.11 -> ../Cellar/python@3.11/3.11.14_3/bin/python3.11
python3.11-config -> ../Cellar/python@3.11/3.11.14_3/bin/python3.11-config
python3.12 -> ../Cellar/python@3.12/3.12.13_4/bin/python3.12
python3.12-config -> ../Cellar/python@3.12/3.12.13_4/bin/python3.12-config

4つのPythonそれぞれに、実体とpipの入れ先を聞いた結果をまとめます。

打つ名前sys.executable(実体)-m pip -V の入れ先
python3~/opt/anaconda3/bin/python3(3.9.7)~/opt/anaconda3/lib/python3.9/site-packages(pip 21.2.4)
/usr/bin/python3/Applications/Xcode.app/Contents/Developer/usr/bin/python3(3.9.6)Xcode内の .../Python3.framework/Versions/3.9/lib/python3.9/site-packages(pip 21.2.4)
python3.11/opt/homebrew/opt/python@3.11/bin/python3.11(3.11.14)/opt/homebrew/lib/python3.11/site-packages(pip 26.0)
python3.12/opt/homebrew/opt/python@3.12/bin/python3.12(3.12.13)/opt/homebrew/lib/python3.12/site-packages(pip 26.1.2)
このMacの4つのPython(2026年10月19日)

/usr/bin/python3 と /usr/bin/pip3 は、どちらも同じ118,640バイトのファイルでした。これは本物のPythonではなく、開発者ツールの場所へ処理を渡す入口です。このMacでは xcode-select -p が /Applications/Xcode.app/Contents/Developer を返し、実体はXcodeの中のPythonになっていました。Command Line Toolsだけを入れたMacとは入れ先が変わるので、パスは表示で確かめてください。

数字付きの pip3.12 は python3.12 と、pip3.11 は python3.11 と対になっていて、-V の表示も一致しました。どのPythonか確実に選びたいときは、python3.12 -m pip のように版を付けて呼びます。

再現:pip3 で入れて、python3 で読めない

食い違いを実際に起こしてみます。ネットワークに頼らないよう、一時フォルダで memo_hello という小さなパッケージを作り、python3.12 から作った仮想環境の pip3 をパス指定で呼んで入れました。仮想環境は有効化していません。

$ python3.12 -m venv venv312
$ venv312/bin/pip3 -V
pip 26.1.2 from /private/tmp/itm62.WQLG/venv312/lib/python3.12/site-packages/pip (python 3.12)
$ venv312/bin/pip3 install --no-index ./memo_hello-0.1-py3-none-any.whl
Processing ./memo_hello-0.1-py3-none-any.whl
Installing collected packages: memo-hello
Successfully installed memo-hello-0.1
$ python3 -c "import memo_hello"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'memo_hello'
$ python3 -m pip -V
pip 21.2.4 from /Users/me/opt/anaconda3/lib/python3.9/site-packages/pip (python 3.9)

インストールは成功しているのに、python3 からは見えません。入れたpipの表示は venv312/lib/python3.12/site-packages、python3 のpipの表示は anaconda3/lib/python3.9/site-packages で、場所が違います。python3 -m pip list にも memo-hello は出てきませんでした。

エディタのターミナル、別のタブ、以前開いたまま有効化が切れたシェルなど、pip3 がどこを向いているか意識しにくい場面でこの形になります。importできない側から原因を追う手順はライブラリは入っているのにimportできない記事にまとめています。

仮想環境を有効化すると両方そろう

同じ仮想環境を有効化してから確認すると、候補の先頭が仮想環境に変わり、pipもpythonもそろいます。

$ source venv312/bin/activate
$ echo "VIRTUAL_ENV=$VIRTUAL_ENV"
VIRTUAL_ENV=/private/tmp/itm62.WQLG/venv312
$ which -a python3 | head -2
/private/tmp/itm62.WQLG/venv312/bin/python3
/Users/me/opt/anaconda3/bin/python3
$ which -a pip3 | head -2
/private/tmp/itm62.WQLG/venv312/bin/pip3
/Users/me/opt/anaconda3/bin/pip3
$ python3 -m pip -V
pip 26.1.2 from /private/tmp/itm62.WQLG/venv312/lib/python3.12/site-packages/pip (python 3.12)
$ python -V
Python 3.12.13
$ deactivate
$ which python3
/Users/me/opt/anaconda3/bin/python3

有効化はそのシェルの中だけで効き、deactivate するとAnacondaに戻ります。作業を始める前に echo $VIRTUAL_ENV が空でないかを見る習慣にすると、どちらに入れているかで迷わなくなります。有効化がうまくいかない場合はvenvが有効化できないときの記事を見てください。VS Codeで別のPythonが選ばれている場合はVS CodeのPython選択の記事が参考になります。

Homebrewの3.12は pip で入れられない

正しく python3.12 -m pip の形で呼んでも、Homebrewの3.12本体には入れられません。

$ python3.12 -m pip install --no-index ./memo_hello-0.1-py3-none-any.whl
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try brew install
    xyz, where xyz is the package you are trying to
    install.
    
    If you wish to install a Python library that isn't in Homebrew,
    use a virtual environment:
    
    python3 -m venv path/to/venv
    source path/to/venv/bin/activate
    python3 -m pip install xyz

(表示はこの後も続き、pipx の案内や --break-system-packages の説明が出て、終了コードは1でした。pip3.12 install でも同じ表示です。)

これは権限の問題ではなく、PEP 668の仕組みです。Python本体の標準ライブラリのフォルダに EXTERNALLY-MANAGED というファイルがあると、pipは仮想環境の外への書き込みを断ります。表示どおり、仮想環境を作ってその中で入れるのが正しい対処で、sudo を付けても解決しません。

このMacで目印のファイルを確かめると、Homebrewの3.12にはありましたが、3.11・Anaconda・Xcode付属のPythonにはありませんでした。つまり pip3.11 install や Anacondaの pip3 install は止められずにそのまま本体へ入ります。止まらないから正しい入れ先、というわけではないので注意してください(この検証では、どの本体にも実際には入れていません)。

$ for p in python3.11 python3.12; do $p -c "import sysconfig,os;d=sysconfig.get_path(\"stdlib\");print(d, os.path.exists(os.path.join(d,\"EXTERNALLY-MANAGED\")))"; done
/opt/homebrew/opt/python@3.11/Frameworks/Python.framework/Versions/3.11/lib/python3.11 False
/opt/homebrew/opt/python@3.12/Frameworks/Python.framework/Versions/3.12/lib/python3.12 True

requirements.txt で止まるときは最終行を読む

pip install -r requirements.txt が失敗したときも、まず -V で入れ先を確かめてから、エラーの最終行を読みます。先ほどの仮想環境のPythonで、ネットワークを使わずに2種類の失敗を起こしました。

書式の間違い(版の前に == が無い):

$ cat req_bad.txt
memo-hello 0.1
$ venv312/bin/python3 -m pip install --no-index --find-links . -r req_bad.txt
ERROR: Invalid requirement: 'memo-hello 0.1': Expected semicolon (after name with no version specifier) or end
    memo-hello 0.1
               ^ (from line 1 of req_bad.txt)

from line 1 が問題の行です。memo-hello==0.1 のように直します。

存在しない版・存在しない名前:

$ cat req_ver.txt
memo-hello==9.9
$ venv312/bin/python3 -m pip install --no-index --find-links . -r req_ver.txt
Looking in links: .
ERROR: Could not find a version that satisfies the requirement memo-hello==9.9 (from versions: 0.1)
ERROR: No matching distribution found for memo-hello==9.9
$ venv312/bin/python3 -m pip install --no-index --find-links . memo-helo
Looking in links: .
ERROR: Could not find a version that satisfies the requirement memo-helo (from versions: none)
ERROR: No matching distribution found for memo-helo

(from versions: ...) に版が並んでいれば、パッケージはあるが指定した版が無い、という意味です。none なら名前自体が見つかっていないので綴りを疑います。版が並んでいても、Pythonの版によって入れられる版は変わるので、-V の末尾のカッコ(python 3.9 など)も一緒に確認します。

キャッシュの場所は4つとも同じ

pipがダウンロードしたものの置き場所(キャッシュ)は、入れ先とは別です。このMacでは、Anaconda・Xcode付属・仮想環境のどのpipに聞いても同じ場所でした。

$ python3 -m pip cache dir; venv312/bin/python3 -m pip cache dir; /usr/bin/python3 -m pip cache dir
/Users/me/Library/Caches/pip
/Users/me/Library/Caches/pip
/Users/me/Library/Caches/pip

キャッシュはどのPythonのpipも共有しているので、ここを消しても「どこに入ったか」の食い違いは解決しません。pip install が何度も同じところで失敗する場合の切り分けに、--no-cache-dir を付けて一度だけ試す、という使い方にとどめます。

参考にした公式ドキュメント

python や python3 という名前そのものが見つからない場合は、pythonコマンドが見つからない記事を参照してください。

検証した環境

この記事の調査・再現・執筆は、運営者の指示のもとでAIエージェント(AnthropicのClaude)が行い、公開するかどうかは運営者が決めています。載せた出力は、そのAIエージェントがこのMacで実際にコマンドを実行して得たものです。

  • macOS 26.6.2(Apple シリコン)、zsh、Homebrew 7.0.9
  • Anaconda の Python 3.9.7(pip 21.2.4)。PATHの先頭で、conda の base 環境が有効
  • /usr/bin/python3 → Xcode 付属の Python 3.9.6(pip 21.2.4)
  • Homebrew の python@3.11(3.11.14、pip 26.0)と python@3.12(3.12.13、pip 26.1.2)
  • 検証日:2026年10月19日。/tmp の一時フォルダの仮想環境だけにパッケージを入れ、自作の小さなパッケージを使ってネットワークには接続していません

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

トップへ戻る