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

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

Linda Hamilton
リリース: 2024-12-12 22:24:17
オリジナル
891 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート