WSLでPythonが動かない原因と対処法|pip installしてもModuleNotFoundErrorが出る場合

① 結論

結論:
WSLで pip install は成功するのに importModuleNotFoundError が出る原因の多くは、
実行しているPythonとpipが別のPython環境を参照していることです。
まず python3 -m pip を使ってpipの実行先をPythonに揃え、必要に応じて仮想環境(venv)を作り直すと解決します。

WSLでは「aptで入れたPython」「手動で入れたPython」「venv」「pyenv」などが混在しやすく、
知らないうちに別環境へインストールしているケースが非常に多いです。

② 起きている症状

  • pip install パッケージ は成功する
  • しかし python3import パッケージ をすると ModuleNotFoundError
  • 別プロジェクトでは動くのに、今回のディレクトリだけ失敗する
  • venvを作ったはずなのに、入れたライブラリが見つからない

③ よくある原因(優先度順)

原因①:pipとPythonの参照先が不一致

【詳細】
WSLでは pip コマンドが、実行している python3 とは別のPythonに紐づいていることがあります。
その状態で pip install すると、別環境にインストールされるため、
実行中のPythonからは見えず ModuleNotFoundError になります。
特に、過去に複数のPythonを入れた環境や、venvを使わずグローバルに入れていた環境で起きやすいです。

起きやすい条件:
pythonpython3 を使い分けている
・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 --versionpython3 -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を作る(グローバル汚染防止)
  • pythonpython3 を混在させない(実行環境の固定)
  • 依存は requirements.txt に残す(復旧を最短化)

⑦ それでも解決しない場合の次の一手

  • 対象パッケージがどこに入ったか確認する(インストール先の特定)
python3 -m pip show パッケージ名
  • importできるかを1行で確認する
python3 -c "import パッケージ名; print('ok')"
  • エラーメッセージ全文(パッケージ名・Pythonバージョン含む)で再検索する

コメント

タイトルとURLをコピーしました