Python での相対インポート: 詳細な説明
複数のサブパッケージを含む構造化ディレクトリを操作する場合、他のサブパッケージからモジュールをインポートすると、共通の要件。ただし、from ..sub2 import mod2 などの相対インポートを使用する標準的なアプローチは、特定のシナリオでは失敗する可能性があります。
これは、提供されたディレクトリ構造内で mod1 から mod2 をインポートしようとした開発者の場合に当てはまります。質問の中で。 「非パッケージで相対インポートを試行しました」というエラー メッセージは、相対インポートに問題があることを示しています。
問題の根本は、モジュールが __main__ として引数として渡されて実行されていたという事実にあります。通訳者。 PEP 328 によると、相対インポートではモジュールの __name__ 属性を使用して、パッケージ階層内の位置を決定します。モジュールの名前が __main__ に設定されている場合、相対インポートは、ファイル システム内の実際の場所に関係なく、モジュールがトップレベル モジュールであるかのように解決されます。
この動作により、インポートしようとするときに混乱が生じる可能性があります。他のサブパッケージのモジュール。この問題を解決するには、コードをスクリプトに配置し、import sub2.mod2 などの絶対インポートを使用して関連するサブパッケージを明示的にインポートすることをお勧めします。
ただし、Python 2.6 以降では、モジュールを参照する機能が追加されています。メインモジュールに関連するモジュールが導入されました。 PEP 366 にはこの変更について説明されています。相対インポートを効果的に使用するには、__main__ を使用する代わりにメイン モジュールを参照することが不可欠です。これは、次のようなさまざまな方法で実現できます。
これらの手法を採用することで、開発者は相対インポートを効果的に利用して、Python プロジェクトを整理し、構造化された方法でモジュール間の依存関係を管理できます。
以上がモジュールが `__main__` として実行されると、Python で相対インポートが失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。