手把手教你将pyqt程序打包exe
0x00 环境说明
- window
- PyQt 5.13.1
- python 3.7
ps: PyQt 5.13.1 以下的请更新,否则打包后可能会出现缺少PyQt的dll等问题…
更新包(模块)的命令:
更新到指定版本:
pip install PyQt5==5.13.1
更新到最新版本:
pip install --upgrade PyQt5
在更新PyQt5后,可能出现与PyQt其他相关包不兼容的问题(在cmd中更新完PyQt5后,如果出现了其他包不兼容,它会提示[incompatible]),此时需要把不兼容的包也更新一下。
下方是我的一些包的的版本作为版本更新的参考。
Tip:
对于多个py文件以及带有关联资源的要打包成exe,我个人觉得项目文件结构也很重要。
下面我将用两个示例来演示。
0x01示例1(没有其他外部资源文件)
项目文件结构和运行效果如下图所示:
建议把要打包的项目复制一份出来打包
(可以把用不上的文件删除)
项目文件结构越简单,打包越不容易出错~
找到项目文件夹,并整理一下。
按住shift 并单击鼠标右键,即可在此处打开cmd
1. 单文件打包
单文件打包会将整个项目和相关依赖都打包进一个exe,
此时一般只需要发送exe文件给别人即可正常运行。
它的缺点是:启动相对另一种打包方式更缓慢。
输入命令:
pyinstaller -F -w -i .\windowIco1.ico .\imageBrowser.py
参数解释:
-F :单文件打包
-w:不要console(取消类似于cmd的黑框框)
-i:后面接图标地址(图标一定要是标准的ico格式)
我用的是:.\windowIco1.ico
最后面接的是要打包的程序:.\imageBrowser.py
运行命令成功后:
会生成三个文件夹和一个.spec
文件,前两个文件夹是没用的(建议删除~)。exe在dist文件夹中。
双击运行exe:
可以看的成功打包了~
如果双击后出现闪退(太快看不清楚错误原因),说明打包出现了问题。
为了知道具体原因:
需要在cmd中运行这个exe。
如果运行不成功,此时就会显示错误原因。
错误原因很多,也不是固定的,根据提示去对症下药,更改好再次打包即可。
.spec文件简单说明:
它是打包的配置脚本,在输入打包命令后生成,在构建exe时会运行这个配置脚本。所以如果一次打包后,我们对结果不满意,可以修改.spec
文件,然后输入:pyinstaller xxxx.spec
重新构建exe。
比如我们一开始忘记加ico了,或者需要更换ico,可以修改.spec中icon的文件路径…(后面再详细讲.spec里的具体配置)
2. 单文件夹打包
只需要将dist下的文件夹生成压缩包发给别人,别人解压,找到运行的exe即可运行程序。
相比于单文件打包命令,
只是将单文件打包命令中的-F
换成-D
pyinstaller -D -w -i .\windowIco1.ico .\imageBrowser.py
同样生成了三个文件夹和一个.spec文件,也是只有dist文件夹里的东西有用。
不同的是:在dist文件夹里生成了一个文件夹。
这种类型的打包,我们平时也十分常见。
它启动速度相对比较快,但是不方便我们查找。而且需要我们格外小心,不要误删或者移动了里面的文件。
双击运行,也没有问题:
出于篇幅原因,将示例2和.spec文件详细介绍放在下一篇。
下一篇见~