包的概念

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方法:
在这里插入图片描述
当需要导入某个包下的所有模块时,不可以直接使用如下语句:
在这里插入图片描述
这时需要使用__all__记录当前包所包含的模块,例如在pack1包的__init__.py文件中第一行添加如下代码:
在这里插入图片描述
其中方括号中的内容是模块名的列表,如果模块数量超过两个,使用逗号分开。同理,在pack2包的__init__.py文件中也添加一行类似的代码:
在这里插入图片描述
这样就可以在main.py模块中一次导入pack1、pack2包中所有的模块,pack包下的main.py文件内容如下:
在这里插入图片描述
运行main.py程序,运行结果如图所示。
在这里插入图片描述
如果pack1包下的myModule1.py文件需要引用pack2包下的myModule2模块,默认情况下,myModule1.py文件是找不到myModule2模块,此时需要按相对位置引入模块,修改myModule1.py文件,具体如下所示:
在这里插入图片描述
其中,“…”表示包含from导入命令的模块文件所在路径的上一级目录,运行main.py程序,则运行结果如图所示。
在这里插入图片描述

包的发布

本节将演示如何将写好的模块进行打包和发布,最简单的方法是将包直接复制到Python的lib目录,但此方式不便于管理与维护,存在多个Python版本时会非常混乱。接下来通过编写setup.py来对9.5节介绍的pack模块进行打包。
(1)在pack所在的文件目录下新建setup.py、MANIFEST.in、README.txt文件,其目录结构如下:
在这里插入图片描述
(2)打开setup.py文件,编辑其内容如下:
在这里插入图片描述
其中,packages指明将要发布的包。
打开MANIFEST.in文件,编辑其内容如下:
在这里插入图片描述
该文件列出各种希望包含在包中的非源代码。
README.txt文件中的内容为提示使用者如何使用该包中的模块。
(3)在终端模式下,进入pack包所在的文件目录执行如下命令:
在这里插入图片描述
该命令可以构建包,具体执行过程如图所示。
在这里插入图片描述
执行完该命令后,目录结构如下所示:
在这里插入图片描述
(4)接着在终端模式下输入以下命令:
在这里插入图片描述
该命令可以生成最终发布的压缩包,具体执行过程如图所示。
在这里插入图片描述
执行完该命令后,目录结构如下所示:
在这里插入图片描述
其中,dist目录下myProject-1.0.tar.gz文件为将要发布的包,开发者可以将此文件发布给其他人或上传到Python社区供更多的开发者下载。

包的安装

(1)进入压缩包所在的文件目录并对其进行解压,解压后的文件目录如下所示:
在这里插入图片描述
(2)在终端模式下,进入myProject-1.0目录下执行如下命令:
在这里插入图片描述
该命令具体执行过程如图所示。
在这里插入图片描述
通过该命令就可以将pack包安装到系统(即Python路径)中,即该包存在于D:\python3.6.2\Lib\site-packages(本书中Python的安装目录为D:\python3.6.2)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值