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上にない

診断手順

  1. 最後の行で具体的なモジュール名を確認する
  2. requirements.txtまたはpyproject.tomlにモジュールがあるか確認する
  3. pip listまたはpip show <module>でインストール済みか確認する
  4. 正しいPythonインタープリターと仮想環境を使用しているか確認する
  5. 循環インポートの場合、tracebackのインポートチェーンを確認してサイクルを特定する

ユースケース

ImportErrorは新しいプロジェクトのセットアップ、新しい環境へのデプロイメント、依存関係のアップグレード時に開発者が最初に遭遇するエラーの1つです。失敗したCIビルドやクラッシュした本番コンテナをデバッグするDevOpsエンジニアは、問題がパッケージの欠落、バージョンの競合、または環境の設定ミスかをすばやく特定する必要があります。

試してみる — Stack Trace Parser & Formatter

フルツールを開く