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へ渡しても見つからないことがあります。
- 公式パッケージ資料でimport方法を確認する
- requirements.txtへ正しい配布名を記載する
- 自分のファイル名が標準モジュールと衝突していないか見る
requirements.txtを整える
本番起動に必要なパッケージとバージョンを記録します。ローカルで動いているだけの環境を丸ごと複製するのではなく、必要な依存を明示します。
- python -m pip freezeで現状を参考にする
- 不要な開発用パッケージを除外する
- クリーンな環境でrequirementsを検証する
ZIPホスティングでの注意
仮想環境やsite-packagesをZIPへ含めると、サイズが大きくなりOS差の問題も起きます。依存定義をアップロードして、ホスティング側の対応Pythonで導入します。
- .venvと__pycache__をZIPから外す
- 起動対象ファイル名を確認する
- 依存インストールログの最初の失敗を読む