如何修复“Attempted relative import in non-package”错误,即使有__init__.py文件。

16 浏览
0 Comments

如何修复“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日
0
0 Comments

是的。你没有将其用作一个包。

python -m pkg.tests.core_test

0
0 Comments

伊格纳西奥·瓦斯克斯-阿布拉姆斯的回答进行详细说明:

Python导入机制相对于当前文件的__name__工作。当您直接执行一个文件时,它不具有其通常的名称,而是以"__main__"作为其名称。因此,相对导入无法工作。

如伊格纳西奥所建议的,您可以使用-m选项来执行它。如果您的软件包的一部分是要作为脚本运行的,您也可以使用__package__属性来告诉该文件它在包层次结构中应该具有的名称。

有关详细信息,请参阅http://www.python.org/dev/peps/pep-0366/

0