之前写过几篇关于Pyinstaller打包的入门和重点常见Bug解决的文章,见python 打包成可执行文件双击运行闪退终极解决方案、Python生成.exe文件亲测实践教程(初级+进阶,含资源文件程序的打包等(详见文章列表)

之前的文章可以解决Python程序打包过程中的绝大多数针对性的技术问题,这篇文章主要分享一些使用Pyinstaller打包python程序过程中能够节约时间,减少问题出现几率,方便调试的小技巧,全部都是笔者在多次的打包经验的总结,不会很深入详细讲解使用原理细节,主要是讲解程序打包的各个阶段使用参数选择技巧:

1、打包之前

尽量精简需要使用到的项目文件层级结构,可以减少问题出现的概率,因为pyinstaller在打包的时候需要将程序涉及到的所有文件包含进去,所以打包的时候使用的结构越简单出现奇奇怪怪的错误的几率就会减小

如,这个是一个PyQt5实现GUI的项目,原始的工程结构如下,其中包含了一些前期程序整合合并之前各功能单元的单独代码目录,以及一些程序涉及到的文件,还有虚拟环境的目录

Python 工程打exe 一运行就闪退 为什么python生成exe程序闪退_解决方案


但是实际上,程序只需要使用到如下的代码,其中对于PyQt部分,对于main文件来说只需要ui_mwin.py文件而不需要.ui以及.qrc文件,.ui和.qrc只是让pyuic生成.py文件的

Python 工程打exe 一运行就闪退 为什么python生成exe程序闪退_python_02


打包的时候,将需要的文件放到了改虚拟环境下的一个单独的目录中(框住的部分是打包之后生成的)

Python 工程打exe 一运行就闪退 为什么python生成exe程序闪退_Python_03

2、初次打包

然后选用如下命令进行打包,注意需要在该项目对应的虚拟环境下执行指令:pyinstaller -D -w -i .\m.ico .\main.py 参数选用说明:
1、-D 其实无所谓 也可以-F成一个单独的EXE 只是打包成一个单独的exe运行速度会慢点,个人感觉前期自己测试还是需要快一些比较好,不需要考虑到迁移的便捷性,所以就打包成了文件夹的格式
2、-w 最开始使用-w或者是--noconsel不显示CMD窗口,便于发现无法运行的问题原因,具体为什么可以便于发现打包问题,参考这篇文章:python 打包成可执行文件双击运行闪退终极解决方案 比如我此次打包之后对于XGBoost无法使用的报错,针对性搜索得到解决方案,修改了.spec文件,然后pyinstaller ./main.spec重新生成exe就解决了问题,整个解决过程就很顺利

3、成功打包之后前期测试

成功打包之后,初期肯定是要测试基本功能,此时不使用-w 参数,需要显示黑框框,便于看到输出,辅助判断程序的实际运行情况,因为在加上GUI之前的程序中大家在IDE中调试程序看到都是依赖print的。当然也可以写道日志中,不过个人觉得没有cmd方便

4、终极打包

最终打包成单个exe的程序:pyinstaller -F -w -i .\m.ico .\main.py 这个就看个人需要了,全面的参数使用见Python生成.exe文件亲测实践教程(初级+进阶,含资源文件程序的打包

pyinstaller打包总是容易出现一些奇奇怪怪的问题,个人是希望在一开始的使用流程参数选择上进行一定的优化和策略选择,有效避免后续的问题出现。
以上是个人的一些小小经验技巧总结,以便日后自己再次使用Pyinstaller的时候复用,节省时间,当然也希望可以对大家有所启发,如果有任何问题欢迎一起探讨!