1.什么是包:
包的本质就是文件夹,它由一个包含有__init__.py文件的文件加。
包以及包下所有的文件都是用来被导入使用,没有一个文件是用来直接运行,
因为包是模块的一中通用表现形式之一。----》from...import 和 import 使用
2.为什么要有包?
方便于集中管理,方便于使用者
3.怎么用
模块的使用一样。
import 包名发生了什么事情?对比模块导入
a.创建 p1 的名称空间
b.执行p1下的__init__.py文件的代码,将执行过程中产生的名字都丢到p1名称空间中
c.在当前执行文件中(调用者)拿到一个名字p1,p1指向__init__.py的名称空间。即原p1的名称空间
4.包内模块:
绝对导入:每次导入都是以最顶级包为起始开始查找。 搜索路径以执行文件的文件夹为基准。
相对导入:相对于当前所在的文件,点.代表当前所在的文件目录,点点..代表上一级的目录。相对导入只能在被导入的模块中使用
示例:
执行文件run.py 导入m1模块
做法:
1.在p1模块的__init__.py导入m1模块
2.执行文件是run.py 且m1不是内置模块,所以路径以执行文件的文件夹为基准
__init__.py 文件 导入 m1模块
run.py文件 导入 p1模块
5.自定义模块导入的两种办法:
a.import sys
sys.path.append( r' 自定义模块绝对路径 ')
import 自定义模块名
b.以执行文件的文件夹为绝对路径 from x import 自定义模块