β

Python3萌新入门笔记(54)

Python自动化运维 77 阅读

这一篇教程,我们一起来学习Python代码的打包发布。

首先,打包的用途分为以下几种:

一、生成可以通过命令行安装的安装包

distutils模块提供了在Python环境中构建和安装额外模块的支持。新的模块可以是纯粹的Python模块,也可以是C语言编写的扩展模块,也可以是Python这两种模块的集合。

使用这个模块创建可安装的自定义模块,我们需要先创建一个setup.py的脚本。

示例代码:

from  distutils.core import setup

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”文件夹,里面包含我们想要一起打包的文件。

关于PyInstaller的深入使用,请参考官方文档: https://pyinstaller.readthedocs.io/en/stable/index.html

本节知识点:

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):资源

转载请注明: 魔力 • Python » Python3萌新入门笔记(54)

作者:Python自动化运维
写python,然后喝茶,指挥千军万马~
原文地址:Python3萌新入门笔记(54), 感谢原作者分享。

发表评论