包的使用
一、定义
- 包是集合了一组py文件,提供了一组复杂的功能
- 当提供一组复杂的功能,一个py文件放不下的时候需要用到包
- 每一个pack包中必须包含一个__init__.py文件,这是包和目录的区别
- 导入包相当于执行了包下边的__init__.py文件
二、从包中导入模块的方式
- 方式一:直接导入
- import pack1.pack2.pack3.模块名
pack1.pack2.pack3.模块名.变量/函数名 - import pack1.pack2.pack3.模块名 as 别名
别名.变量/函数名 from pack1.pack2.pack3 import 模块名
模块.变量/函数名这种方式更加常用
- import pack1.pack2.pack3.模块名
- 方式二:复杂的导入
- 首先必须每一级的包的__init__.py文件中都加上pack的导入路径
再按照方式一的方式来导入文件
init.py文件中pack导入包的路径:
- 使用绝对路径导入:from pack1 import pack2-->from pack1.pack2 import pack3,
每一级的导入都必须是绝对路径,这种方式在包的位置不改变的情况下是适用的,但是如果包的位置发生改变就会报错。 - 使用相对路径导入:在每一级的__init__.py文件中写入from . import 下一级的pack/模块名,这样可以有效的避免绝对路径的问题。
需要特别注意的是:使用了相对路径导入的文件只能被当做模块来使用,不能被当作脚本文件来执行,如果到做脚本文件来执行程序会报错。
- 使用绝对路径导入:from pack1 import pack2-->from pack1.pack2 import pack3,
复杂的导入适用于整个包文件的开发,这个包给其他开发者使用的情况,日常的练习中直接导入方式就可以满足需求。
三、查看包/模块/文件的路径
- 在代码中查看路径需要用到sys模块
- import sys, print(sys.path)查看当前的所有绝对路径
四、总结
如果是直接导入一个包,相当于直接执行了包下边的__init__.py文件,并不会把包下边的其他包和py文件导入到内存中;
如果希望直接导入包后下边的包和其他的py文件都能直接通过包来导入,那么需要在__init__.py文件中去自定义处理。
来源:https://www.cnblogs.com/ddzc/p/12293814.html