python - 从父文件夹子文件夹相对导入模块

标签 python import module python-2.7

给定这样的目录结构

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

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

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

Importing modules from parent folder

最佳答案

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

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/

相关文章:

python - 插入语法 SQL 的动态表 - Python

MySQL 导入时使用单引号

python - Django条件注释不带过滤

xml - 带有导入和 namespace 的 XSD

r - Excel 时间并不总是正确转换

ruby-on-rails - 最好附加一个简单的函数作为类方法或模块?

php - GAE - wordpress 作为 Python 应用程序内的模块

python - 为什么 python 的 imp.reload() 不删除旧的类和函数?

python - 更改 Pandas DataFrame 数据点的值

python - count() 结果中的奇怪事情。需要澄清