GitHubで見つけた面白そうなAIプロジェクト。「よし、さっそく自分のPCでも動かしてみよう!」と意気込み、READMEの通りに pip install -r requirements.txt を叩いた直後、コンソールが真っ赤に染まった経験はありませんか?
RuntimeError: A NumPy version >=1.16.5 and <1.23.0 is required for this version of SciPy
「え?NumPyならもう最新版が入ってるけど?」と思ってバージョンを確認すると、確かに 1.24.0。指定されたバージョンより新しすぎるため、他のライブラリ(SciPy)が「対応できない!」と悲鳴を上げているのです。
この現象こそが、Pythonプログラマー全員が通る洗礼「依存地獄(Dependency Hell)」です。
本記事では、この地獄から抜け出し、二度と環境構築で1日を無駄にしないための「仮想環境の正しい切り分け方」と「Poetry/Dockerによるパッケージ管理の極意」を徹底解説します!
1. 「最新版なら良い」という初心者の罠
ソフトウェアの世界では「常に最新版が最強」とは限りません。特に機械学習やデータサイエンスの分野では、PyTorch、TensorFlow、NumPy、Pandasといった巨大なライブラリが、お互いに複雑に絡み合って(依存し合って)動いています。
ある日、NumPyの開発チームが「ちょっと内部の計算式の書き方(API)を変えよう!」とアップデートしたとします。すると、その古い書き方に依存していたSciPyやscikit-learnは、最新のNumPyを呼び出した途端に「そんな関数は知らない!」とクラッシュしてしまうのです。
これが、エラーメッセージにある >=1.16.5 and <1.23.0 という指定の正体です。
「新しすぎてもダメ、古すぎてもダメ。このピンポイントのバージョンじゃないと私は動けないの!」という、ライブラリ側の切実な叫びなのです。
2. 絶対にやってはいけない「システム全体の汚染」
このエラーを見た初心者がやりがちな最悪の行動が、「システム全体のPython環境(グローバル環境)で、無理やりライブラリをダウングレード・アップグレードしてしまうこと」です。
# 【絶対にやってはいけないコマンド】
# PC全体のNumPyのバージョンを無理やり下げてしまう
pip install numpy==1.22.4これをやるとどうなるか?
今動かそうとしている「プロジェクトA」は動くようになるかもしれません。しかし、明日あなたが仕事で使っている「プロジェクトB」を開いたとき、プロジェクトBが必要としていた最新のNumPyが消え去っているため、今度はそちらが全て動かなくなります。
これこそが真の「地獄」の始まりです。プロジェクトを行き来するたびに再インストールを繰り返す羽目になります。
3. 地獄からの脱出:仮想環境(Virtual Environment)の構築
この問題を根本から解決するプロの唯一の手段が「プロジェクトごとに独立したPythonの部屋(=仮想環境)を作る」ことです。
「プロジェクトAの部屋には古いNumPy」「プロジェクトBの部屋には新しいNumPy」という風に、本棚を完全に分けてしまうのです。
Pythonには標準で venv という強力な仮想環境ツールが組み込まれています。
# プロジェクトのフォルダに移動
cd my_cool_project
# 1. 「.venv」という名前で空っぽの新しい部屋(仮想環境)を作る
python3 -m venv .venv
# 2. その部屋に入る(アクティベートする)
# Mac / Linux の場合
source .venv/bin/activate
# Windows の場合
# .\.venv\Scriptsctivate
# 3. 部屋に入った状態でインストール!
# これで、どんなバージョンを入れてもPC本体や他のプロジェクトには一切影響が及ばない!
pip install -r requirements.txtまとめ:環境構築力はエンジニアの戦闘力
「A NumPy version... is required」というエラーは、実はバグではありません。
むしろ、「環境が混ざってプログラムが予測不能な動きをする前に、インストールを止めてくれた親切な警告」なのです。
中級者以上になると、venv に加えて、より高度にバージョン同士のパズルを解いてくれる Poetry というツールや、OS(Linux)まるごと仮想化してしまう Docker を多用するようになります。
「エラーが出たからStack Overflowのコードを適当にコピペして実行する」という状態から卒業し、Pythonのパッケージ管理やDockerの仕組みを専門書で体系的に学ぶことが、ストレスフリーな開発への近道です!


コメント