父文件夹子文件夹中的相对导入模块

时间:2012-12-27 15:58:32

标签: python import module python-2.7

给定像这样的目录结构

/main/
/main/common/foo.py
/main/A/
/main/A/src/
/main/A/src/bar.py

如何使用Python的相对导入foo导入bar?通过将其添加到路径中我有一个可行的解决方案,但这很难看。有没有办法在Python 2.7中使用单个import

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

Importing modules from parent folder

1 个答案:

答案 0 :(得分:30)

正确的相对导入是:

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

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