包
包的概念
Python的程序由包、模块和函数组成。包是由一系列模块组成的集合,模块是处理某一类问题的函数和类的集合,它们之间的关系如图所示。
Python提供了许多有用的工具包,如字符串处理、Web应用、图像处理等,这些自带的工具包和模块安装在Python的安装目录下的Lib子目录中。包是一个至少包含__int__.py文件的文件夹,init.py文件一般用来进行包的某些初始化工作或者设置__all__值,其内容可以为空。
假设首先在包pack中创建两个子包:pack1和pack2,然后在包pack1中定义模块myModule1,在包pack2中定义模块myModule2,最后在包pack中定义一个模块main,调用子包pack1和pack2中的模块,具体结构如下所示:
其中,pack1包下的__init__.py文件内容如下:
pack1包下的myModule1.py文件内容如下:
pack2包下的__init__.py文件内容如下:
pack2包下的myModule2.py文件内容如下:
pack包下的__init__.py文件内容如下:
pack包下的main.py文件内容如下:
运行main.py程序,则运行结果如图所示。
从程序运行结果可发现,导入模块过程中遇到的所有__init__.py文件都会被执行。从包中导入单独的模块可以使用以下种3方法:
这样就可以在main.py模块中一次导入pack1、pack2包中所有的模块,pack包下的main.py文件内容如下:
运行main.py程序,运行结果如图所示。
包的发布
本节将演示如何将写好的模块进行打包和发布,最简单的方法是将包直接复制到Python的lib目录,但此方式不便于管理与维护,存在多个Python版本时会非常混乱。接下来通过编写setup.py来对9.5节介绍的pack模块进行打包。
(1)在pack所在的文件目录下新建setup.py、MANIFEST.in、README.txt文件,其目录结构如下:
(2)打开setup.py文件,编辑其内容如下:
其中,packages指明将要发布的包。
打开MANIFEST.in文件,编辑其内容如下:
include *.txt
该文件列出各种希望包含在包中的非源代码。
README.txt文件中的内容为提示使用者如何使用该包中的模块。
(3)在终端模式下,进入pack包所在的文件目录执行如下命令:
python setup.py build
该命令可以构建包,具体执行过程如图所示
执行完该命令后,目录结构如下所示:
包的安装
9.6节讲解了如何发布自己制作的包,本节讲解如何安装其他开发者发布的包(以9.6节最终生成的压缩包为例)。
(1)进入压缩包所在的文件目录并对其进行解压,解压后的文件目录如下所示:
(2)在终端模式下,进入myProject-1.0目录下执行如下命令:
python setup.py install
该命令具体执行过程如图所示。
通过该命令就可以将pack包安装到系统(即Python路径)中,即该包存在于D:\python3.6.2\Lib\site-packages(本书中Python的安装目录为D:\python3.6.2)。