从父文件夹的子文件夹的相对进口模块(Relative importing modules from

2019-07-17 14:56发布

鉴于这样的目录结构

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

我如何使用Python的相对进口导入foobar ? 我已经将它添加到该路径有一个工作的解决方案,但是这是丑陋的。 有没有办法简单地用一个做import在Python 2.7?

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

从父文件夹导入模块

Answer 1:

正确的相对进口将是这样:

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

为了回答您的评论:的意义. 具体情况取决于运行脚本从,它取决于封装结构是什么样的变化并没有改变。



文章来源: Relative importing modules from parent folder subfolder