
本文详解因 scipy 1.12.0 版本移除 `scipy.interpolate.interp` 导致 pycaret 分类模块(`from pycaret.classification import *`)触发 importerror 的根本原因,并提供兼容性修复方案。
PyCaret 是一个广受欢迎的低代码机器学习库,其 pycaret.classification 模块在内部依赖 SciPy 的插值功能。然而,自 SciPy 1.12.0 版本(2023年12月发布)起,scipy.interpolate.interp 函数已被正式弃用并彻底移除——该函数早在 SciPy 1.10.0 中就已标记为 deprecated,而 PyCaret(尤其是 3.0.x 及更早稳定版本)尚未适配这一变更,仍尝试直接导入 interp,从而引发如下典型错误:
from pycaret.classification import * # ImportError: cannot import name 'interp' from 'scipy'
该问题并非由环境损坏或安装不全导致,而是明确的跨版本 API 不兼容问题。interp 原为 scipy.interpolate 子模块中的一个便捷封装(实际调用 np.interp),现已被开发者建议使用 scipy.interpolate.interp1d 或原生 numpy.interp 替代。但 PyCaret 当前版本未同步更新此调用逻辑。
✅ 推荐解决方案(即时生效,兼容性强)
降级 SciPy 至最后一个包含 interp 的稳定版本 —— scipy==1.11.4(发布于 2023年10月,是 1.11.x 系列最终维护版):
pip install scipy==1.11.4 --force-reinstall
? 验证是否修复: 运行 python -c “from scipy.interpolate import interp; print(‘OK’)” 应无报错;再尝试导入 PyCaret 分类模块即可正常工作。
⚠️ 注意事项与进阶建议
- 避免使用 –upgrade 全局升级 SciPy:若项目中还依赖其他科学计算库(如 statsmodels、scikit-learn),盲目升级可能引发连锁兼容问题。
- 长期策略:升级 PyCaret:PyCaret 3.2.0+(2024年中起)已逐步移除对 interp 的硬依赖。建议在条件允许时升级至最新稳定版:
pip install --upgrade pycaret升级后可安全使用 SciPy ≥1.12.0。
- 临时绕过(仅调试用):如需快速验证而非生产部署,可手动注入兼容性补丁(不推荐长期使用):
# 在导入 PyCaret 前执行 import numpy as np import scipy.interpolate scipy.interpolate.interp = np.interp
总结而言,该错误是典型“上游库 API 演进而下游未及时跟进”的案例。精准锁定版本依赖、按需降级而非盲目升级,是解决此类问题最稳健的工程实践。 建议将 scipy==1.11.4 显式写入 requirements.txt,确保团队环境一致性。