鉴于这样的目录结构
/main/
/main/common/foo.py
/main/A/
/main/A/src/
/main/A/src/bar.py
我如何使用Python的相对进口导入foo
从bar
? 我已经将它添加到该路径有一个工作的解决方案,但是这是丑陋的。 有没有办法简单地用一个做import
在Python 2.7?
这是这个问题的一个更复杂的版本:
从父文件夹导入模块
鉴于这样的目录结构
/main/
/main/common/foo.py
/main/A/
/main/A/src/
/main/A/src/bar.py
我如何使用Python的相对进口导入foo
从bar
? 我已经将它添加到该路径有一个工作的解决方案,但是这是丑陋的。 有没有办法简单地用一个做import
在Python 2.7?
这是这个问题的一个更复杂的版本:
从父文件夹导入模块
正确的相对进口将是这样:
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
为了回答您的评论:的意义.
具体情况取决于运行脚本从,它取决于封装结构是什么样的变化并没有改变。