从父文件夹子文件夹相对导入模块
Posted
技术标签:
【中文标题】从父文件夹子文件夹相对导入模块【英文标题】:Relative importing modules from parent folder subfolder 【发布时间】:2012-12-13 00:11:14 【问题描述】:给定这样的目录结构
main/
common/
foo.py
A/
src/
bar.py
如何使用 Python 的相对导入从bar
导入foo
?通过将其添加到路径中,我得到了一个可行的解决方案,但这很难看。有没有办法在 Python 2.7 中简单地使用单个 import
?
这是这个问题的一个更复杂的版本:
Importing modules from parent folder
【问题讨论】:
【参考方案1】:正确的相对导入应该是这样的:
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 模块导入到子目录中的 jupyter notebook 文件中
1.模块2.循环导入问题及解决思路3.区分py文件的两种类型4.模块的查找顺序5.模块的绝对导入与相对导入6.项目开发的目录规范