ホームページ >バックエンド開発 >Python チュートリアル >Python で「非パッケージで相対インポートを試みました」エラーを解決するにはどうすればよいですか?

Python で「非パッケージで相対インポートを試みました」エラーを解決するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-24 02:21:15204ブラウズ

How Can I Solve

Python の相対インポート: 総合ガイド

問題: サブパッケージ間でのモジュールのインポート

次のディレクトリ構造を想像してください:

app/
   __init__.py
   sub1/
      __init__.py
      mod1.py
   sub2/
      __init__.py
      mod2.py

mod1 モジュール内で mod2 から何かをインポートするには、次のコードがあります。試行されました:

from ..sub2 import mod2

ただし、これによりエラーが発生します:「非パッケージで相対インポートを試行しました。」

解決策: 宣言されたパッケージ

エラーが発生する理由は次のとおりです。 mod1.py 引数をインタープリタに渡してモジュールを __main__ として実行すると、Python はそれをトップレベルのモジュールとして扱い、パッケージを無視します。

この問題を解決するには、sub1 ディレクトリと sub2 ディレクトリの両方で __init__.py ファイルを適切に初期化する必要があります。これは、これらのディレクトリが実際にパッケージであることを示しており、相対インポートを使用してディレクトリ間でインポートできることを示しています。

__init__.py ファイルを配置すると、次のコードは mod1 内に mod2 を正常にインポートします:

from ..sub2 import mod2

相対インポートと PEP 366

PEP 366 は、参照のメカニズムを提案していますメインモジュールを基準としたモジュール。 Python 2.6 以降のバージョンでは、次の構文を使用して、メイン モジュールを基準にしてモジュールをインポートできます:

from . import mod2
from .. import sub2

この動作は、サブパッケージのインポートに期待される機能と一致しており、一貫性のある直感的なインポート メカニズムを保証します。

以上がPython で「非パッケージで相対インポートを試みました」エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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