pip installしたのにModuleNotFoundErrorが出る原因と直し方
Pythonでインストール済みのはずのパッケージが読み込めないときに、実行先・pip・VS Codeの環境を確認してそろえる手順を解説します。
「インストールは成功したのに、まだ同じエラー?」。pip installのあとにModuleNotFoundErrorが出るなら、最初に確かめたいのは、追加先と実行先のPythonが同じかどうかです。
何度も入れ直す前に、動かしているPythonの場所を表示してみましょう。この記事ではPython 3とVS Codeを例に、確認する順番を説明します。
ModuleNotFoundErrorは何を知らせている?
ModuleNotFoundError: No module named 'requests'
これは、importで読み込もうとしたrequestsを、そのPythonが見つけられなかったという意味です。モジュールは、読み込んで利用するPythonのコードのまとまりです。Python公式の例外の説明
一方、pipは外部のパッケージを追加する道具です。パッケージは、ここではインストールして使う機能のまとまりと考えてください。
同じPCでも、Python本体を複数入れたり、プロジェクト専用の仮想環境を作ったりできます。通常、仮想環境ごとに追加済みのパッケージは分かれます。そのため「PCのどこかへ入れた」と「今のPythonから使える」は同じではありません。仮想環境の仕組み
1. エラーが出るファイルからPythonの場所を調べる
エラーが出るimport行の前へ、次の2行を加えます。
import sys
print(sys.executable)
import requests
print("requestsを読み込めました")
いつもエラーが出る実行ボタンや操作で動かしてください。sys.executableは、現在実行しているPython本体の場所です。Python公式のsys.executable
例えば、次のような表示になります。これは例なので、自分のPCの場所と違って構いません。
C:\study\app\.venv\Scripts\python.exe
次に、コマンドを入力する画面であるターミナルで確認します。
python -c "import sys; print(sys.executable)"
-cは、続く短いPythonコードを実行する指定です。ファイル側とターミナル側で、表示された場所を比べてください。両方の名前がpython.exeでも、フォルダが違えば別の環境です。
pythonコマンドが見つからない場合は、次の節の「場所を直接指定する方法」を使えます。先ほどファイルから表示された実行パスが手掛かりです。
2. 実行先と同じPythonでpipを使う
ターミナルのPythonが目的のものと一致していたら、追加済みかを確認します。
python -m pip --version
python -m pip show requests
-m pipは、そのPythonでpipを実行する指定です。showで情報が表示されず、必要なパッケージがないと分かったら追加します。pip公式の実行方法
python -m pip install requests
python -c "import requests; print('読み込み成功')"
最後の行で「読み込み成功」と表示されたら、元のファイルも動かしてください。ここだけ成功して元のファイルが失敗するなら、実行先がまだそろっていない可能性があります。
場所を直接指定する方法
WindowsのPowerShellでは、表示されたPythonの場所を指定して実行できます。次のパスを、自分の結果に置き換えます。
& "C:\study\app\.venv\Scripts\python.exe" -m pip show requests
& "C:\study\app\.venv\Scripts\python.exe" -m pip install requests
& "C:\study\app\.venv\Scripts\python.exe" -c "import requests; print('読み込み成功')"
先頭の&は、引用符で囲んだ場所のプログラムを実行するための記号です。仮想環境を使うときも、そのPythonを直接呼び出せます。環境の有効化操作がうまくいかない場合にも、追加先を明確にできる方法です。
3. VS Codeの実行先をそろえる
VS CodeのPython拡張機能を使っている場合は、Pythonファイルを開いて次を確認します。
Ctrl + Shift + Pでコマンドパレットを開く。Python: Select Interpreterを選ぶ。- プロジェクトで使うPythonを選ぶ。
- 新しいターミナルを開く。
- ファイルとターミナルの両方で
sys.executableを表示し直す。
Interpreterは、Pythonコードを実行する本体のことです。選択表示だけで決めず、実際に表示された場所が一致するところまで確認すると安心です。VS Code公式の環境選択
拡張機能の別の実行ボタンやデバッグ設定を使っている場合は、そこで実行先を別に指定していることもあります。確認コードを失敗するファイルへ入れるのは、その違いを見つけるためです。
環境が同じでも直らないとき
まず、最後のエラー行に書かれた名前を見ます。requestsを読み込む途中で別のモジュールが見つからなければ、末尾にはその別名が出ることがあります。
次に、つづりと公式のインストール手順を確認してください。インストール名とimport名は必ずしも同じではありません。例えばPillowは追加時にPillow、読み込み時にPILを使います。配布名とimport名の違い
自分で作ったhelper.pyが見つからない場合は、外部パッケージの追加とは別の問題です。ファイル名や配置、実行方法を確認します。エラーに出た名前をそのまま推測でインストールするのではなく、使おうとしている機能の公式手順と照らし合わせましょう。
練習:どちらのPythonへ入れる?
実行ファイルの表示はAですが、Bへrequestsを入れました。Aを使い続ける場合の直し方を考えてください。
A: C:\study\app\.venv\Scripts\python.exe
B: C:\Python\python.exe
模範解答
AのPythonでpipを実行し、そのあとAから読み込めるか確認します。
& "C:\study\app\.venv\Scripts\python.exe" -m pip install requests
& "C:\study\app\.venv\Scripts\python.exe" -c "import requests; print('読み込み成功')"
解説
Bへ何度追加しても、Aで使えるようになるとは限りません。必要なのは「何回入れたか」ではなく、「動かすPythonへ入れたか」の確認です。読み込みに成功したら、調査用のprint(sys.executable)は外して構いません。
Python自体の実行方法は最初のプログラム、ほかのエラーの見分け方はエラー表示を読む手順で確認できます。