手把手教你将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文件详细介绍放在下一篇。

下一篇见~

----》手把手教你将pyqt程序打包成exe(2)

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐