PyInstaller开发版仍出现递归深度超限错误求助(Python3.6.4)
我之前也碰到过一模一样的情况!在Python 3.6.x版本搭配PyInstaller的时候,递归深度超限的问题确实挺棘手的,哪怕装了最新开发版也可能踩坑。下面分享几个亲测有效的解决思路,你可以挨个试试:
临时调整Python递归深度上限
这是最直接的应急方案,你可以在自己的主脚本最顶部加入这段代码,把递归深度调高:import sys sys.setrecursionlimit(10000) # 可根据实际情况调整,比如尝试20000注意别把数值调得太夸张,不然可能触发栈溢出崩溃,建议从10000开始测试,不行再逐步增加。
给PyInstaller核心代码打递归补丁
有时候问题出在PyInstaller自身的代码逻辑里,而非你的脚本。你可以找到PyInstaller安装目录下的utils/hooks/__init__.py文件,定位到get_module_attribute函数,在函数开头添加递归深度调整代码:import sys sys.setrecursionlimit(10000)保存修改后重新打包,不少开发者用这个方法解决了Python 3.6下的兼容问题。
降级Python到3.5.x稳定版
这是比较彻底的解决方案,因为Python 3.6的递归机制和3.5存在差异,PyInstaller在3.5版本下的兼容性表现更好。如果你的项目对3.6的特性依赖不高,可以考虑降级到Python 3.5.4这类稳定版本,再重新安装PyInstaller普通稳定版(无需开发版),大概率能彻底解决问题。排查自身代码的递归逻辑
先排除是自己脚本的问题:单独运行你的Python脚本,看看是否会触发RecursionError。如果脚本本身运行正常,那才是PyInstaller的兼容问题;如果脚本本身就报错,那得先修复自己代码里的递归逻辑(比如不小心写了无限递归,或者第三方库的嵌套调用过多)。
内容的提问来源于stack exchange,提问作者Benjamin Levy

