Skip to content

Gensimインポート時のImportError: 'triu' from 'scipy.linalg' エラーの解決法

問題の概要

PythonでGensimライブラリをインポートしようとすると、以下のエラーが発生します:

python
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  ...
  File "/usr/local/lib/python3.10/dist-packages/gensim/matutils.py", line 20, in <module>
    from scipy.linalg import get_blas_funcs, triu
ImportError: cannot import name 'triu' from 'scipy.linalg' (/usr/local/lib/python3.10/dist-packages/scipy/linalg/__init__.py)

エラーの根本原因

このエラーは、Scipyバージョン1.13以降でtriu, tril, tri関数が非推奨となり、Gensimの特定のバージョンがこれらの関数に依存しているために発生します:

The scipy.linalg functions tri, triu & tril are deprecated and will be removed in SciPy 1.13.

SciPy 1.11.0 Release Notes § Deprecated features

解決方法

方法1: Scipyの互換バージョンをインストール(pipユーザー向け)

Scipyのバージョンを1.13未満にダウングレードします。以下のコマンドで問題解決できます:

bash
pip install scipy==1.10.1

代替バージョン

Scipy 1.12.0でも問題なく動作します:

bash
pip install scipy==1.12.0

方法2: Anaconda環境での解決法

conda環境を使用している場合、以下のコマンドで互換バージョンをインストールします:

bash
conda install "scipy<1.13"

重要注意点

Anaconda環境ではpipcondaを混在させると環境破損の原因となります:

Once pip is used to install software into a conda environment, conda will be unaware of these changes and may make modifications that would break the environment.

Anaconda公式ドキュメント

根本解決のための追加対策

依存関係の固定

環境安定化のためにライブラリバージョンをrequirements.txtに固定:

gensim==x.x.x
scipy==1.12.0

仮想環境の活用

プロジェクトごとに独立した環境を作成:

bash
python -m venv my_project_env
source my_project_env/bin/activate  # Linux/Mac
.\my_project_env\Scripts\activate   # Windows

Gensimのアップグレード検討

長期サポートのため、常に最新版Gensimの使用を確認してください:

bash
pip install --upgrade gensim

まとめ

ImportError: cannot import name 'triu' from 'scipy.linalg'エラーは、Scipyの後方互換性が失われた変更が原因です。Scipyを1.13未満のバージョン(1.10.1または1.12.0)にダウングレードすることで解決します。環境管理ツール(conda/pip)の適切な使用とバージョン固定を徹底し、将来の非互換問題を予防しましょう。