Skip to content

解决导入Gensim时的scipy.linalg.triu导入错误

问题描述

当尝试导入 Gensim 库时,您可能遇到以下错误:

ImportError: cannot import name 'triu' from 'scipy.linalg'

根本原因是 SciPy v1.13+ 移除了 triutritril 等函数(这是 SciPy 官方已弃用的功能),而您当前安装的 Gensim 版本仍依赖这些旧函数。错误通常发生在以下环境组合:

  • SciPy ≥ 1.13
  • Python ≥ 3.10
  • Gensim ≤ 4.x

解决方案

通过降级 SciPy 到兼容版本可立即解决该问题:

方法 1: 使用 pip 降级 SciPy

推荐方案

适用于所有 Python 环境(包括 virtualenv)

bash
# 安装兼容的 SciPy 版本
pip install scipy==1.10.1  # 完全兼容版本
# 或
pip install scipy==1.12.0  # 次选兼容版本

方法 2: Anaconda 用户

注意事项

若初始通过 conda 安装,避免混用 pip 管理依赖

bash
conda install "scipy<1.13"  # 安装低于 1.13 的最新版本

解决方案说明

方案适用场景原理说明
scipy==1.10.1所有环境(首选最稳定版本)确定兼容 Gensim 的最终版本
scipy==1.12.0需要较新次要版本的环境部分功能更新但保留 triu 函数
scipy<1.13Anaconda 环境保持 conda 依赖树一致性

预防措施

bash
# 创建隔离的虚拟环境(推荐)
python -m venv gensim_env
source gensim_env/bin/activate  # Linux/macOS
gensim_env\Scripts\activate    # Windows

# 在虚拟环境中安装固定版本
pip install scipy==1.10.1 gensim

未来兼容性说明

长期解决方案

此问题是 临时修复。最终需等待 Gensim 官方更新适配新版 SciPy:

  1. 关注 Gensim GitHub Issues
  2. 升级到未来支持 SciPy ≥1.13 的 Gensim 版本

通过上述方案降级 SciPy 后,即可正常导入和使用 Gensim 库,同时保持环境稳定性。