给定这样的目录结构
main/
common/
foo.py
A/
src/
bar.py
如何使用 Python 的 相对导入 从 bar
导入 foo
?通过将其添加到路径中,我得到了一个可行的解决方案,但这很难看。有没有办法在 Python 2.7 中简单地使用单个 import
?
这是这个问题的一个更复杂的版本:
最佳答案
正确的相对导入应该是这样的:
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
回答您的评论:.
的含义不会根据脚本的运行位置而改变,它会根据包结构的不同而改变。
关于python - 从父文件夹子文件夹相对导入模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14057464/