できない.dev

Python import できない(ModuleNotFoundError)

ModuleNotFoundError は「使っている Python と pip install 先が別」「PYTHONPATH の通っていないディレクトリ」「相対 import の記法ミス」のいずれかが原因。

公開: 更新:

要約

ModuleNotFoundError: No module named 'X' の解決は、まず python -m pip install X を実行する Python 実行ファイルが、 スクリプトを動かす Python と 同一かを確認 することから始める。

よくある原因

  1. venv 未活性化 で system Python に入っている
  2. pip install別の Python(pyenv/conda/system)に対して走った
  3. パッケージ名と import 名が異なる(例: opencv-pythoncv2
  4. 相対 import を含むファイルを python script.py で直接実行している

解決策

1. 実行 Python と pip の整合確認

which python
which pip
python -c "import sys; print(sys.executable)"

3つが同じ場所を指していなければ、まず venv を activate するか python -m pip install <pkg> で確実に紐付ける。

2. venv を作って隔離

python -m venv .venv
source .venv/bin/activate    # Windows: .venv\Scripts\activate
pip install <pkg>

3. 相対 import の解決

# パッケージ内のファイルを直接実行せず、モジュールとして起動
python -m mypackage.script

4. import 名を調べる

pip install 名と import 名は別物のことがある。
PyPI のページ/README で 正式な import 名 を確認する。

実行例

実際に上記の手順を python:3.12(Debian GNU/Linux 13)環境で動かすと、import requestsModuleNotFoundError で終了コード 1 となった後、python -m pip install で同一インタープリター(/usr/local/bin/python)へインストールしたことで再実行が正常終了し、requests 2.31.0 がロードされることを確認できる。

$ python -c "import sys; print(sys.version.splitlines()[0]); print('executable:', sys.executable)"
3.12.13 (main, Jul 14 2026, 04:46:18) [GCC 14.2.0]
executable: /usr/local/bin/python
$ python app.py
Traceback (most recent call last):
  File "/tmp/tmp.M9CRszfMS3/app.py", line 1, in <module>
    import requests
ModuleNotFoundError: No module named 'requests'
終了コード: 1
$ python -m pip install --quiet requests==2.31.0
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing and want to suppress this warning.
 
[notice] A new release of pip is available: 25.0.1 -> 26.2
[notice] To update, run: pip install --upgrade pip
pip 終了コード: 0
$ python app.py
requests version: 2.31.0
終了コード: 0
$ python -c "import requests, os; print('installed at:', os.path.dirname(requests.__file__))"
installed at: /usr/local/lib/python3.12/site-packages/requests

— 2026-08-02 時点の出力

この記事は役立ちましたか?