8.3 包
包是一种管理Pyhon 模块命名空间的形式,采用"点模块名称"。例如一个模块的名称是A.B ,那么它表示一个包A 中的子模块B 。
就好像使用模块的时候,不用担心不同模块之间的全局变量相互影响一样,采用点模块名称这种形式也不用担心不同库之间的模块重名的情况。这样不同的程序员就可以提供NumPy模块,或者是Python 图形库。
提醒: 包类似于文件夹,而镇块类似于文件夹中的文件。
假设想设计一套统一处理声音文件和数据的模块(或者称为一个" 包" )。现存很多种不同的音频文件格式,所以需要有一组不断增加的模块,用来在不同的格式之间转换。并且针对这些音频数据,还有很多不同的操作(比如混音、添加回声、增加均衡器功能、创建人造立体声效果) ,所以还需要一组怎么也写不完的模块来处理这些操作。
这里给出了一种可能的包结构(在分层的文件系统中) ,具体如下:

在导入一个包的时候, Python 会根据sys ,path 中的目录来寻找这个包中包含的子目录。
目录只有包含一个叫作_init_,py 的文件才会被认作是一个包,主要是为了避免一些滥俗的名字(比如叫作string) 不小心影响搜索路径中的有效模块。
最简单的情况,放一个空的:file : _init_,py 就可以了。当然这个文件中也可以包含一些初始化代码。