Python での相対インポートの実装
Python で階層ディレクトリ構造を操作する場合、他のサブディレクトリからモジュールをインポートする必要があります。 「..」を使用した従来の相対インポートでは、特定のシナリオでエラーが発生する可能性があります。特に、モジュールを引数としてインタープリタに渡してメイン モジュールとして実行する場合、相対インポートは失敗します。
PEP 328 によれば、相対インポートはモジュールの name 属性に依存します。パッケージ階層内の位置を決定します。ただし、モジュールをメインモジュールとして実行する場合のように、name が '__main__' に設定されている場合、ファイルに関係なく、モジュールがトップレベルのモジュールであるかのように相対インポートが解決されます。
この問題に対処するために、Python 2.6 ではメイン モジュールを基準にしてモジュールを参照する機能が導入されました。これについては、PEP 366 で説明されています。この機能を利用すると、「非パッケージで相対インポートが試行されました」エラーが発生することなく相対インポートを実行できます。
例:
次のようなディレクトリ構造では、
app/ __init__.py sub1/ __init__.py mod1.py sub2/ __init__.py mod2.py
mod1 から mod2 をインポートするには、次を使用できます。構文:
from importlib.machinery import SourceFileLoader mod2 = SourceFileLoader('mod2', 'sub2/mod2.py').load_module()
または、モジュールをメイン モジュールとして実行していない場合は、通常の相対インポート構文が機能します:
from ..sub2 import mod2
以上がPython で相対インポートを確実に実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。