父文件夹子文件夹中的相对导入模块

Hoo*_*ked 26 python import module python-2.7

给定像这样的目录结构

/main/
/main/common/foo.py
/main/A/
/main/A/src/
/main/A/src/bar.py
Run Code Online (Sandbox Code Playgroud)

我如何使用Python的相对进口导入foobar?通过将其添加到路径中我有一个可行的解决方案,但这很难看.有没有办法简单地import在Python 2.7中使用单个?

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

从父文件夹导入模块

Cla*_*diu 34

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

from ...common import foo
Run Code Online (Sandbox Code Playgroud)

但是,相对导入仅适用于一个包中.如果main是包,那么您可以在此处使用相对导入.如果main不是包,你不能.

因此,如果您正在运行脚本/main/并执行类似操作import A.src.bar,那么相对导入将失败并显示"尝试相对导入超出顶层包".这是因为相对导入试图导入顶层包之外的东西A.

但是,如果您正在运行脚本/并执行类似操作import main.A.src.bar,那么相对导入将成功,因为main现在是一个包.在这种情况下,以下两个是等效的:

from ...common import foo
from main.common import foo
Run Code Online (Sandbox Code Playgroud)

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

  • 那么,您所说的第一种情况的解决方案是什么? (2认同)