WSLで Python の仮想環境(venv)が有効化されない原因と解決方法
① 結論
WSLで venv を作成したのに有効化されない、または有効化したはずなのに
pip install したパッケージが使えない原因の多くは、
「使っているPythonが想定と違う」「venvが正しく有効化されていない」「pipのインストール先がズレている」
のいずれかです。
まずは which python と echo $VIRTUAL_ENV で
「今どのPythonを使っているか」を確認し、
source venv/bin/activate と
python -m pip を徹底すれば解決します。
② 症状
python -m venv venvは成功するsource venv/bin/activateを実行しても効いていないpip installしたのにModuleNotFoundErrorが出るwhich pythonが/usr/bin/python3のまま
③ 原因(原因+詳細)
原因1:venvが有効化されていない
【詳細】
venvは作成しただけでは有効になりません。
venvを作成したディレクトリで
source venv/bin/activate を実行する必要があります。
また、別ディレクトリから実行している場合や、
別シェル(fishなど)を使っている場合も有効化に失敗します。
確認コマンド
pwd
echo $VIRTUAL_ENV
which python
$VIRTUAL_ENV が空、または
which python が /usr/bin/python3 を指している場合、
venvは有効化されていません。
なお、Pythonコマンド自体が認識されていない場合は、
venv以前の問題です。以下の記事で先に確認してください。
原因2:pipのインストール先がズレている
【詳細】
venvを有効化していない状態で pip install を実行すると、
グローバル環境にインストールされます。
また、venv有効化中でも pip が別Pythonに紐づいていると、
想定外の場所にインストールされます。
確認コマンド
pip --version
python -m pip --version
両方とも venv 配下を指していなければ、
インストール先がズレています。
原因3:VS Codeや実行環境が別Pythonを参照している
【詳細】
WSL+VS Code環境では、ターミナルと実行時のPythonが
別々になることがあります。
その場合、ターミナルでは動くのに、
実行時だけエラーになる現象が起きます。
確認コマンド
python -c "import sys; print(sys.executable)"
出力が venv/bin/python でなければ、
VS Code側のPython設定を見直す必要があります。
④ 切り分け手順
- プロジェクト直下であることを確認
echo $VIRTUAL_ENVでvenv有効化を確認which pythonで実行Pythonを確認python -m pip --versionでpipの紐づけを確認
⑤ 解決方法
手順1:venvを正しく有効化
cd プロジェクトディレクトリ
python3 -m venv venv
source venv/bin/activate
手順2:pipは必ず python -m pip を使う
python -m pip install -U pip
python -m pip install パッケージ名
手順3:混乱している場合はvenvを作り直す
deactivate
rm -rf venv
python3 -m venv venv
source venv/bin/activate
python -m pip install -r requirements.txt
⑥ 再発防止
- 作業開始時に
echo $VIRTUAL_ENVを確認する pip installではなくpython -m pipを使う- requirements.txtで環境を固定する
⑦ それでもダメな場合
venvを有効化しても ModuleNotFoundError が出る場合は、
pipのインストール先ズレが原因の可能性が高いです。
以下の記事で詳細に切り分けています。
上記でも解決しない場合は、which python、
pip --version の出力差分を確認してください。

コメント