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

Python パッケージで相対インポートを正常に実行するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-16 18:00:33854ブラウズ

How Can I Successfully Perform Relative Imports in Python Packages?

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

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