pip installしたのに ModuleNotFoundError が出るときの対処
pip install が成功したように見えるのにインポートで失敗するのは、多くの場合「pipが入れた場所」と「pythonが実行している場所」が違うPython環境を指しているためです。python -m pip install に統一し、仮想環境を使って環境を一本化すると解決します。
ModuleNotFoundError: No module named 'requests'原因
PCにPythonが複数入っている(システム標準、Homebrew、pyenv、Anaconda等)と、ターミナルで pip install と打ったときに使われるpipと、python script.py で実行されるpythonが、別々のインストールを指してしまうことがあります。見た目は同じコマンドでも、実体が食い違っているのが本質です。
対処
- まず、いま使われているpythonとpipの実体を確認します。
which python3which pip3python3 -c "import sys; print(sys.executable)"- pipとpythonの場所が食い違っているなら、
python -m pip installの形で、実行に使うpythonに紐づいたpipで入れ直します。
python3 -m pip install requests- 根本的には仮想環境を使い、プロジェクトごとにPythonとパッケージを分離します。
python3 -m venv .venvsource .venv/bin/activate # Windowsは .venv\Scripts\activatepython -m pip install requests- IDE(VSCode等)を使っている場合は、インタプリタの選択が仮想環境を指しているかも確認します。ターミナルでは動くのにIDEでは失敗する、という食い違いはここが原因のことが多いです。
まとめ
・原因はpipとpythonが別々のPython環境を指していること ・which python3 / which pip3 で実体を確認する ・python -m pip install で実行系に紐づけて入れる ・恒久対応は仮想環境(venv)でプロジェクトごとに分離する