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

Python パッケージ外で相対インポートを処理するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-12 22:24:17892ブラウズ

How to Handle Relative Imports Outside of Python Packages?

非パッケージ コンテキストでの相対インポートの処理

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

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