cx_Freeze 6.6搭配WinPython打包出现递归错误是什么原因?
问题说明
你遇到的是WinPython与cx_Freeze 6.6及以上版本的已知兼容性问题。核心原因是WinPython的库路径结构、预装预编译模块的打包方式和官方Python存在差异,cx_Freeze 6.6重构了依赖扫描逻辑,递归遍历WinPython的依赖链时会触发递归深度超限。
解决方案
- 调整递归深度限制
在setup.py文件最开头添加递归深度配置,提高递归上限避免触发报错,示例代码:import sys sys.setrecursionlimit(10000) # 后续保留原有的setup.py代码 - 优化依赖扫描规则
在build_exe_options中添加excludes配置,排除无需打包的冗余模块,减少扫描范围,修改后的配置示例:build_exe_options = {"packages": ["os","numpy","pandas","ezdxf","tkinter"], "excludes": ["unittest", "pytest", "tkinter.test", "pandas.tests", "numpy.tests"], 'include_files':[ os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'), os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll'), os.path.join(os.getcwd(),'GABARITS/Gabarit_46.dxf'), os.path.join(os.getcwd(),'index.ico')] } - 降级cx_Freeze版本
卸载当前高版本cx_Freeze,安装兼容性更好的6.5.3版本,执行命令:pip install cx_Freeze==6.5.3
该版本和WinPython3.8/3.9适配性良好,不会触发递归错误。 - 精简WinPython路径配置
打开WinPython安装目录下python-xxx.amd64\Lib\site-packages\winpython.pth文件,注释掉项目用不到的额外库路径,减少cx_Freeze的扫描路径范围。
内容的提问来源于stack exchange,提问作者BruDuv
相关产品推荐
相关产品推荐

