使用__init__.py,如何解决“以非软件包方式进行相对导入”

发布于 2021-02-02 23:22:42

我正在尝试使用以下目录结构来遵循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 <module>
    from ..components.core import GameLoopEvents
ValueError: Attempted relative import in non-package

到处搜索时,我发现“ 即使使用__init__.py,相对路径也无法使用 ”和“ 从相对路径导入模块 ”,但是它们没有帮助。

我在这里想念什么吗?

关注者
0
被浏览
102
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    是。你没有将其用作包装。

    python -m pkg.tests.core_test
    


  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    详细说明伊格纳西奥·巴斯克斯(Ignacio Vazquez-Abrams)的答案:

    Python导入机制相对于__name__当前文件起作用。当直接执行文件时,它没有通常的名称,而是"__main__"以它的名字命名。因此,相对进口无效。

    你可以按照Igancio的建议使用该-m选项执行它。如果包的一部分要作为脚本运行,则还可以使用__package__属性来告诉该文件它在包层次结构中应具有的名称。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看