WSLで requirements.txt が反映されない原因と解決方法(pip install -r が効かない)
① 結論
WSLで pip install -r requirements.txt を実行したのに、ライブラリが入っていない/importできない場合、
原因の多くは 「実行しているPythonとpipの紐づけがズレている」 か 「venvが有効化されていない」 です。
まず python -m pip を使ってインストール先を統一し、which python と echo $VIRTUAL_ENV で環境が揃っていることを確認してください。
結論だけ先に手順を書くと、以下で直るケースが最も多いです。
# プロジェクト直下で
source venv/bin/activate
python -m pip install -U pip
python -m pip install -r requirements.txt
② 症状
pip install -r requirements.txtはエラーなく成功する- しかし実行すると
ModuleNotFoundErrorが出る pip freezeを見ると入っているはずなのに、実行環境では見えない- WSLのターミナルでは動くが、VS Code実行(Run/Debug)だけ失敗する
③ 原因(原因+詳細)
原因1:pip と python の紐づけがズレていて、別環境にインストールされている
【詳細】
- なぜ起きるか
WSLにはpython/python3が混在していたり、venvの有無で参照先が変わります。
その状態でpip install -rを実行すると、「今実行しているPythonとは別のPython環境」に入ってしまうことがあります。
すると requirements.txt 自体は“入った”ように見えますが、実行時に import できず「反映されない」ように見えます。 - 起きやすい条件
pipを素で使っている/Pythonが複数入っている/--userを付けたことがある/venvを切り替えている - 判断ポイント(コマンド or 状態)
pipがどのPythonに紐づいているかを確認します。
which python
python -c "import sys; print(sys.executable)"
pip --version
python -m pip --version
正常の目安:pip --version と python -m pip --version が同じ系統のパス(できれば .../venv/)を指すこと。
ここがズレているなら、requirements.txt は“別の場所”に入っています。
原因2:venvが有効化されていない(または別ディレクトリ/別シェルで有効化できていない)
【詳細】
- なぜ起きるか
venvは作成しただけでは有効にならず、source venv/bin/activateが必要です。
有効化していない状態でpip install -rをすると、グローバル環境に入ったり、別venvに入ります。
さらに、プロジェクト直下ではない場所でactivateしようとして失敗しているケースも多いです。 - 起きやすい条件
ターミナルを複数開いている/cdせずにコマンド実行/WSLを再起動した/fish等のシェルを使っている - 判断ポイント(コマンド or 状態)
pwd
ls -la
echo $VIRTUAL_ENV
which python
$VIRTUAL_ENV が空、または which python が /usr/bin/python3 のままなら venv は有効化されていません。
venv周りの基本切り分けは、以下の記事で手順を詳しくまとめています(先に揃えると最短です)。
原因3:requirements.txt の内容/実行場所が想定とズレている
【詳細】
- なぜ起きるか
pip install -r requirements.txtは「カレントディレクトリ」にある requirements.txt を読みます。
そのため、別ディレクトリで実行していると “別のrequirements.txt” を読んだり、空のファイルを読んで「何も入らない」状態になります。
また、requirements.txt に誤ったパッケージ名、Pythonバージョン不一致の指定、環境依存の指定があると、成功しているように見えて一部だけ入っていないことがあります(ログが流れて見逃しやすい)。 - 起きやすい条件
プロジェクト直下が複数ある/monorepo/requirements.txtを分割している/相対パスで混乱している - 判断ポイント(コマンド or 状態)
# どのrequirements.txtを読んでいるか確認
pwd
ls -la requirements.txt
# 中身の確認(行数と先頭だけ見る)
wc -l requirements.txt
head -n 30 requirements.txt
さらに「本当に入ったか」を確実にするなら、インストール後に以下で確認します。
python -m pip freeze | head -n 50
python -c "import pkgutil; print('requests' in [m.name for m in pkgutil.iter_modules()])"
④ 切り分け手順(コマンド付き)
- プロジェクト直下か確認
pwd
ls -la
- venv有効化の状態を確認
echo $VIRTUAL_ENV
which python
python -c "import sys; print(sys.executable)"
- pipの紐づけを確認(最重要)
pip --version
python -m pip --version
- requirements.txt を正しく読めているか確認
ls -la requirements.txt
head -n 30 requirements.txt
- インストール後に「実行Pythonで」入ったか確認
python -m pip freeze | head -n 50
⑤ 解決方法
解決1:venvを有効化し、python -m pip でインストールする(最優先)
cd /path/to/project
source venv/bin/activate
python -m pip install -U pip
python -m pip install -r requirements.txt
これで「実行するPython」と「requirements.txtのインストール先」を確実に一致させられます。
解決2:混乱している場合はvenvを作り直す(確実)
# venvが有効なら解除
deactivate 2>/dev/null || true
rm -rf venv
python3 -m venv venv
source venv/bin/activate
python -m pip install -U pip
python -m pip install -r requirements.txt
解決3:requirements.txt の指定を見直す(内容ズレ対策)
以下が含まれている場合、環境差で失敗・一部未導入になりやすいです。
- パッケージ名のタイプミス(例:大文字小文字や別名)
- 極端に古い固定バージョン(例:
package==0.0.1) - OS依存のパッケージ(ビルドが必要)
まずは最小で再現させ、ログを明示して確認します。
python -m pip install -r requirements.txt -v
⑥ 再発防止
- pipは必ず
python -m pipを使う(紐づけズレ防止) - プロジェクト開始時に
echo $VIRTUAL_ENV/which pythonを確認する - セットアップ手順をREADMEに固定し、毎回同じ順序で作業する
- requirements.txt はプロジェクト直下に置き、分割するなら命名規則(例:requirements-dev.txt)を統一する
⑦ それでもダメな場合
requirements.txt を入れたのに import できない場合、最終的には ModuleNotFoundError として表面化します。
その場合は「どのPythonで実行しているか」「pipがどこへ入れているか」のズレが原因のことが多いです。
以下の記事で、ズレの典型パターンと直し方を切り分けています。
上記でも解決しない場合は、以下の出力をそのまま貼ると原因を特定しやすいです。
pwd
echo $VIRTUAL_ENV
which python
python -c "import sys; print(sys.executable)"
pip --version
python -m pip --version
head -n 30 requirements.txt

コメント