相対インポート: 詳細
Python プログラミングの世界では、相対インポートは混乱の一般的な原因です。この記事では、相対インポートの複雑さを掘り下げ、どこにでもある「非パッケージで相対インポートが試行されました」というエラー メッセージに対処します。
スクリプトとモジュールの区別
理解スクリプトとモジュールの根本的な違いは重要です。 Python ファイルを直接実行すると、そのファイルはスクリプトになり、__main__ という名前が割り当てられます。一方、ファイルをインポートすると、パッケージ階層内での位置を含む名前が付けられたモジュールになります。
モジュールの名前
割り当てられた名前モジュールへのインポートは、モジュールがパッケージからインポートされたか、そのディレクトリから直接インポートされたかによって異なります。モジュールがパッケージからインポートされる場合、その名前は、パッケージとそれに含まれるサブパッケージのドット区切りのパスに従います (例: package.subpackage1.moduleA)。ただし、モジュールがそのディレクトリから直接インポートされる場合、その名前はモジュール名のみになります (例: moduleA)。
相対インポートとパッケージ
相対インポートモジュールの名前に基づいて、パッケージ階層内の位置を決定します。モジュール名にドットが含まれていない場合、そのモジュールはパッケージの一部とみなされません。これは、モジュールの現在のディレクトリの外側を移動しようとする相対インポートが「非パッケージの相対インポート」エラーで失敗することを意味します。
エラーの解決
するにはこのエラーを解決するには、次の解決策を検討してください:
パッケージ ディレクトリは Python に含める必要があることに注意してください。これらのソリューションが機能するためのモジュール検索パス (sys.path)。さらに、Python 2.6 以降、モジュールには、その実効名に影響を与える name 属性と package 属性の両方が含まれます。
以上がPython が「非パッケージでの相対インポート」エラーをスローするのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。