非パッケージ コンテキストでの相対インポートの処理
Python の外部のディレクトリ構造内の相対パスを使用してモジュールをインポートしようとする場合次のようなパッケージ:
pkg/ __init__.py components/ core.py __init__.py tests/ core_test.py __init__.py
エラー:
ValueError: Attempted relative import in non-package
Python インポート メカニズムについて
Python インポート メカニズムは、現在のファイルの name 属性に基づいて、インポートする適切なモジュール。ファイルを直接実行すると、「__main__」の名前が割り当てられるため、相対インポートが不可能になります。
考えられる解決策
これを解決するにはこの問題が発生した場合は、次のいずれかの方法を使用できます。
1. -m オプションの使用
-m オプションを使用してファイルを実行すると、ファイルがモジュールとして sys.path に追加されます:
python -m pkg.tests.core_test
2 。 package 属性の指定
スクリプトとして実行するように特別に設計されたパッケージの一部がある場合は、package 属性を割り当ててその属性を指定できます。パッケージ内の希望の名前
import sys if __name__ == "__main__": sys.__package__ = "pkg.tests" from ..components.core import GameLoopEvents
参照:
詳細については、PEP 366 を参照してください: https://www.python.org/dev/peps/pep -0366/
以上がPython パッケージ外で相対インポートを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。