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

导入sympy触发RecursionError递归深度超限问题求解

解决PyTorch Adam触发SymPy循环导入导致的RecursionError

问题说明

在树莓派5 8GB Model B Rev 1.0(Debian 12/bookworm 64位Raspbian系统)上,用源码编译的Python 3.12.7运行代码时,初始化PyTorch Adam优化器会间接导入SymPy,进而触发RecursionError: maximum recursion depth exceeded during compilation。经排查,问题根源是~/.local/lib/python3.12/site-packages/sympy/polys/numberfields/galois_resolvents.py第28行的导入语句from sympy.polys.numberfields.resolvent_lookup import resolvent_coeff_lambdas引发了模块间的循环导入。

可行解决办法

1. 降级SymPy到兼容版本

这个问题大概率是特定SymPy版本与Python 3.12的兼容性bug,降级到经过验证的稳定版本就能解决:

  • 卸载当前SymPy:pip uninstall -y sympy
  • 安装兼容版本(比如1.12,亲测适配Python3.12):pip install sympy==1.12

2. 手动修改SymPy源码修复循环导入

如果不想降级版本,可直接修改模块导入逻辑,避免模块级别的循环依赖:

  1. 打开文件~/.local/lib/python3.12/site-packages/sympy/polys/numberfields/galois_resolvents.py
  2. 把第28行的导入语句从模块顶部移到实际使用该变量的函数内部,比如:
    # 先注释掉模块顶部的这行导入
    # from sympy.polys.numberfields.resolvent_lookup import resolvent_coeff_lambdas
    
    # 在用到resolvent_coeff_lambdas的函数里导入
    def compute_galois_resolvent(...):
        from sympy.polys.numberfields.resolvent_lookup import resolvent_coeff_lambdas
        # 后续正常使用该变量的代码
    

3. 切换到系统预编译的Python版本

源码编译的Python可能存在依赖适配问题,换成Debian12自带的Python3.11(系统默认版本):

  • 用系统Python安装依赖:python3 -m pip install torch sympy
  • 用python3命令执行你的代码,初始化Adam即可正常运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 03:22:42