我试图使用以下目录结构跟踪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 <module>
from ..components.core import GameLoopEvents
ValueError: Attempted relative import in non-package
我四处搜索,找到了“relative path not working even with __init__.py”和“Import a module from a relative path”,但他们没有帮助。
我有什么遗漏吗?
如果将当前目录附加到
sys.path
,则可以直接使用import components.core
:详细说明Ignacio Vazquez-Abrams's答案:
Python导入机制相对于当前文件的
__name__
工作。当您直接执行一个文件时,它没有通常的名称,而是有"__main__"
作为它的名称。所以相对进口不起作用。正如Igancio建议的那样,可以使用
-m
选项执行它。如果您的包中有一部分要作为脚本运行,那么还可以使用__package__
属性来告诉该文件在包层次结构中应该有什么名称。有关详细信息,请参见http://www.python.org/dev/peps/pep-0366/。
是的。你不能把它当作一个包裹。
相关问题 更多 >
编程相关推荐