关键词
pyinstaller 打包发布 PyQt5项目
打包发布所需环境
1.安装pip
2.安装pyinstaller
3.安装pywin32
打包命令
pyinstaller -F main.py
其中-F为参数,还有一些其他参数,比如:(具体还可以看看这篇文章:Python项目打包发布方法
-F 表示生成单个可执行文件exe(也就是说把所有的依赖包都整合在一起,最后只是得到一个exe文件)
-w 表示去掉控制台窗口,主要针对GUI界面,如果是命令行程序就不需要。可以参考这篇文章:pyinstaller打包发布PyQt5项目遇到的小问题–软件运行有黑框
-i 表示可执行文件的图标 (可以参考这篇文章:pyinstaller打包发布PyQt5项目遇到的小问题–软件运行有黑框 更改打包后的exe图标
问题
打包失败,exe还没有或还不能运行
1.maximum recursion depth exceeded
RecursionError: maximum recursion depth exceeded
意思是:超过最大递归深度
解决:
打包之后会生成一个以spec为后缀的文件,用记事本打开它,在该文件的第二行处添加以下代码
import sys
sys.setrecursionlimit(5000)
然后用pyinstaller打包该spec文件(注意不是原来那个py文件!!)
//这个main.spec请使用自己的文件名
pyinstaller main.spec
补充
看错误的时候一般只看最后的error(红框部分),不用看蓝框部分(个人猜测,这是命令执行时文件的递归路径)
2.编码问题
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position 115: invalid continuation byte
cmd中先输入
chcp 65001
再用pyinstaller命令再打包一次
pyinstaller main.py
打包成功
3.运行exe闪退
1)查看错误信息
在exe所在目录下,点击地址栏,输入cmd,输入命令:.\main.exe
,回车运行就可以看到错误信息
2)根据错误信息进行修改
这里提示我[33360] Failed to execute script label_image
就是说它运行不了label_image.py脚本文件,蓝框中提示找不到文件夹astor下的VERSION文件,用everything找一下astor
补充:
此篇文章介绍的方法,对于我而言,无效。将python脚本文件打包,并解决解决python脚本运行一闪而逝的问题。
他的方法是在py文件中添加
import os
os.system(“pause”)
下图这个是python语法问题(缩进)由于是注释,删掉就行了
打开其所在路径,将该文件复制过去(到exe文件的同级目录下)
我直接把整个astor复制过去
打包成功,exe可以运行,但有一些错误
4. Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
finished with exit code -1073740791 (0xC0000409)
先说明:我之前是可以运行的,但是突然有几次就不能运行,除了以上的错误。我这个软件是调用深度学习的。有时候他甚至会报:(即cuDNN没有初始化成功什么的)
UnknownError (see above for traceback): Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
[[node import/conv/Conv2D (defined at scripts\label_image.py:36) ]]
[[node import/final_result (defined at scripts\label_image.py:36) ]]
[37692] Failed to execute script label_image
一开始不明白,看到这个博主说:“显卡内存不足”,一想,还真有可能,当时电脑运行了很多个软件,卡卡的,尤其是浏览器,开了很多页面。
解决:
修改被调用的py文件,添加以下代码,重新打包运行
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
如果还是不行,重启电脑,不要开太多软件,让电脑休息一下就好了。
写在后面
该软件是用Qt(C++)完成界面,python完成深度学习部分,打包发布太多坑。
看到有人说Qt打包tensorflow很多问题,现在已经弃坑。改用PyQt5,最终打包成功。(有了Qt的基础,学习PyQt5上手很快,强烈推荐。)
参考文章
安装pyinstaller打包发布所需环境
Python打包方法——Pyinstaller
Python项目打包发布方法
pyinstaller打包发布PyQt5项目遇到的小问题–软件运行有黑框 更改打包后的exe图标
pyqt5程序打包成exe文件的步骤和遇到的坑,以及如何更改exe的图标
Pyinstaller打包出现UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xce in position 解决方案
pyinstaller打包exe文件闪退解决方案
finished with exit code -1073740791 (0xC0000409)解决方案