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



