打包发布PyQt5程序,制作安装文件。以自己的密码管理器为例 ~
用到的工具:
- 平台: Windows10
- python 3.7.6(安装好所需的包)
- pyinstaller
- upx(可选,用于压缩可执行文件)
- Inno Setup 6
打包可执行文件:
先安装pyinstaller
pip install pyinstaller
打包时最好切换到主程序脚本所在的目录下,不然会出现import
路径问题。例如我的是D:\PasswordManager
,主程序所在文件main.py
。启动pyinstaller
pyinstaller -D main.py
pyinstaller -F main.py
在当前目录下dist
文件夹里就是打包好的可执行程序。这个时候运行会出现一个控制台,如果出现错误会在控制台中打印出来,可以用于测试;如果测试没问题就可以去掉控制台窗口(使用-w
命令):
pyinstaller -D -w main.py
给可执行文件添加图标(使用-i
命令):
pyinstaller -D -w -i icon.ico main.py
最后得到的dist
文件夹如下,大小90.5MB,对于一个功能简单的小程序而言还是比较大的
压缩可执行文件(可选,不需要压缩这段跳过)
使用upx压缩可执行文件。注意刚刚pyinstaller打包的过程中输出日志中有UPX is not available
,说明没有安装upx,参考安装upx。
安装之后再次打包,dist文件夹大小39.1 MB。这个时候尝试启动程序出现错误:
参考,报错中有一句:Qt platform plugin could be initialized
,跟Qt platform plugin
有关,注意到在dist\PasswordManager\PyQt5\Qt\
目录下有一个plugins
目录,里面是一些动态链接库,应该跟这个有关。
解决方法:
先关掉upx
,也就是在pyinstaller后加上参数--noupx
,重新运行打包一次,复制一份dist\PasswordManager\PyQt5\Qt\plugins
目录;重新打开upx,再次打包运行,用未压缩版的plugins
目录替换压缩版的,测试后可以正常运行。
如果觉得这样麻烦还可以直接关掉upx,使用upx手动压缩
upx *.dll
upx *.exe
继续减小文件体积
观察发现打包目录下其实有许多我并未用到的Qt库
比如Qt5DBus
、Qt5Qml
、opengl
的库等等,尝试删除这些库,程序依然可以正常运行;
上面两个文件夹似乎只是一些输出信息,删除后不影响程序运行,此外还有dist\PasswordManager\PyQt5\Qt\translations
文件夹中的.qm
文件,用于多语言版本软件更改语言,可以按需保留(我是全都删了)。此时dist文件夹大小26.4MB,仅为最初的1 / 3;如果不用upx应该是60MB左右(如果拿C++ Qt应该可以压缩到10MB以下,不过拿pyqt就图快)。
制作安装程序
下载inno setup,并且安装、汉化(这个可选,汉化是汉化用户安装向导的界面),打开之后选择新建脚本,顺着向导一路填下去即可,最后生成一个脚本,点击编译即可得到安装文件。注意,生成的脚本里面有一行『AppId』,这个需要记下
后续版本的软件中填写这个AppId,安装文件在安装时会默认覆盖之前的版本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)