「__init__.py があるにもかかわらず、非パッケージから相対インポートが試行されました」エラーを修正する方法
P粉566048790
P粉566048790 2023-08-21 15:15:11
0
2
508
<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粉566048790
P粉566048790

全員に返信(2)
P粉827121558

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

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

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

Ignacio が提案したように、

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

詳細については、

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

いいねを押す +0
P粉604507867

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

リーリー

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート