想象一下这个目录结构:
app/
__init__.py
sub1/
__init__.py
mod1.py
sub2/
__init__.py
mod2.py
我正在编写mod1,我需要从mod2中导入一些东西。我该怎么做呢?
我试过…sub2导入mod2,但我得到了一个“尝试相对导入非包”。
我搜索了一下,但只找到了“sys”。路径操纵“黑客”。没有干净的方法吗?
编辑:我所有的__init__.py目前是空的
Edit2:我试图这样做是因为sub2包含跨子包共享的类(sub1、subX等)。
Edit3:我正在寻找的行为与PEP 366中描述的相同(感谢John B)
用例子解释nosklo的答案
注意:所有__init__.py文件都是空的。
main.py
app/ ->
__init__.py
package_a/ ->
__init__.py
fun_a.py
package_b/ ->
__init__.py
fun_b.py
app - package_a fun_a . py
def print_a():
print 'This is a function in dir package_a'
app - package_b fun_b . py
from app.package_a.fun_a import print_a
def print_b():
print 'This is a function in dir package_b'
print 'going to call a function in dir package_a'
print '-'*30
print_a()
main.py
from app.package_b import fun_b
fun_b.print_b()
如果你运行$ python main.py,它会返回:
This is a function in dir package_b
going to call a function in dir package_a
------------------------------
This is a function in dir package_a
Main.py执行如下操作
Fun_b.py从app.package_a。Fun_a import print_a
package_b文件夹中的文件使用package_a文件夹中的文件,这就是你想要的。对吧? ?
用例子解释nosklo的答案
注意:所有__init__.py文件都是空的。
main.py
app/ ->
__init__.py
package_a/ ->
__init__.py
fun_a.py
package_b/ ->
__init__.py
fun_b.py
app - package_a fun_a . py
def print_a():
print 'This is a function in dir package_a'
app - package_b fun_b . py
from app.package_a.fun_a import print_a
def print_b():
print 'This is a function in dir package_b'
print 'going to call a function in dir package_a'
print '-'*30
print_a()
main.py
from app.package_b import fun_b
fun_b.print_b()
如果你运行$ python main.py,它会返回:
This is a function in dir package_b
going to call a function in dir package_a
------------------------------
This is a function in dir package_a
Main.py执行如下操作
Fun_b.py从app.package_a。Fun_a import print_a
package_b文件夹中的文件使用package_a文件夹中的文件,这就是你想要的。对吧? ?