__init__.py でも「非パッケージで相対インポートを試行しました」を修正する方法 質問する

__init__.py でも「非パッケージで相対インポートを試行しました」を修正する方法 質問する

私は従おうとしているペップ328ディレクトリ構造は次のようになります。

pkg/
  __init__.py
  components/
    core.py
    __init__.py
  tests/
    core_test.py
    __init__.py

私はcore_test.py次のインポートステートメントを持っています

from ..components.core import GameLoopEvents

しかし、実行すると次のエラーが発生します。

tests$ python core_test.py 
Traceback (most recent call last):
  File "core_test.py", line 3, in <module>
    from ..components.core import GameLoopEvents
ValueError: Attempted relative import in non-package

探してみると「__init__.py でも相対パスが機能しない" そして "相対パスからモジュールをインポートする「でも彼らは助けてくれなかった。」

何か見落としている点はありますか?

ベストアンサー1

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

Python のインポート メカニズムは、__name__現在のファイルの を基準にして動作します。ファイルを直接実行すると、通常の名前ではなく、"__main__"代わりに が名前として使用されます。したがって、相対インポートは動作しません。

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

見るhttp://www.python.org/dev/peps/pep-0366/詳細については。

おすすめ記事