ホームページ >バックエンド開発 >Python チュートリアル >Python が「ValueError: トップレベル パッケージを超えた相対インポートを試行しました」エラーをスローするのはなぜですか?
相対インポートでの最上位パッケージを超えるエラー
最上位パッケージを超える相対インポートを試行すると、Python は「ValueError: 試行されました」をスローします最上位パッケージを超えた相対インポート」エラー。原因を理解するために、提供されたパッケージ構造を分析してみましょう。
package/ __init__.py A/ __init__.py foo.py test_A/ __init__.py test.py
test.py では、..A import foo の行が A サブパッケージからインポートしようとしていますが、このサブパッケージには内部から直接アクセスできません。 test_A サブパッケージ。 Python では、現在のパッケージのスコープ内に相対インポートを維持する必要があります。
パッケージ フォルダー内から python -m test_A.test を実行すると、Python は test_A.test を現在のパッケージ内のモジュールとして解釈します。ただし、 -m フラグがモジュールを直接呼び出すため、パッケージはパッケージとは見なされなくなります。これにより、相対的なインポートが最上位のパッケージ (パッケージ) を超えて試行されるため、エラーが発生します。
対照的に、親フォルダーから python -m package.test_A.test を実行すると、Python はパッケージを認識します。パッケージとして提供され、そのスコープ内での相対インポートが可能になります。 A サブパッケージはパッケージ package 内でアクセスできるため、これは ..A import foo から正常に解決されます。
このエラーは、相対インポートが現在のパッケージのスコープ内に残るようにすることの重要性を強調しています。 -m フラグを使用してモジュールを直接呼び出す場合、Python は現在の作業ディレクトリをパッケージとして考慮しないため、発生したようなエラーが発生する可能性があります。
以上がPython が「ValueError: トップレベル パッケージを超えた相対インポートを試行しました」エラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。