自定义模块与包
在 Python 中,模块(Module)就是一个个扩展名为.py
的源程序文件,所以我们之前创建的每一个python源程序文件都可以理解是模块。包(Package)就是一个个保存了模块和__init__.py
文件的特殊目录。一个完整的Python项目通常都是基于模块和包的方式来组织代码。基于包目录来组织项目代码的方式,一般我们称之为模块化开发。
初始化模块
python中,一个目录下如果存在初始化模块__init__.py
则会被python系统默认为包,而初始化模块__init__.py
的作用有2个:
1.可以编写一些导包时需要初始化执行的代码,这些代码会在包被导入时自动执行
2.可以把包下面一些模块导入初始化模块__init__.py
中,是实现简写效果
注意:__init__.py
也可以是没有代码的文件,让python可以识别当前目录是一个包而已
目录/ ├── xxx.py # 一把包里面可以至少有0到多个模块文件 ├── __init__.py
导包路径
当需要在python文件中导入一个外部模块,python解析器对模块位置的搜索顺序是:
1.当前的工作目录,python文件执行时所在的工作目录,通过pwd
2.PYTHONPATH(环境变量)中的每一个目录
3.pyhton默认的安装目录
上面的三个目录,也叫起始导包路径,可以通过sys.path进行查看
因此如果希望有些路径下的模块能被python导包,则需要把当前路径加入到导包路径的搜索列表sys.path
import sys print(sys.path) sys.path.insert(0 ,"文件路径")
绝对导包
也叫绝对路径导包,从起始导包路径开始逐层目录编写路径导入模块或包,这样的导包路径写法,就是绝对导包。常见写法如下:
# 写法1: import 包名 import 包名.包名 #用法1,只能使用在__init__.py 初始化模块中出现的变量信息(这里的变量包括任意的普通变量/函数/类/对象) #写法2:可以使用到模块下的__init__.py初始化模块和当前指定模块的内容 import 模块名 import 包名.模块名 import 包名.包名.模块名 #用法2: 模块名.变量 包名.模块名.变量 包名.包名.模块名.变量 #写法3:相当于导入了每层包的__init__.py初始化模块与指定模块文件 from 包名. import 模块名 from 包名.包名 import 模块名 #用法3: 模块名.变量 #写法4:相当于导入了每层包的__init__.py 初始化模块与指定模块下的指定变量,但是指定模块的代码还是会被执行,同样__init__.py的代码会被执行,但是无法在当前文件中被调用 from 包名.模块名 import 变量 #用法4: 变量
开发中常用的绝对路径导包写法如下:
import 模块名
from 包名 import 模块名