WSLでpip installしたのにimportできない原因と対処法|ModuleNotFoundErrorの解決手順

① 結論

結論:WSLで pip install が成功しているにも関わらず import できない場合、ほとんどの原因はpipがインストールしたPython環境と、実行しているPythonが一致していないことです。特に「pipとpythonのバージョン不一致」「venv未有効化」「sudo pipの使用」が頻発します。python -m pip を基準に切り分ければ確実に解決できます。

② 症状

  • pip install xxx は成功するが、import xxxModuleNotFoundError
  • ターミナルによってimportできたりできなかったりする
  • VSCodeでは動かないが、WSLターミナルでは動く(または逆)
  • 以前は動いていたのに、環境変更後に動かなくなった

③ 原因(最大3つ)

原因①:pipとpythonの実行バイナリが一致していない

【詳細】
WSLでは複数のPythonが共存しやすく、pip コマンドが別バージョンのPythonに紐づいているケースが多発します。この状態で pip install を実行すると、実行中のPythonとは別の環境にライブラリが入るため、import できません。
起きやすい条件:aptとpyenvの併用、Python複数バージョン導入、VSCode連携
判断ポイント:

which python
which pip
python -m pip --version

python -m pip のパスと which python が一致していなければ不一致です。

原因②:venvを有効化していない(別環境にインストールしている)

【詳細】
venvを作成していても、有効化せずに pip install を実行するとグローバル環境にライブラリが入ります。その後venvを有効化して実行すると、venv側にライブラリが存在せず ModuleNotFoundError が発生します。
起きやすい条件:新しいターミナルを開いた直後、venv自動有効化を期待している場合
判断ポイント:

which python

venv/bin/python を指していなければ、venvは有効化されていません。

原因③:sudo pipでroot環境にインストールしている

【詳細】
sudo pip install を使うと、rootユーザーのPython環境にライブラリが入ります。通常ユーザーで実行しているPythonからは参照できないため、インストール済みにも関わらず import に失敗します。
起きやすい条件:Permissionエラー回避のためsudoを使用した場合
判断ポイント:

pip show パッケージ名
sudo pip show パッケージ名

sudoのみ表示される場合、root環境に入っています。

④ 切り分け手順(コマンド付き)

  1. 実行中のPythonを確認:
  2. which python
  3. python --version
  4. pipが紐づくPythonを確認:
  5. python -m pip --version
  6. 問題のパッケージを直接import:
  7. python -c "import パッケージ名; print('ok')"
  8. venv使用時は有効化を確認:
  9. source venv/bin/activate

⑤ 解決方法

解決策①:必ず python -m pip を使う

python -m pip install パッケージ名

解決策②:venvを有効化してからインストール

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

解決策③:sudo pipで入れたものを整理

sudo pip uninstall パッケージ名

その後、ユーザー環境またはvenvで再インストールします。

⑥ 再発防止

  • pip 単体ではなく python -m pip を使う
  • プロジェクトごとにvenvを作成・明示的に有効化
  • sudo pip を使わない

⑦ それでもダメな場合

  • 新しいvenvを作成し、最小構成で再現確認する
python -m venv testenv
source testenv/bin/activate
python -m pip install パッケージ名
python -c "import パッケージ名"
  • それでも失敗する場合は、WSLのPython構成自体が壊れている可能性があるため、Pythonの再インストールを検討する

コメント

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