Python 中包的相对导入详解
1. 相对导入基础
在 Python 3.x 以及可选的 2.x 版本中,由于某些变化,需要使用特殊的 from 语句语法,即路径前加一个点号,以实现同一包内模块的导入。除非导入语句包含相对于 sys.path 中包根目录的完整路径,或者导入语句是相对于程序的主目录(通常也是当前工作目录)给出的,否则默认情况下,包目录不会自动被搜索。若不使用特殊的 from 语句语法,在包内直接导入包目录中的文件将失败。
相对导入主要分为以下两种情况:
- 使用前导点号导入 :在 Python 3.x 和 2.x 中,都可在 from 语句中使用前导点号来强制进行包内的相对导入。这种导入方式仅在当前包的目录中搜索模块,不会找到 sys.path 中其他位置同名的模块,从而使包内的模块可以覆盖外部模块。例如:
from . import spam # 相对于包的相对导入
此语句会导入与该语句所在模块位于同一包目录下名为 spam 的模块。
- 不使用前导点号导入 :在 Python 2.x 中,不使用前导点号的导入会先进行相对搜索,再进行绝对搜索,且首先会在当前包中搜索。而在 Python 3.x 中,包内的导入默认是绝对的,若未使用前导点号,导入会跳过包内模块,仅在 sys.p
超级会员免费看
订阅专栏 解锁全文
1827

被折叠的 条评论
为什么被折叠?



