You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Py2exe兼容pywin32方案咨询:递归深度超限错误

解决Py2exe与pywin32兼容的递归深度溢出问题

我之前也踩过py2exe和pywin32兼容的这个坑!那个RuntimeError: maximum recursion depth exceeded in comparison错误确实让人头大,不过亲测几个办法能解决,你可以挨个试试:

  • 手动指定pywin32模块,避免自动递归扫描
    py2exe在自动分析依赖时,对pywin32的部分模块(比如win32api、win32gui)会陷入循环引用的递归扫描,直接触发栈溢出。你可以在setup.py里明确列出需要用到的pywin32模块,不让py2exe去自动追踪它们的依赖链:

    from distutils.core import setup
    import py2exe
    
    setup(
        console=['你的脚本文件名.py'],  # 如果是GUI程序就换成windows=['你的脚本文件名.py']
        options={
            'py2exe': {
                'includes': ['win32api', 'win32gui', 'win32con'],  # 替换成你实际用到的模块
                'skip_archive': True,  # 这个参数能进一步减少递归分析的压力
            }
        }
    )
    

    这样py2exe就不会过度扫描依赖,从根源上减少递归触发的可能。

  • 延迟导入pywin32模块
    如果你在脚本开头就导入pywin32模块,py2exe会立刻启动对该模块的全依赖分析,很容易触发递归。试试把pywin32的导入放到函数内部,或者用动态导入的方式:

    def 需要用到win32的函数():
        import win32api
        # 这里写你的业务代码
    

    或者用动态导入:

    win32api = __import__('win32api')
    

    这样能避开py2exe初始阶段的深度依赖扫描,避免递归溢出。

  • 使用兼容的版本组合
    新版本的pywin32和py2exe可能存在兼容性问题,我当时降级到稳定的旧版本组合就解决了问题。你可以在虚拟环境里安装:

    pip install py2exe==0.6.9
    pip install pywin32==227
    

    这个版本搭配对pywin32的支持很稳定,基本不会出现递归溢出的情况。

如果上面的办法都没效果,也可以考虑换成PyInstaller——它对pywin32的原生支持更好,很少会出现这类递归问题。不过如果一定要用py2exe的话,上面的方法应该能帮你解决。

内容的提问来源于stack exchange,提问作者Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:07:05