如何修复“Attempted relative import in non-package”错误,即使有__init__.py文件。
如何修复“Attempted relative import in non-package”错误,即使有__init__.py文件。
我正在尝试遵循PEP 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 from ..components.core import GameLoopEvents ValueError: Attempted relative import in non-package
搜索时,我发现了\"即使有__init__.py,相对路径仍不起作用\"和\"从相对路径导入模块\",但它们没有帮助。
我这里缺少什么吗?
admin 更改状态以发布 2023年5月21日
对伊格纳西奥·瓦斯克斯-阿布拉姆斯的回答进行详细说明:
Python导入机制相对于当前文件的__name__
工作。当您直接执行一个文件时,它不具有其通常的名称,而是以"__main__"
作为其名称。因此,相对导入无法工作。
如伊格纳西奥所建议的,您可以使用-m
选项来执行它。如果您的软件包的一部分是要作为脚本运行的,您也可以使用__package__
属性来告诉该文件它在包层次结构中应该具有的名称。
有关详细信息,请参阅http://www.python.org/dev/peps/pep-0366/。