想象一下这个目录结构:
app/
__init__.py
sub1/
__init__.py
mod1.py
sub2/
__init__.py
mod2.py
我正在编码mod1
,我需要从中导入一些东西mod2
。我该怎么做呢?
I tried from ..sub2 import mod2
,但我收到“尝试在非包中进行相对导入”。
我用谷歌搜索了一下,但我只找到了“sys.path
难道就没有一种干净的方法吗?
All my __init__.py
目前是空的
我试图这样做是因为 sub2 包含在子包之间共享的类(sub1
, subX
, etc.).
我正在寻找的行为与中描述的相同PEP 366 http://www.python.org/dev/peps/pep-0366/ (谢谢约翰·B https://stackoverflow.com/questions/72852/how-to-do-relative-imports-in-python#comment8465_72852).
问题是您通过将 mod1.py 作为参数传递给解释器来将模块作为“__main__”运行。
From PEP 328 http://www.python.org/dev/peps/pep-0328/:
相对导入使用模块的 __name__ 属性来确定该模块在包层次结构中的位置。如果模块的名称不包含任何包信息(例如,将其设置为“__main__”),则将解析相对导入,就像该模块是顶级模块一样,无论该模块实际位于文件系统上的位置。
在 Python 2.6 中,他们添加了相对于主模块引用模块的功能。PEP 366 http://python.org/dev/peps/pep-0366/描述了变化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)