「__init__.py があるにもかかわらず、非パッケージから相対インポートが試行されました」エラーを修正する方法
P粉566048790
2023-08-21 15:15:11
<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>
イグナシオ・バスケス=エイブラムスの答えを詳しく説明するには:
Python のインポート メカニズムは、現在のファイルを基準とした__name__
Ignacio が提案したように、です。ファイルを直接実行した場合、ファイル名は通常の名前ではなく、
"__main__"が名前として使用されます。したがって、相対インポートは機能しません。
-m
詳細については、オプションを使用して実行できます。パッケージの一部をスクリプトとして実行する場合は、
__package__属性を使用して、パッケージ階層内でファイルにどのような名前を付けるかを指定することもできます。
http://www.python.org/dev/peps/pep-0366/を参照してください。
###はい。パッケージとしては使用していません。
リーリー