ホームページ > バックエンド開発 > Python チュートリアル > 「python -m」を使用すると、Python がパッケージ ディレクトリからの相対インポートに失敗するのはなぜですか?

「python -m」を使用すると、Python がパッケージ ディレクトリからの相対インポートに失敗するのはなぜですか?

Linda Hamilton
リリース: 2024-11-24 02:52:08
オリジナル
980 人が閲覧しました

Why Does Python Fail Relative Imports from a Package Directory When Using `python -m`?

相対インポートにおけるトップレベルパッケージを超えたエラー

パッケージのサブモジュールからの相対インポートを実行しようとすると、複雑なエラーが発生しますパッケージディレクトリ内。具体的には、「ValueError: 上位レベルのパッケージを超えて相対インポートを試行しました」というエラーが発生します。

このエラーは、パッケージのロード元の場所を記録しないという Python の特有の動作に起因します。したがって、python -m package_name.module_name を使用してモジュールを実行する場合、現在の作業ディレクトリはパッケージとみなされません。

そのため、モジュールにアクセスすることを目的とした from ..A import foo のような相対インポート試行が行われます。兄弟ディレクトリにあると、エラー メッセージが表示されます。これは、Python には兄弟ディレクトリへの必要な参照が欠けているためです。

対照的に、 python -m package_name.package_submodule.module_name を使用してモジュールを実行すると、 from ..A import foo import ステートメントを正常に解決できます。この場合、Python は親ディレクトリの情報を保持するため、兄弟ディレクトリへのアクセスが可能になります。

実際の有用性にもかかわらず、Python が現在の作業ディレクトリをパッケージとして考慮しない理由は依然として不明です。この制限により、パッケージ ディレクトリ内から相対インポートを実行するときに混乱や予期しないエラーが発生する可能性があります。

以上が「python -m」を使用すると、Python がパッケージ ディレクトリからの相対インポートに失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート