|
发表于 2022-2-14 17:41:13
|
显示全部楼层
本帖最后由 isdkz 于 2022-3-11 17:40 编辑
相对导入必须有一个父包且无法越过顶级包,那什么是父包呢,举个例子:
from a import b 或者 import a.b 这两种导入方式实际上都是导入了a.b,区别只是第一种方式把b纳入了当前命名空间,第二种方式是把a.b纳入了当前命名空间
你可以用下面的代码来验证这个说法,sys.modules可以看到导入的模块
- import sys
- print(sys.modules)
复制代码
那既然这两种方式都是导入了a.b,所以不管这两种方式不管哪种方式导入,a就是b的父包
那父包有了,无法越过顶级包又是什么意思呢,顶级包是什么呢,比如你这个包藏的很深,import a.b.c.d,a就是它们的顶级包
就是相对导入(from . import c 当前目录、from .. import c 上一级目录,from ... import c 上上级目录)的方式不管怎么跳级都不能跳出顶级包,也就是不能跳到跟它的顶级包同级
就是假如a是b的顶级包的话,而c又跟a同级,你想通过相对导入的方式导入c就行不通了,得用绝对导入 |
|