① 結論
結論:
WSLで pip install は成功するのに import で ModuleNotFoundError が出る原因の多くは、
実行しているPythonとpipが別のPython環境を参照していることです。
まず python3 -m pip を使ってpipの実行先をPythonに揃え、必要に応じて仮想環境(venv)を作り直すと解決します。
WSLでは「aptで入れたPython」「手動で入れたPython」「venv」「pyenv」などが混在しやすく、
知らないうちに別環境へインストールしているケースが非常に多いです。
② 起きている症状
pip install パッケージは成功する- しかし
python3でimport パッケージをするとModuleNotFoundError - 別プロジェクトでは動くのに、今回のディレクトリだけ失敗する
- venvを作ったはずなのに、入れたライブラリが見つからない
③ よくある原因(優先度順)
原因①:pipとPythonの参照先が不一致
【詳細】
WSLでは pip コマンドが、実行している python3 とは別のPythonに紐づいていることがあります。
その状態で pip install すると、別環境にインストールされるため、
実行中のPythonからは見えず ModuleNotFoundError になります。
特に、過去に複数のPythonを入れた環境や、venvを使わずグローバルに入れていた環境で起きやすいです。
起きやすい条件:
・python と python3 を使い分けている
・aptで入れたPythonと別のPythonを共存させている
・venv未使用で pip install を繰り返した
判断ポイント:
以下の結果で、pip --version の表示パスに含まれるPythonが、
which python3 のパスと一致しない場合、この原因に該当します。
which python3
python3 --version
pip --version
原因②:仮想環境(venv)が有効化されていない/壊れている
【詳細】
venvを作成していても、activateしていない状態で pip install を実行すると、
インストール先がグローバルになり、venv内のPythonではパッケージが見つかりません。
また、WSLやPythonの更新後に古いvenvが壊れ、見た目はactivateできても実体がズレていることがあります。
起きやすい条件:
・venv作成後にターミナルを開き直した(activateを忘れた)
・Pythonをアップデートした/WSLを更新した後から発生
・プロジェクトディレクトリを移動・コピーした
判断ポイント:
activate後に以下を実行し、which python が .../venv/bin/python を指していない場合、
venvが有効化されていない(または壊れている)可能性が高いです。
source venv/bin/activate
which python
python --version
python -m pip --version
原因③:Pythonバージョンが混在している(python / python3 / python3.x)
【詳細】
同じWSL内でも python が古いバージョン、python3 が別バージョン、
python3.x がさらに別、という混在が起こりえます。
この状態では、インストールした環境と実行環境が一致せず、import失敗に繋がります。
起きやすい条件:
・複数プロジェクトで異なるPythonバージョンを使っている
・pyenvやasdfを導入したことがある
・OS標準のPythonに追加でPythonを入れた
判断ポイント:
以下でバージョンが食い違う場合、この原因の可能性があります。
python --version
python3 --version
python3.11 --version
④ 切り分け手順(上から順に実行)
手順1:まず実行しているPythonを確定する
which python3
python3 --version
ここで想定外のPythonが出ている場合、原因③の可能性があります。
手順2:pipが同じPythonを参照しているか確認
pip --version
python3 -m pip --version
pip --version と python3 -m pip --version のパスが異なる場合、原因①が濃厚です。
手順3:venvを使っているなら、venvが有効化されているか確認
source venv/bin/activate
which python
python -m pip --version
.../venv/bin/python を指さないなら、原因②(有効化忘れ/破損)を疑います。
⑤ 具体的な解決方法
解決策①:pipは必ず python 経由で実行する(最短で直る)
pipとPythonの不一致を根本的に防ぐため、以後は必ず次の形式で実行します。
python3 -m pip install パッケージ名
これで「インストール先」と「実行するPython」が一致します。
解決策②:venvを作り直して依存を入れ直す
venvが壊れている場合は作り直しが最短です(依存管理している場合は特に効果的)。
rm -rf venv
python3 -m venv venv
source venv/bin/activate
python -m pip install --upgrade pip
解決策③:requirements.txt から再構築
依存が requirements.txt にまとまっているなら、再構築が最速です。
python -m pip install -r requirements.txt
⑥ 再発防止チェックリスト
- pipは必ず
python -m pip経由で実行する(参照先ズレ防止) - プロジェクトごとにvenvを作る(グローバル汚染防止)
pythonとpython3を混在させない(実行環境の固定)- 依存は
requirements.txtに残す(復旧を最短化)
⑦ それでも解決しない場合の次の一手
- 対象パッケージがどこに入ったか確認する(インストール先の特定)
python3 -m pip show パッケージ名
- importできるかを1行で確認する
python3 -c "import パッケージ名; print('ok')"
- エラーメッセージ全文(パッケージ名・Pythonバージョン含む)で再検索する

コメント