EasyBot

EASYBOT GUIDE

Python ModuleNotFoundErrorの原因とpipでの直し方

PythonのModuleNotFoundErrorを、pipの環境違い、requirements.txt、仮想環境、パッケージ名の観点から解決します。

ModuleNotFoundErrorは、Pythonがimport先のモジュールを見つけられない時に発生します。pipでインストールした環境と、実際にBotを起動するPython環境が違う場合によく起きます。

pipとPythonをそろえる

OSに複数のPythonがあると、pipが別の環境へパッケージを入れることがあります。python -m pipの形式を使うと、指定したPythonへ導入しやすくなります。

  • python --versionで実行バージョンを確認する
  • python -m pip show パッケージ名で導入先を調べる
  • 仮想環境を有効にしてから依存を導入する

import名と配布名

pipで使う配布名と、コードのimport名が異なるパッケージがあります。エラーに出たimport名をそのままpip installへ渡しても見つからないことがあります。

  1. 公式パッケージ資料でimport方法を確認する
  2. requirements.txtへ正しい配布名を記載する
  3. 自分のファイル名が標準モジュールと衝突していないか見る

requirements.txtを整える

本番起動に必要なパッケージとバージョンを記録します。ローカルで動いているだけの環境を丸ごと複製するのではなく、必要な依存を明示します。

  • python -m pip freezeで現状を参考にする
  • 不要な開発用パッケージを除外する
  • クリーンな環境でrequirementsを検証する

ZIPホスティングでの注意

仮想環境やsite-packagesをZIPへ含めると、サイズが大きくなりOS差の問題も起きます。依存定義をアップロードして、ホスティング側の対応Pythonで導入します。

  • .venvと__pycache__をZIPから外す
  • 起動対象ファイル名を確認する
  • 依存インストールログの最初の失敗を読む