私は従おうとしているペップ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/詳細については。