给定这样的目录结构
main/
common/
foo.py
A/
src/
bar.py
如何使用 Python 的相对导入来导入foo
from bar
?通过将其添加到路径中,我得到了一个可行的解决方案,但这很难看。有没有办法简单地使用import
Python 2.7 中的一个?
这是这个问题的一个更复杂的版本:
给定这样的目录结构
main/
common/
foo.py
A/
src/
bar.py
如何使用 Python 的相对导入来导入foo
from 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
回答您的评论: 的含义.
不会根据脚本的运行位置而改变,它会根据包结构的不同而改变。