本文以打包一个pyqt汇率计算器和一个pyqt+paddle的模型为例进行讲解并介绍了upx框架的使用
用 Pyinstaller 打包程序,生成可执行文件
4.5.1 Pyinstaller 介绍及安装
1)基本介绍
在创建了独立应用(自包含该应用的依赖包)之后,还可以使用 PyInstaller
将 Python 程序生成可直接运行的程序,这个程序就可以被分发到对应的
Windows 或 Mac OS X 平台上运行。
2)安装
Python 默认并不包含 PyInstaller 模块,因此需要自行安装 PyInstaller 模
块。强烈建议使用 pip 在线安装的方式来安装 PyInstaller 模块,不要使用离线
包的方式来安装,因为 PyInstaller 模块还依赖其他模块,pip 在安装 PyInstaller
模块时会先安装它的依赖模块。
命令:
pip install pyinstaller
在 PyInstaller 模块安装成功之后,在 Python 的安装目录下的 Scripts( 注
意,每个人的不一样,去找你自己的:D:\Python\Python36\Scripts) 目录下会增
加一个 pyinstaller.exe 程序,接下来就可以使用该工具将 Python 程序生成 EXE
程序了。
4.5.2 Pyinstaller 的使用方法及常用参数介绍
1)使用方法
PyInstaller 工具的命令语法如下:
pyinstaller 选项 Python 源文件
不管这个 Python 应用是单文件的应用,还是多文件的应用,只要在使用
pyinstaller 命令时编译作为程序入口的 Python 程序即可。
PyInstaller 工具是跨平台的,它既可以在 Windows 平台上使用,也可以在 Mac
OS X 平台上运行。在不同的平台上使用 PyInstaller 工具的方法是一样的,它们
支持的选项也是一样的。
2) pyinstaller 的参数使用介绍
-D,–onedir:创建一个文件夹包含exe 文件(默认)
-F,–onefile:打包之后只会生成一个exe 的文件
-c,–console,–nowindowed:使用控制台窗口(默认)
-w,–windowed,–noconsole:使用窗口显示
-i:设置打包exe 的图标,默认使用的是Python 的图标
4.5.3 单个文件的打包
重要提醒:打包前,关闭所有的杀毒软件、卫士等等。
使用以下程序,尝试打包:
import cv2
img = cv2.imread("logo.jpg")
cv2.imshow("logo",img)
cv2.waitKey()
这个程序展示了使用 OpenCV 来读取图片然后显示,编辑完成之后进入到该目录下,运行
pyinstaller -F exmple.py,看到如下信息表示打包成功:
在项目目录下发现多了 dist 和 build 两个目录和一个*.spec 的文件。
打开 dist 目录,可以发现下面多了一个 example.exe 的可执行文件,双击运行发现并没有
显示图片,此时我们需要将 logo.jpg 拷贝到当前目录下,然后再运行 exe 程序就可以看到
如下结果
如果不想显示控制台打包的时候可以加上-w 参数,pyinstaller -F -w example.py,此时打
包生成的 exe 程序执行时不会出现控制台窗口。
修改exe 的图标
默认使用的图标如下
如果想更换图标,可以使用:
ico 下载网址:https://www.easyicon.net/
pyinstaller -F -w -i=panda.ico example.py通过-i 参数可以指定 ico 的图标,如果生成的 exe 的图标没有变化试着将 ico 图标文件拷贝
到 exe 的相同目录下。
pyInstaller 一般安装在 python 安装路径/Script 下面
pyinstaller -F xxx.py 打包 exe 命令,但是会有黑窗口
pyinstaller -F -w xxx.py 去除黑窗口
另外,建议每次打包结束后,再进行一次全新打包时,将之前 proj 目录下的:
__pycache__ 文件夹
build 文件夹
dist 文件夹
******.spec 文件 (*****为打包的文件名)
上述四个全部删除后再重新打包,以免出问题(当然,不是删了一定没问题,也
不是不删一定有问题~~~)。
4.5.4 增加压缩减小可执行文件的方法‐UPX
1) 未增加 upx 打包
UPX 是一种适用于大多数操作系统的免费实用程序。UPX 压缩可执行文件 和库,使它们更小。
UPX 适用于大多数操作系统,可以压缩大量可执行文件格式。有关下载的
信息,请参阅 UPX 主页,以及支持的可执行格式列表。
增加 UPX 之前,打包的报文如下:
说明程序中没有装在 UPX。需要配置 UPX 才能正常工作。
这种情况下打包的结果,以上例的大小为例:(50MB 左右)
2) 下载 UPX
到官网 https://upx.github.io/ 下载了 UPX(我的是 Window 64 版本), 下载下 来是一个压缩包
Github 官网经常上不去,多试几次~~~
(2) 解压得到 upx.exe 文件
(3) 把 exe 文 件 拷 贝 到 pyinstaller 目 录 下 , 我 的 是 C:\ProgramData\Anaconda3\envs\Paddle37\Scripts
(4) 然后再重新运行 pyinstaller 命令就会提示: UPX is available 了
(5) 重新打包后的大小 (30MB 左右)
4.5.5 尝试将各个案例进行打包
1)汇率换算器的打包
打包完效果:
更新 hook 文件 我的路径:
C:\ProgramData\Anaconda3\envs\Paddle37\Lib\site-packages\PyInstaller\hooks (主要关注你的环境位置,这里 Paddle37 是我的虚拟环境名)
增加一个文件 hook-paddle.py 文件
# hook-paddle.py
from PyInstaller.utils.hooks import collect_data_files
datas = collect_data_files("paddle")
保存好即可使用(已经尝试,貌似不需要一个 hook-paddlehub.py 的文件,但是
在调用其他模块时,不排除需要增加其他模块的 hook 文件,请根据自己的使用
情况决定)。
打包成执行程序,并运行
其他错误
1) 路径有中文
2) 路径有其他标点符号(包括空格等)
解决方法:
针对 1):更换无中文路径,全英文,且加入空格等;
结果:解决,软件正常运行。
针对 2):第一次尝试:去掉其他符号并用中文路径;
结果:软件无法正常运行,问题仍然一样。