※この記事は、個人技術ブログ CodeArchPedia.com の技術メモ(要約)です。
データ分析プロジェクトで scipy を触っていると、突然の ImportError に遭遇しました。特に、gensim などの計算ライブラリと組み合わせている場合に発生しがちで、最初は環境設定ミスかと思い込み、時間を浪費しました。この問題は、ライブラリの進化に伴う依存関係のズレが主な原因です。
何が起きたか(課題)
大規模なデータ処理パイプラインを動かそうとしたとき、以下のエラーが頻発しました。
ImportError: cannot import name 'triu' from 'scipy.linalg'-
scipyのバージョンアップが原因で、古いコードが参照していた関数が見つからない。 -
gensimなど、依存ライブラリが期待するscipyバージョンと、実際にインストールされているバージョンが食い違っている。 - ビルドやデプロイ時に再現され、開発環境との差分に悩まされる。
どう解決したか(概要)
この依存関係の地獄から抜け出すために、環境とライブラリのバージョンを強制的にクリーンアップするアプローチを取りました。
まず、システム環境を汚さないために、新しい仮想環境(venvなど)を構築し直しました。これが鉄則です。
次に、エラーの直接の原因である scipy と、依存元である gensim の両方を最新バージョンにアップグレードしました。これは pip install --upgrade scipy gensim コマンドで実行しました。
ほとんどのケースでこの更新で解決しましたが、もしそれでダメな場合は、特定のバージョン(例: scipy==1.10.1 と gensim==4.3.2)を特定し、requirements.txt に明記して固定する戦略をとりました。
また、根本解決として、今後は Poetry や Pipenv といったモダンな依存管理ツールを導入し、ロックファイルを必ず利用するように方針転換しました。
効果(Before/After)
対策を講じる前は、特定のライブラリを実行するたびに環境の再構築が必要でしたが、バージョンを明確に固定し、依存管理ツールを導入したことで、環境再現性が劇的に向上しました。
| 項目 | 対策前(手動依存) | 対策後(ツール管理) |
|---|---|---|
| エラー発生率 | 高(環境依存) | ほぼゼロ |
| 環境構築時間 | 30分〜1時間(試行錯誤) | 5分以内(poetry install) |
| バージョン固定 | 不完全(requirements.txtのみ) | 確定的(lockファイル生成) |
🚀 詳細な設定とコードはこちら
具体的なWAFのルール設定や、より詳細なログ解析データは元のブログで公開しています。