pyinstaller打包多文件项目时的常见问题及处理(openpyxl,pygame等)

1 篇文章 0 订阅
1 篇文章 0 订阅

pyinstaller打包多文件项目时的常见问题及处理

以下内容为本人使用pyinstaller打包多文件项目时遇到过的问题,统一记录方便以后自己查阅,同时也欢迎大家指正。

1. 问题一:

RecursionError: maximum recursion depth exceeded

情况1:文件所需库中包含openpyxl
首先查看一下openpyxl的版本,pyinstaller打包新版本openpyxl很大可能会出现以上超出最大递归深度的报错,这时候需要在cmd中降openpyxl的版本(可能新版的代码优化程度还不如老版吧…个人猜测):

pip uninstall openpyxl
pip install openpyxl==2.3.5

我这里用的是2.3.5版本,好像2.3.4也可以,欢迎大家把能使用的版本留言供参考,值得大家注意的是老版的部分语法和新版有所不同,降版后记得修改代码,否则会报错,例如:

wb.cell(1,1,value=1)#新版单元格赋值操作
wb.cell(row=1,colunm=1).value=1#2.3.5版赋值操作
#另外2.3.5版本没有wb.close()的用法,不过我直接删除后好像对程序没什么影响

情况2:不含openpyxl的其他情况
这时候就得修改python对最大递归深度的限制了,参考S.O.上的一篇回答:回答原文
简单总结一下:
1.打包后出现深度超出报错后找到文件同文件夹下的.spec文件
2.在.spec文件开始处添加以下代码:

import sys
sys.setrecursionlimit(5000)

3.对.spec文件进行封装:

pyinstaller filename.spec

2.问题二:

打包完成,但Failed to execute script xxx
一般来说只要在代码中import了的库都会打包进去(不过也有例外,可以查查人家的解决方案,讲的很详细这里就不赘述了),大部分原因是自己写的依赖文件没有放到同文件夹下或指定位置,如excel、txt、自己写的.py文件等,网上有推荐去打包生成的build文件夹里看warnname.txt文件,我查了一下这个文件发现确实缺少文件都有记录,但它还提示我有很多奇奇怪怪的库缺失,个人猜测是部分引用过的.py文件中使用的库未被打包,不过这样操作就有些繁杂了。可以直接在IDE中运行你将打包的程序(注:是打包路径下的程序),这时候IDE报错缺哪些文件就把它们放到同文件夹下,基本上缺的都是自己做的依赖文件,IDE运行成功后再次打包,成功。
此外在打包多文件系统时建议使用pyinstaller -D指令,-F指令可能导致import的其他文件所需的依赖库没被打包进来。

3.问题三:

使用pygame库的.py文件的调用:
一般来说单独的pygame文件直接打包就行了,但在多文件程序中可能存在多个用pygame编写的模块,最开始我尝试在主GUI文件中直接import调用各个pygame的main函数,但运行一个pygame文件后关闭准备打开下一个模块时发现程序直接终止了,通过反复调试发现是pygame中退出程序使用了sys.exit()指令,该指令会使整个程序退出,我尝试用break退出循环,游戏文件仍然报错,最后在主GUI程序中用os.system()解决,缺点是打开反应速度偏慢。
恳请大佬赐教更优的pygame文件的调用方式的(;´д`)ゞ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值