Python ImportErrorスタックトレースの解析
Python ImportErrorとModuleNotFoundError tracebackを解析。依存関係と環境の問題を診断するためのモジュールパス、パッケージ名、解決チェーンを抽出します。
Python
詳細な説明
Python ImportError Tracebackの理解
ImportError(およびPython 3.6+のサブクラスModuleNotFoundError)はPythonがモジュールを見つけたりロードできない場合に発生します。デプロイメント、環境セットアップ、依存関係管理中に一般的です。
ImportError Tracebackの例
Traceback (most recent call last):
File "/app/main.py", line 3, in <module>
from app.services.mailer import send_email
File "/app/services/mailer.py", line 1, in <module>
import boto3
ModuleNotFoundError: No module named 'boto3'
一般的な原因
- 依存関係の欠落 --- 現在の環境にパッケージがインストールされていない
- 仮想環境の不一致 --- パッケージがインストールされているvenv外でコードを実行
- 循環インポート --- 2つのモジュールが互いにインポートし、一方が部分的にしかロードされない
- 名前の衝突 --- ローカルファイルが標準ライブラリモジュールと同じ名前を持つ
- Pythonバージョンの不一致 --- 特定のPythonバージョンでのみ利用可能なモジュール
- パスの問題 --- モジュールは存在するが
sys.path上にない
診断手順
- 最後の行で具体的なモジュール名を確認する
requirements.txtまたはpyproject.tomlにモジュールがあるか確認するpip listまたはpip show <module>でインストール済みか確認する- 正しいPythonインタープリターと仮想環境を使用しているか確認する
- 循環インポートの場合、tracebackのインポートチェーンを確認してサイクルを特定する
ユースケース
ImportErrorは新しいプロジェクトのセットアップ、新しい環境へのデプロイメント、依存関係のアップグレード時に開発者が最初に遭遇するエラーの1つです。失敗したCIビルドやクラッシュした本番コンテナをデバッグするDevOpsエンジニアは、問題がパッケージの欠落、バージョンの競合、または環境の設定ミスかをすばやく特定する必要があります。