検索

ホームページ  >  に質問  >  本文

「__init__.py があるにもかかわらず、非パッケージから相対インポートが試行されました」エラーを修正する方法

<p>次のディレクトリ構造を使用して、PEP 328 に従おうとしています: </p> <pre class="brush:php;toolbar:false;">pkg/ __init__.py コンポーネント/ コア.py __init__.py テスト/ コアテスト.py __init__.py</pre> <p><code>core_test.py</code> には次の import ステートメントがあります</p> <pre class="brush:php;toolbar:false;">from ..components.core import GameLoopEvents</pre> <p>しかし、実行すると次のエラーが表示されます: </p> <pre class="brush:php;toolbar:false;">tests$ python core_test.py トレースバック (最後の呼び出し): ファイル「core_test.py」、<module> の 3 行目 ..components.core から GameLoopEvents をインポート ValueError: 非パッケージ</pre>で相対インポートを試行しました。 <p>検索で「相対パスが __init__.py でも機能しない」と「相対パスからモジュールをインポートする」を見つけましたが、役に立ちませんでした。 </p> <p>ここで何か足りないものはありますか? </p>
P粉566048790P粉566048790450日前479

全員に返信(2)返信します

  • P粉827121558

    P粉8271215582023-08-22 14:11:27

    イグナシオ・バスケス=エイブラムスの答えを詳しく説明するには:

    Python のインポート メカニズムは、現在のファイルを基準とした

    __name__ です。ファイルを直接実行した場合、ファイル名は通常の名前ではなく、"__main__" が名前として使用されます。したがって、相対インポートは機能しません。

    Ignacio が提案したように、

    -m オプションを使用して実行できます。パッケージの一部をスクリプトとして実行する場合は、 __package__ 属性を使用して、パッケージ階層内でファイルにどのような名前を付けるかを指定することもできます。

    詳細については、

    http://www.python.org/dev/peps/pep-0366/を参照してください。

    返事
    0
  • P粉604507867

    P粉6045078672023-08-22 09:39:36

    ###はい。パッケージとしては使用していません。

    リーリー

    返事
    0
  • キャンセル返事