VS Codeで pip install が反映されないときの確認ポイント(Mac)


VS Codeのターミナルで pip install が成功したのに、実行すると ModuleNotFoundError になる。この場合、pipは壊れていません。入れた先のPythonと、実行に使っているPythonが別物です。

いちばん短い直し方は、実行に使うPythonを名指しして入れ直すことです。プロジェクト直下に .venv があるなら次の1行です。

.venv/bin/python -m pip install パッケージ名

以下は、このサイトの運営に使っているMac(macOS 26.6.2)で、2026年10月19日に一時フォルダで再現した結果です。

再現:別の環境が有効なままのターミナルで入れる

VS Codeでよく起きるのは、前に開いたターミナルで別の仮想環境が有効なまま残っていて、そこで pip install してしまう形です。これを、作業用の myapp/.venv と、別の環境 old-env の2つを作って再現しました(どちらもHomebrewの Python 3.12 で作成)。

まず old-env を有効にしたターミナルで入れます。インストールは成功します(pipの出力は最後の数行だけ載せています)。

$ source ../old-env/bin/activate
$ which pip
/private/tmp/itm108/old-env/bin/pip
$ pip install python-dateutil
Installing collected packages: six, python-dateutil

Successfully installed python-dateutil-2.9.0.post0 six-1.17.0

次に、VS Codeで .venv を選んでいるときに実行ボタンが使うのと同じ .venv/bin/python でスクリプトを動かします(ここではGUIを使わず、ターミナルから同じPythonを直接呼んでいます)。

$ cat main.py
import sys
print(sys.executable)
from dateutil import parser
print(parser.parse("2026-10-19 09:00"))

$ .venv/bin/python main.py
/private/tmp/itm108/myapp/.venv/bin/python
Traceback (most recent call last):
  File "/private/tmp/itm108/myapp/main.py", line 3, in <module>
    from dateutil import parser
ModuleNotFoundError: No module named 'dateutil'

「Successfully installed」と出たのに、実行では見つからない。症状がそのまま再現しました。

確認:入れた先と実行する先を並べる

原因を確定させるには、2つの場所を表示して比べます。

  1. 入れた先:pipを使ったターミナルで python -m pip --version
  2. 実行する先:実行ボタンでスクリプトを動かし、print(sys.executable) の表示を見る(上の main.py の1行目)
$ python -m pip --version
pip 26.1.2 from /private/tmp/itm108/old-env/lib/python3.12/site-packages/pip (python 3.12)
$ .venv/bin/python -m pip --version
pip 26.1.2 from /private/tmp/itm108/myapp/.venv/lib/python3.12/site-packages/pip (python 3.12)
$ .venv/bin/python -m pip show python-dateutil
WARNING: Package(s) not found: python-dateutil

読むのは from のあとのパスだけです。old-env と myapp/.venv で食い違っています。バージョン表記はどちらも python 3.12 なので、バージョンだけ見ても違いに気づけません。パスで比べてください。

なお、実行ボタン(Run Python File)が使うのはVS Codeで選んでいるインタープリターで、ターミナルのPATHは関係しません。ターミナルで打つ pip や python3 はそのターミナルのPATHで決まります。この2系統が別々に決まることが、ずれの出発点です。

VS Codeで使われるPythonが実行方法で変わることを示す図。実行ボタンは選択中のインタープリターを使いPATHに依存しないが、ターミナルはそのターミナルのPATHに依存する。実行ボタンでは動くのにターミナルで動かない場合は原因がPATH側にある。

直し方

1. 実行するPythonで入れ直す

ターミナルがどの環境を向いていても、Pythonのパスを先頭に書けばその環境に入ります。pipの公式ガイドも、python -m pip は「指定したPythonでpipを動かす」と説明しています(pipの出力は最後の行だけ載せています)。

$ .venv/bin/python -m pip install python-dateutil
Successfully installed python-dateutil-2.9.0.post0 six-1.17.0
$ .venv/bin/python main.py
/private/tmp/itm108/myapp/.venv/bin/python
2026-10-19 09:00:00

2. ターミナルを終了して開き直す

VS Codeが選択中の環境を有効にするのは、ターミナルを新しく作ったときです。古いターミナルは古い環境のまま残ります。パネル右上のゴミ箱でターミナルを終了し、⌃ + ` で開き直してください。×はパネルを隠すだけで、ターミナルは終了しません。

VS Codeの実画面。ターミナルパネル右上のアイコン列を拡大し、ゴミ箱アイコン(ターミナルを終了する)と×(パネルを隠すだけ)に枠と番号を付けた図。

3. そもそも選んでいる環境が違う場合

sys.executable が想定外の場所(Anacondaや /usr/bin/python3 など)なら、入れ先ではなく選択のほうを直します。手順はVS Codeで選択されているPythonが違うときの確認・変更方法に、一覧に仮想環境が出てこない場合は仮想環境が自動認識されない理由と対処法にまとめています。

このMacで引っかかりやすかった点

仮想環境を有効にしていないターミナルで pip を打つと、このMacではAnacondaのpipが動きます。PATHの先頭がAnacondaだからです。

$ which -a pip pip3
/Users/me/opt/anaconda3/bin/pip
/Users/me/opt/anaconda3/bin/pip3
/usr/bin/pip3
$ pip --version
pip 21.2.4 from /Users/me/opt/anaconda3/lib/python3.9/site-packages/pip (python 3.9)
  • Homebrewには python3 という名前のコマンドが無く、/opt/homebrew/bin/python3.11 と python3.12 だけがあります。python3 と打ってもHomebrewのPythonにはなりません。
  • Homebrewの Python 3.12 に直接入れようとすると、error: externally-managed-environment で止まりました(終了コード1、何もインストールされない)。仮想環境の中で入れれば出ません。仮想環境まわりはvenvが有効化できないときの対処法を参照してください。
  • どのpipがどのPythonに付いているかの調べ方はpip3がどのPythonを指しているか確認する方法に書いています。

場所が一致しているのにimportできない場合

入れた先と実行する先が同じなら、次はインストール名とimport名の違いを疑います。今回の python-dateutil は、importでは dateutil という名前です。

$ .venv/bin/python -c "import python_dateutil"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'python_dateutil'
$ .venv/bin/python -m pip show -f python-dateutil | grep -E "^Name|^Location|dateutil/__init__"
Name: python-dateutil
Location: /private/tmp/itm108/myapp/.venv/lib/python3.12/site-packages
  dateutil/__init__.py

pip show -f のファイル一覧に出てくるフォルダ名(ここでは dateutil/)が、importに書く名前です。自作ファイル名との衝突など、ほかの原因はライブラリは入っているのにimportできない理由で扱っています。

Python拡張機能が入っているかも確認する

実行ボタン自体が出ていない場合は、Python拡張機能が入っていないか無効です。このMacでは code コマンドがPATHに無かったので、アプリ内のCLIを直接呼んで確認しました。

$ "/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code" --list-extensions --show-versions | grep -iE "^ms-python\.(python|vscode-pylance|debugpy|vscode-python-envs)@"
ms-python.debugpy@2026.6.0
ms-python.python@2026.10.0
ms-python.vscode-pylance@2026.4.1
ms-python.vscode-python-envs@1.40.0

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

検証した環境

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

  • macOS 26.6.2(Apple Silicon)
  • VS Code 1.136.1、Python拡張機能 2026.10.0、Python Environments拡張機能 1.40.0
  • 仮想環境:Homebrew Python 3.12.13 で作成、pip 26.1.2
  • PATH上の pip:Anaconda(Python 3.9.7)の pip 21.2.4
  • 再現は一時フォルダで実施(2026年10月19日)

コメントを残す

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

トップへ戻る