想象一下这个目录结构:
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)
我想将子文件夹导入为模块.因此每个子文件夹都包含一个__init__.py.我的文件夹结构是这样的:
src\
main.py
dirFoo\
__init__.py
foofactory.py
dirFoo1\
__init__.py
foo1.py
dirFoo2\
__init__.py
foo2.py
Run Code Online (Sandbox Code Playgroud)
在我的主脚本中我导入
from dirFoo.foofactory import FooFactory
Run Code Online (Sandbox Code Playgroud)
在这个工厂文件中,我包含子模块:
from dirFoo1.foo1 import Foo1
from dirFoo2.foo2 import Foo2
Run Code Online (Sandbox Code Playgroud)
如果我调用我的foofactory我得到错误,那python无法导入子模块foo1和foo2:
Traceback (most recent call last):
File "/Users/tmp/src/main.py", line 1, in <module>
from dirFoo.foofactory import FooFactory
File "/Users/tmp/src/dirFoo/foofactory.py", line 1, in <module>
from dirFoo1.foo1 import Foo1
ImportError: No module named dirFoo1.foo1
Run Code Online (Sandbox Code Playgroud)