欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用pyinstaller打包发布Qt5项目时遇到的一些问题

程序员文章站 2022-05-28 11:52:29
...

关键词

pyinstaller 打包发布 PyQt5项目

打包发布所需环境

1.安装pip
2.安装pyinstaller
3.安装pywin32

详见此文:安装pyinstaller打包发布所需环境

打包命令

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(红框部分),不用看蓝框部分(个人猜测,这是命令执行时文件的递归路径)
使用pyinstaller打包发布Qt5项目时遇到的一些问题
 
 
2.编码问题

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position 115: invalid continuation byte

cmd中先输入

chcp 65001

再用pyinstaller命令再打包一次

pyinstaller main.py

 
打包成功
使用pyinstaller打包发布Qt5项目时遇到的一些问题

 
3.运行exe闪退
1)查看错误信息
在exe所在目录下,点击地址栏,输入cmd,输入命令:.\main.exe,回车运行就可以看到错误信息
使用pyinstaller打包发布Qt5项目时遇到的一些问题
使用pyinstaller打包发布Qt5项目时遇到的一些问题

2)根据错误信息进行修改
这里提示我[33360] Failed to execute script label_image就是说它运行不了label_image.py脚本文件,蓝框中提示找不到文件夹astor下的VERSION文件,用everything找一下astor
使用pyinstaller打包发布Qt5项目时遇到的一些问题
使用pyinstaller打包发布Qt5项目时遇到的一些问题

补充:
此篇文章介绍的方法,对于我而言,无效。将python脚本文件打包,并解决解决python脚本运行一闪而逝的问题。
他的方法是在py文件中添加

import os
os.system(“pause”)

下图这个是python语法问题(缩进)由于是注释,删掉就行了
使用pyinstaller打包发布Qt5项目时遇到的一些问题

打开其所在路径,将该文件复制过去(到exe文件的同级目录下)
我直接把整个astor复制过去
使用pyinstaller打包发布Qt5项目时遇到的一些问题
 

打包成功,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

使用pyinstaller打包发布Qt5项目时遇到的一些问题
一开始不明白,看到这个博主说:“显卡内存不足”,一想,还真有可能,当时电脑运行了很多个软件,卡卡的,尤其是浏览器,开了很多页面。
 

解决:
修改被调用的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)解决方案