想象一下这个目录结构:
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)
我正在改变一堆旧的python代码,偶尔会遇到包之间的名称冲突.我有一个关于何时应该使用绝对导入以及是否适合仅按名称导入同级模块的问题.
/package/
/package/__init__.py
/package/subA
/package/subA/__init__.py
/package/subA/moduleA.py
/package/subA/moduleB.py
/package/subB
/package/subB/__init__.py
/package/subB/moduleA.py
/package/subB/moduleB.py
Run Code Online (Sandbox Code Playgroud)
包中的每个import语句应该是这样的:
import package.subX.moduleX
Run Code Online (Sandbox Code Playgroud)
要么
from package.subX import moduleX
Run Code Online (Sandbox Code Playgroud)
在子包__init__.py
文件中怎么样?简单地说是不对的
import moduleA
import moduleB
Run Code Online (Sandbox Code Playgroud)
或者,在/package/subA/moduleA.py中,简单地放入是不对的:
import moduleB
Run Code Online (Sandbox Code Playgroud)