想象一下这个目录结构:
app/
__init__.py
sub1/
__init__.py
mod1.py
sub2/
__init__.py
mod2.py
我正在编码 mod1
,我需要从 mod2
导入一些东西。我应该怎么做?
我尝试 from ..sub2 import mod2
但我收到“尝试在非包中进行相对导入”。
我四处搜索但只发现“ sys.path
操纵”黑客。没有一个干净的方法吗?
编辑:我所有的 __init__.py
目前都是空的
Edit2:我正在尝试这样做,因为 sub2 包含跨子包共享的类( sub1
, subX
等)。
Edit3:我正在寻找的行为与 PEP 366 中描述的相同(感谢 John B)
原文由 Joril 发布,翻译遵循 CC BY-SA 4.0 许可协议
每个人似乎都想告诉你应该做什么,而不是仅仅回答问题。
问题是您通过将 mod1.py 作为参数传递给解释器来将模块作为“main”运行。
来自 PEP 328 :
在 Python 2.6 中,他们添加了相对于主模块引用模块的能力。 PEP 366 描述了这一变化。
更新:根据 Nick Coghlan 的说法,推荐的替代方法是使用 -m 开关在包内运行模块。