python - 如何使用__init__.py修复“在非包中尝试相对导入”
我正在尝试遵循PEP 328,具有以下目录结构:
pkg/
__init__.py
components/
core.py
__init__.py
tests/
core_test.py
__init__.py
在core_test.py我有以下import语句
from ..components.core import GameLoopEvents
但是,当我运行时,我收到以下错误:
tests$ python core_test.py
Traceback (most recent call last):
File "core_test.py", line 3, in
from ..components.core import GameLoopEvents
ValueError: Attempted relative import in non-package
在我周围搜索时发现“相对路径甚至无法使用__init__.py”和“从相对路径导入模块”,但它们没有帮助。
这里有什么我想念的吗?
12个解决方案
561 votes
详细阐述Ignacio Vazquez-Abrams的答案:
Python导入机制相对于当前文件的-m工作。 直接执行文件时,它没有通常的名称,而是以__package__作为其名称。 所以相对进口不起作用。
正如Igancio建议的那样,您可以使用-m选项执行它。 如果您的程序包的一部分要作为脚本运行&