Python での相対インポート
Python では、パッケージ内からモジュールをインポートするのは難しい作業になる場合があります。次のディレクトリ構造を考えてみましょう。
app/ __init__.py sub1/ __init__.py mod1.py sub2/ __init__.py mod2.py
mod1.py で作業していて、mod2.py から何かをインポートする必要があるとします。
from ..sub2 import mod2
を試みることもできますが、これにより「非パッケージでの相対インポートが試みられました」というエラーが発生します。解決策は、ファイル システムの場所に関係なく、Python が __main__ として実行されるモジュール (例: python mod1.py) をトップレベル モジュールとして解釈するという事実にあります。
相対インポートを有効にするには、インポートするモジュールは次のことを行う必要があります。 __main__ として実行されます。これは、メイン モジュールとしてパッケージを使用してインタープリタを実行することで実現できます:
python -m app.sub1.mod1
または、__package__ 属性を使用して親パッケージを手動で指定できます:
import sys sys.path.insert(0, '..') from sub2.mod2 import MyClass
Thisメソッドはシステム パスを操作しますが、モジュールを __main__ として実行する必要はありません。
ただし、相対インポートの場合はサブパッケージ内で動作する場合は、__init__.py ファイルが各ディレクトリに存在することを確認することが重要です。これらのファイルはパッケージ マーカーとして機能し、__package__ 属性が含まれるパッケージを参照できるようにします。
以上がPython パッケージで相対インポートを正常に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。