这一篇教程,我们一起来学习Python代码的打包发布。
首先,打包的用途分为以下几种:
一、生成可以通过命令行安装的安装包
distutils模块提供了在Python环境中构建和安装额外模块的支持。新的模块可以是纯粹的Python模块,也可以是C语言编写的扩展模块,也可以是Python这两种模块的集合。
使用这个模块创建可安装的自定义模块,我们需要先创建一个setup.py的脚本。
示例代码:
from distutils.core import setup
'''
想要学习Python?Python学习交流群:984632579满足你的需求,资料都已经上传群文件,可以自行下载!
'''
setup(name='小楼的计算器', # 程序名称
version='1.0', # 程序版本号
description='一个萌萌的计算器。', # 程序描述
author='小楼一夜听春语', # 程序作者
py_modules=['calculator'], # 包含的模块列表
packages=['other_module'] , # 包含的包列表
)
当我们完成了setup脚本的设置,就可以通过命令行终端(CMD)进行自定义包的创建。
这里有一些命令,非常简单。
1、build(构建)
将现有的自定义模块以及关联的文件构建为可安装文件包,需要使用build命令。
如上图所示,当我们在命令行终端输入命令:python setup.py build
这个时候,程序就自动的创建了一个build文件夹和该文件夹下的lib子文件夹,并且按照我们写好的setup.py脚本,将模块和关联的其它文件复制到了lib文件夹中,完成了安装包的构建。
所以,实际上build命令就是根据setup.py脚本,将安装包相关的内容全部复制出来,形成了一个新的单独的包。
2、istall(安装)
安装命令install就是在build包的基础之上进行安装。
实际上,在本机直接安装自定义模块(或第三方模块/包),我们无需执行build命令,在执行install命令的同时,程序会自动的先执行build命令。
如上图所示,当我们执行了命令:python setup.py install
程序自动的执行了build操作,然后将build包中的内容复制到了Python安装目录下的Python36\Lib\site-packages文件夹中,完成了自定义模块(第三方模块/包)的安装。
当我们打开Python安装目录下的Python36\Lib\site-packages文件夹,就能够看到build包中的所有文件内容。
3、sdist(分发)
如果想把自己开发的自定义模块发给他人并能够通过install命令进行安装,我们可以通过sdist命令进行程序发布。
如上图所示,当我们执行了命令:python setup.py sdist
程序就开始进行安装包的创建。
这个过程中会出现一些警告信息,例如没有在setup.py中设置作者的邮箱。
这些警告信息不会影响程序的发布。
当完成程序的发布,在项目文件夹下,会出现一个新的dist包,在这个包的里面,我们能够看到新生成的安装包文件(.tar.gz),这个安装包文件根据setup.py脚本中的文件名称和版本号为命名,例如:小楼的计算器-1.0.tar.gz。
这个生成的安装包文件是一个压缩包文件,解压缩之后,在命令行终端中进入解压缩后的目录,通过“python setup.py install”就能够完成这个模块的安装。
实际上,我们完全可以自己去创建这样的压缩包文件,只需要将setup.py脚本和需要发布的文件整理到一起,压缩之后发给别人,也能够进行安装。
不过,如果想做成一个带有安装向导界面的安装包,就不能自己完成了。
二、生成带有Windows中带有安装向导界面的安装包
生成带有Windows中带有安装向导界面的安装包也非常简单,只需要执行“bdist_wininst”命令。
当我们执行命令:python setup.py bdist_wininst
这个时候,程序也会自动的创建build包和dist包。
不过在dist包中会出现一个Windows可执行程序(exe)的文件,例如:小楼的计算器-1.0.win-amd64.exe
这个文件就可以发送给他人,通过双击这个文件会显示安装向导界面,多次点击“下一步”按钮就可以完成模块的安装操作。
三、生成Windows可执行程序(exe)
1、生成可执行程序
上面的“bdist_wininst”命令虽然能够生成Windows可执行程序,但是那只是安装模块的程序。
如果我们开发了一个图形界面程序(例如计算器),如何能够发布成能够直接双击运行的Windows可执行程序呢?
这里需要使用第三方库PyInstaller。
这个第三方库可以到官网下载:http://www.pyinstaller.org/downloads.html
也可以通过pip命令直接在线安装:pip install pyinstaller。
当然,也可以在PyCharm的默认设置(Default Settings)中,通过搜索模块名称进行安装。
注意,安装完毕之后,在Windows的环境变量添加这个库的安装路径,路径末尾以英文半角的分号“;”结束。
以Windows7默认安装路径为例,操作步骤为:计算机-属性-高级系统设置-环境变量-XXX的用户变量-PATH,在PATH变量原有内容的前面添加“%APPDATA%\Python\Python36\Scripts\;”。
如果没有配置环境变量,就必须在命令行终端进入这个库的安装目录,才能够执行pyinstaller的命令。
当完成上面的配置,我们就可以尝试生成可执行程序的操作了。
使用PyInstaller不需要setup.py这个脚本文件,只需要执行pyinstaller的命令。
例如,我们想把上面示例中的calculator模块生成可执行程序。
在PyCharm中打开命令行终端,并在命令行终端执行命令:pyinstaller calculator.py
注意:如果是通过系统的开始菜单键入“cmd”打开的命令行窗口,则需要先通过DOS命令“cd 项目文件夹路径”进入到项目文件夹。
当命令执行完毕,命令提示符之前的一行能够看看“completed successfully.”字样,就说明程序生成成功了。
这个时候自动出现的dist包中,会包含一个名称为“calculator”的文件夹,并且里面包含了“calculator.exe”文件。
双击运行“calculator.exe”这个可执行程序,就能够打开这个计算器程序。
但是,这里会有两个问题。
这两个问题,我们可以在执行“pyinstaller”命令时添加参数来解决。
删除之前生成的内容,我们再次尝试执行新的命令:pyinstaller -w -F calculator.py
这一次,就只生成了一个运行时没有控制台窗口的“calculator.exe”文件。
2、为程序添加图标
生成的可执行程序可以自定义程序的图标。
例如,在项目文件夹中添加一个名称为“App.ico”的图标文件。
然后,我们通过pyinstaller命令添加“-i”的参数,就能够让生成的可执行程序显示这个图标。
具体命令:pyinstaller -w -F -i App.ico calculator.py
3、为程序添加依赖文件
我们开发一款程序,往往不是一个模块文件,还可能包含其他相关的文件。
那么,这些相关的文件,如何一起打包?
当我们运行了“pyinstaller ”命令,生成了一次可执行程序之后,在项目文件夹中会自动出现一个说明文件(.spec)。
这个说明文件,我们可以进行修改。
将说明文件中的语句“datas=[],”更改为“datas=[(‘文件路径’,’生成时的文件夹名称’)],”
例如,我们想在生成可执行程序的时候,将项目文件夹中一个名为“res”文件夹中的所有文件一起打包,并且把这些文件包含到生成的可执行程序文件夹的“resource”文件夹中。
那么,我们就可以将“datas”这一句代码写为:datas=[(‘D:\\MyProject\\other\\res\\*.*’,’resource’)],
修改为说明文件之后,我们就可以通过“pyinstaller ”命令执行这个说明文件:pyinstaller calculator.spec
重新生成可执行程序文件成功之后,我们就能够在可执行程序所在的文件夹中看到名为“resource”文件夹,里面包含我们想要一起打包的文件。
本节知识点:
1、生成可以通过命令行安装的安装包;
2、生成带有Windows中带有安装向导界面的安装包;
3、生成Windows可执行程序(exe)。
本节英文单词与中文释义:
1、distutils(dist-utils):分发-实用工具
2、setup:设置
3、core:核心
4、version:版本
5、description:描述
6、author:作者
7、build:建造
8、istall:安装
9、complete:完成
10、successfully:成功
11、res(resource):资源