個人開発の壁紙アプリに載せる画像を一括で整える、小さな Python スクリプトを書き足していた夜のことです。ターミナルで pip install は成功し、スクリプトも走るのに、エディタの import だけが赤い波線のまま消えませんでした。補完も効きません。
私が最初にお伝えしたいのは、この症状のほとんどが「ターミナルが使っている Python」と「エディタが見ている Python」の食い違いだということです。私はそこに気づくまで、パッケージを入れ直し、仮想環境を作り直し、30 分ほど同じ場所をぐるぐる回っておりました。結果は芳しくありませんでした。
最初の一手: 二つの Python を並べて見る
直す前に、ずれているかどうかを確かめます。ターミナルで次を実行してください。
which python # Windows は where python
python -c "import sys; print(sys.executable)"
python --version次に、Antigravity の右下のステータスバーに出ている Python のバージョン表示をクリックします。選択中のインタープリターのパスが見えるはずです。
- パスが一致している: インタープリターは正しく選ばれています。原因は別にあります(後述の「それでも直らないとき」へ)。
- パスが違う: エディタが別の Python を見ています。ここから先の手順の出番です。
ここで確かめたいのは、バージョンの数字ではなくパスの文字列です。3.12 と 3.12 でも、システムの Python と .venv の Python では中身のパッケージがまったく違います。
venv の場合
プロジェクト直下に python -m venv .venv で作った環境なら、インタープリターは次の場所にあります。
- Mac / Linux:
.venv/bin/python - Windows:
.venv\Scripts\python.exe
コマンドパレット(Cmd+Shift+P / Ctrl+Shift+P)を開き、「Python: Select Interpreter」(日本語表示なら「インタープリターを選択」)を実行します。一覧に .venv が出ていればそれを、出ていなければ「Enter interpreter path」から上のパスを直接入力します。
# プロジェクトルートで作成
python -m venv .venv
# 有効化
source .venv/bin/activate # Mac/Linux
.venv\Scripts\activate # Windows
# パスの確認
which pythonメニューの文言は拡張機能のバージョンで少し変わることがあります。見つからないときは、コマンドパレットに「interpreter」と打てば候補が絞られます。
Poetry の場合
Poetry は初期設定だと、仮想環境をホームのキャッシュ領域(Mac なら ~/Library/Caches/pypoetry/virtualenvs/ 以下)に作ります。プロジェクトの外にあるため、エディタの自動検出から漏れることがあります。
# 仮想環境をプロジェクト内の .venv に作らせる
poetry config virtualenvs.in-project true
# 既存の環境を作り直す
poetry env remove python
poetry installこうしておけば .venv がプロジェクト直下にでき、venv と同じ扱いで拾われます。キャッシュ領域のままで使いたい場合は、poetry env info --path で出てきたパスの末尾に /bin/python を足して、インタープリターとして直接指定します。
uv の場合
uv は既定でプロジェクト直下に .venv を作るため、検出されやすい部類です。それでも uv sync の直後に反映されないことがあります。
uv sync
uv run python -c "import sys; print(sys.executable)"uv run が出力したパスと、ステータスバーのパスを見比べてください。一致していなければ、インタープリターの選択をやり直します。依存を足したあとにパッケージが見つからない場合は、Antigravity × uv でパッケージが見つからないエラーの解決策 も合わせてご覧ください。
Conda の場合
Conda の環境は、venv よりも自動検出されにくい印象があります。まず環境の実体を確認します。
conda info --envs
# myenv /opt/homebrew/Caskroom/miniconda/base/envs/myenv出てきたパスに /bin/python を足したものを、インタープリターとして直接指定します。毎回選び直すのが面倒なら、プロジェクトの .vscode/settings.json に書いておく方法もあります(Antigravity は VS Code 系の設定ファイルを読み込みます)。
{
"python.defaultInterpreterPath": "/opt/homebrew/Caskroom/miniconda/base/envs/myenv/bin/python"
}ただし、これは自分のマシンのパスです。リポジトリで共有する場合は、他の方の環境で壊れないよう、.gitignore に入れるか、各自が書き換える前提で運用してください。
それでも直らないとき
パスが一致しているのに赤線が消えない場合は、次の四つを順に確かめます。
1. ウィンドウを開き直していない。 起動後に仮想環境を作った場合、エディタは古い一覧を持ったままです。コマンドパレットの「Developer: Reload Window」で再読み込みします。
2. 開いているフォルダがプロジェクトルートではない。 サブフォルダだけを開いていると、.venv が探索範囲の外になります。pyproject.toml や requirements.txt のある階層を開き直してください。
3. ターミナルの activate と、エディタの選択は別物。 ターミナルで activate しても、エディタのインタープリター選択は変わりません。逆に、エディタで選んだだけでは、すでに開いている古いターミナルは切り替わりません。新しいターミナルを開き直すと揃います。
4. 言語サーバーが古い状態を覚えている。 インタープリターを替えた直後は、Pylance などの言語サーバーが以前の環境を参照し続けることがあります。Reload Window でも直らなければ、拡張機能の再起動を試します。
四つ目に行き着くまでに、私は仮想環境を二度作り直しました。いま思えば、最初の「パスを並べる」だけで済んだ話でした。
まず二つのパスを並べ、食い違いを自分の目で確かめてから直します。 この順番だけは、急いでいる日でも崩さないようにしています。
チームで揃えたいとき
人によってパスが違う問題は、設定ファイルをいくら整えても残ります。Python のバージョンと環境をまとめて固定したいなら、DevContainer が近道です。手順は Antigravity DevContainer 完全セットアップガイド に書きました。Node.js 側で似た食い違いが起きている方は、Node.js バージョンが一致しない問題 も参考になるかもしれません。
次の一歩
いま開いているプロジェクトで、ステータスバーのパスと which python の出力を見比べるところから始めていただければと思います。ほんの数十秒の作業ですが、原因の半分はそこで見つかります。