ホームページ >バックエンド開発 >Python チュートリアル >Python で「ValueError: トップレベル パッケージを超えた相対インポートを試行しました」エラーが発生するのはなぜですか?

Python で「ValueError: トップレベル パッケージを超えた相対インポートを試行しました」エラーが発生するのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-26 04:48:14552ブラウズ

Why Am I Getting a

相対インポート エラー: 最上位パッケージを超えています

Python 3 では、相対インポートは同じモジュール内のモジュールを参照する便利な方法を提供しますディレクトリまたはパッケージ。ただし、「ValueError: 上位レベルのパッケージを超えて相対インポートを試行しました」エラーが発生すると、困惑する可能性があります。

次のパッケージ構造を考慮してください。

package/
    __init__.py
    A/
        __init__.py
        foo.py
    test_A/
        __init__.py
        test.py

モジュールからモジュールをインポートしようとする場合サブパッケージ (例: test.py の ..A import foo) では、次の条件に該当する場合、前述のエラーが発生する可能性があります。 met:

  1. パッケージ ディレクトリ (package/) 内からモジュール (例: python -m test_A.test) を実行しており、
  2. 次のコマンドを使用していません。パッケージをトップレベルのパッケージとして指定します (例: python -m) package.test_A.test).

このエラーの理由は、Python のインポート メカニズムの基本的な側面に起因します。パッケージがロードされると、そのパッケージは「トップレベル パッケージ」とみなされ、相対インポートではそのパッケージまたはそのサブパッケージ内のモジュールのみを参照できます。ただし、モジュールを直接実行する場合、Python はパッケージの親ディレクトリをパッケージとして自動的に認識しません。

そのため、上記のシナリオでは、パッケージ ディレクトリ内から python -m test_A.test を実行すると、親ディレクトリ ('package/') はパッケージとして見なされず、..A import foo からの相対インポートは実質的に最上位パッケージを超えようとします。

Toこのエラーを解決するには、モジュールを実行するときにパッケージ パス全体を必ず指定してください:

python -m package.test_A.test

以上がPython で「ValueError: トップレベル パッケージを超えた相対インポートを試行しました」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。