正确的相对导入为:
from ...common import foo
但是,相对进口仅在一个包装中起作用。如果main
是软件包,则可以在此处使用相对导入。如果main
不是包,则不能。
因此,如果您在中运行脚本/main/
并执行类似的操作import A.src.bar
,则该相对导入将失败,并显示“尝试了超出顶级包的相对导入”。这是因为相对导入正在尝试导入顶级包之外的内容A
。
但是,如果您在中运行脚本/
并执行类似的操作import main.A.src.bar
,则相对导入将成功,因为main
它现在是软件包。在这种情况下,以下两个等效:
from ...common import foo
from main.common import foo
为了回答您的评论:的含义.
不会根据运行脚本的位置而改变,而是取决于程序包的结构而改变。