导入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源码修复循环导入
如果不想降级版本,可直接修改模块导入逻辑,避免模块级别的循环依赖:
- 打开文件
~/.local/lib/python3.12/site-packages/sympy/polys/numberfields/galois_resolvents.py - 把第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
相关产品推荐
相关产品推荐

