关于python:父文件夹子文件夹中的相对导入模块

Relative importing modules from parent folder subfolder

给定这样的目录结构

1
2
3
4
5
/main/
/main/common/foo.py
/main/A/
/main/A/src/
/main/A/src/bar.py

如何使用python的相对导入从bar导入foo?我有一个可行的解决方案,把它添加到路径中,但这很难看。在python 2.7中,有没有一种简单地处理单个import的方法?

这是这个问题更复杂的版本:

从父文件夹导入模块


正确的相对导入应该是:

1
from ...common import foo

然而,相对进口只在一个包内工作。如果main是一个包,那么您可以在这里使用相对导入。如果main不是一个包,则不能。

因此,如果您在/main/中运行脚本并执行类似于import A.src.bar的操作,则相对导入将失败,并"尝试在顶级包之外进行相对导入"。这是因为相对导入试图导入顶级包A之外的内容。

但是,如果您在/中运行脚本并执行类似于import main.A.src.bar的操作,那么相对导入将成功,因为main现在是一个包。在这种情况下,以下两个是等效的:

1
2
from ...common import foo
from main.common import foo

回答您的意见:.的含义不会因运行脚本的位置而改变,而是根据包结构的不同而改变。