Tech カテゴリのイメージ

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が、別々のインストールを指してしまうことがあります。見た目は同じコマンドでも、実体が食い違っているのが本質です。

対処

  1. まず、いま使われているpythonとpipの実体を確認します。
Terminal window
which python3
which pip3
python3 -c "import sys; print(sys.executable)"
  1. pipとpythonの場所が食い違っているなら、python -m pip install の形で、実行に使うpythonに紐づいたpipで入れ直します。
Terminal window
python3 -m pip install requests
  1. 根本的には仮想環境を使い、プロジェクトごとにPythonとパッケージを分離します。
Terminal window
python3 -m venv .venv
source .venv/bin/activate # Windowsは .venv\Scripts\activate
python -m pip install requests
  1. IDE(VSCode等)を使っている場合は、インタプリタの選択が仮想環境を指しているかも確認します。ターミナルでは動くのにIDEでは失敗する、という食い違いはここが原因のことが多いです。

まとめ

・原因はpipとpythonが別々のPython環境を指していること ・which python3 / which pip3 で実体を確認する ・python -m pip install で実行系に紐づけて入れる ・恒久対応は仮想環境(venv)でプロジェクトごとに分離する