cx_Freeze打包含numpy的Python程序遇递归深度超限问题求助
解决cx_Freeze打包numpy引发的RecursionError问题
1. 直接增加递归深度(类似PyInstaller的.spec方式)
当然可以像PyInstaller那样调整递归深度,直接在setup.py最顶部加上递归深度修改代码就行,这能直接绕过numpy编译时的递归溢出问题:
import sys sys.setrecursionlimit(5000) # 要是还报错可以继续调高,比如设为10000
加完之后再导入cx_Freeze的相关模块。
2. 调整cx_Freeze的打包配置
除了改递归深度,还可以通过调整打包参数来规避问题:
- 不要把numpy放进压缩包:把
zip_include_packages里的"numpy"移除,同时显式指定打包numpy包,避免压缩时触发递归逻辑:build_exe_options = { "includes": ["tkinter", "matplotlib", "pyvisa", "PIL", "cmath", "sympy", "scipy", "numpy"], "zip_include_packages": ["encodings", "PySide6"], "packages": ["numpy"] } - 排除numpy的非必要子模块:如果还是有问题,可以尝试排除numpy里递归较深的测试、工具类子模块(前提是你的程序不用这些):
"excludes": ["numpy.testing", "numpy.distutils"]
3. 升级cx_Freeze版本
旧版cx_Freeze对numpy的递归处理存在bug,直接升级到最新稳定版大概率能解决问题:
pip install --upgrade cx_Freeze
内容的提问来源于stack exchange,提问作者Norronas
相关产品推荐
相关产品推荐

