相対インポート エラー: 最上位パッケージを超えています
Python 3 では、相対インポートは同じモジュール内のモジュールを参照する便利な方法を提供しますディレクトリまたはパッケージ。ただし、「ValueError: 上位レベルのパッケージを超えて相対インポートを試行しました」エラーが発生すると、困惑する可能性があります。
次のパッケージ構造を考慮してください。
package/ __init__.py A/ __init__.py foo.py test_A/ __init__.py test.py
モジュールからモジュールをインポートしようとする場合サブパッケージ (例: test.py の ..A import foo) では、次の条件に該当する場合、前述のエラーが発生する可能性があります。 met:
このエラーの理由は、Python のインポート メカニズムの基本的な側面に起因します。パッケージがロードされると、そのパッケージは「トップレベル パッケージ」とみなされ、相対インポートではそのパッケージまたはそのサブパッケージ内のモジュールのみを参照できます。ただし、モジュールを直接実行する場合、Python はパッケージの親ディレクトリをパッケージとして自動的に認識しません。
そのため、上記のシナリオでは、パッケージ ディレクトリ内から python -m test_A.test を実行すると、親ディレクトリ ('package/') はパッケージとして見なされず、..A import foo からの相対インポートは実質的に最上位パッケージを超えようとします。
Toこのエラーを解決するには、モジュールを実行するときにパッケージ パス全体を必ず指定してください:
python -m package.test_A.test
以上がPython で「ValueError: トップレベル パッケージを超えた相対インポートを試行しました」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。