ホームページ >バックエンド開発 >Python チュートリアル >Python で相対インポートを確実に実装するにはどうすればよいですか?

Python で相対インポートを確実に実装するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-25 00:16:10395ブラウズ

How to Reliably Implement Relative Imports in Python?

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 サイトの他の関連記事を参照してください。

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