包的引用

不在同一目录下的包的引用
一:直接写包名
from glance2.glance.api import policy  # 执行了policy文件 # in policy

二:import包名时就执行了想执行的模块,原理:import包时自动执行了包中的__init__.py 文件,可以通过在此文件中执行想要的引入的模块。但是又涉及到环境变量的问题
就是如果在本文件执行别的文件时,只能找到本文件的环境变量,也就是路径,在别的文件又执行了别的文件不一定找的到他的路径,此方法分为绝对路径和相对路径

绝对路径

sys.path中的内容永远是当前你执行的文件
如果import别的文件,在别的文件中如果有执行import语句,那么相当于在本文件的环境变量下执行imort。。
第一步:
import sys
print(sys.path)  # 'D:\\学习资料\\Daily Code and experience\\day26' # 证明可以看到day26下的文件或目录,再直接引入下一级就看不到了 #看一下本文件的环境变量,目的是看本文件能找到哪些文件或目录
如:
import glance  # ModuleNotFoundError: No module named 'glance' 没有此模块
import glance2
 没有报错证明成功导入glance2,导入时自动执行了glance2的__init__.py,有点类似于创建类的对象,python中一切皆对象。
而执行了__init__.py文件中的导入模块是要开空间,空间里面是模块中的变量,类等等。和初始化一个类的对象很相似。
此时该文件没有任何操作
import glance2 # 在该文件中执行import glance时 ,ModuleNotFoundError: No module named 'glance'
报错原因,此文件只能找到glance2,所以要修改__init__.py文件,修改为from glance2 import glance,因为文件是在我这个文件执行的。
相对路径,

所谓相对路径,就是相对与在哪个文件执行就在哪个文件的相对路径,就是说我import一个包,包里面的import在我这个文件去执行,而是相对与被import的文件来说的引入,和绝对路径完全是反的。
. 表示当前目录
.. 表示上一级目录
相对导入缺点:
但凡带相对导入的文件,不能在所在里的包相互引用,只能作为模块对外提供服务。

这里写图片描述

这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42233629/article/details/82629881