我正在尝试遵循PEP 328,具有以下目录结构:
pkg/
__init__.py
components/
core.py
__init__.py
tests/
core_test.py
__init__.py
Run Code Online (Sandbox Code Playgroud)
在core_test.py
我有以下import语句
from ..components.core import GameLoopEvents
Run Code Online (Sandbox Code Playgroud)
但是,当我运行时,我收到以下错误:
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
Run Code Online (Sandbox Code Playgroud)
搜索周围我发现" 相对路径甚至不能使用__init__.py "和" 从相对路径导入模块 ",但它们没有帮助.
这里有什么我想念的吗?
想象一下这个目录结构:
app/
__init__.py
sub1/
__init__.py
mod1.py
sub2/
__init__.py
mod2.py
Run Code Online (Sandbox Code Playgroud)
我正在编码mod1
,我需要从中导入一些东西mod2
.我该怎么办?
我尝试了from ..sub2 import mod2
但是我得到了"尝试非包装中的相对导入".
我google了一下,但发现只有" sys.path
操纵"黑客.有没有干净的方式?
编辑:我__init__.py
的所有人目前都是空的
EDIT2:我想这样做,因为SUB2包含了为子包(共享类sub1
,subX
等等).
Edit3:我正在寻找的行为与PEP 366中描述的相同(感谢John B)