41

给定这样的目录结构

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

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

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

从父文件夹导入模块

4

1 回答 1

48

正确的相对导入是这样的:

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

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

于 2012-12-27T16:06:31.847 回答