Python 環境構築で SciPy のインストールに失敗する原因と対処法

Claude code

Python 3.13 で wheel が無く、ソースビルドに落ちるケース

Python の環境構築中に、scipy のインストールでエラーになることがあります。

特に新しい Python バージョンを使っている場合、依存パッケージの対応状況によっては、pip が事前ビルド済みの wheel を取得できず、ソースビルドへ切り替わって失敗することがあります。

この記事では、この種のエラーが起きる典型的な原因と、実際に取りやすい対処法を整理します。

よくある症状

環境構築スクリプトや pip install -r requirements.txt 実行中に、次のような流れで失敗します。

  • 仮想環境の作成は成功する
  • 依存パッケージのインストール中に scipy で停止する
  • Preparing metadata (pyproject.toml)meson setup の段階でエラーになる
  • ログ内に gfortranifort などの Fortran コンパイラが見つからないというメッセージが出る

この場合、単純に「pip の不具合」ではなく、依存パッケージのバージョンと Python 本体の組み合わせが噛み合っていないことが多いです。

原因

主な原因は、利用している Python のバージョンに対して、指定している数値計算系ライブラリが古いことです。

たとえば以下のような状況です。

  • Python は 3.13
  • しかし scipynumpypandasmatplotlib などは、ひとつ前の世代のバージョンで固定されている
  • その結果、対象環境向けの wheel が見つからない
  • pip がソースビルドを試みる
  • SciPy 系ではビルド時に Fortran コンパイラが必要になり、ローカル環境に無いため失敗する

重要:
表面的には「Fortran コンパイラが無い」エラーに見えても、根本原因は Python バージョンに対して依存パッケージが古いこと です。

なぜソースビルドで失敗するのか

Python のパッケージには、あらかじめビルド済みの wheel が配布されていることがあります。wheel が使える場合、利用者はコンパイラを意識せずにインストールできます。

しかし、次のような場合は wheel が取得できません。

  • 新しい Python バージョンにまだ対応していない
  • OS やアーキテクチャ向けの wheel が用意されていない
  • 固定したバージョンが古く、配布対象外になっている

wheel が無いと pip はソースからビルドしようとします。その際、SciPy のようなライブラリでは C/C++ だけでなく Fortran コンパイラが必要になることがあり、Windows 環境では特にここで詰まりやすくなります。

対処法

1. 依存パッケージを Python のバージョンに合わせて更新する

もっとも自然な解決策はこれです。

requirements.txt などで固定している以下のようなライブラリを、利用中の Python バージョンに対応したものへ更新します。

  • numpy
  • scipy
  • pandas
  • matplotlib

数値計算系ライブラリは相互依存も強いため、一部だけを上げるのではなく、関連する主要パッケージをまとめて見直すのが安全です。

2. Python のバージョンを下げる

既存プロジェクトで依存関係をあまり動かしたくない場合は、Python 側を下げる方法もあります。

たとえば、プロジェクトが少し前の依存構成で安定しているなら、Python 3.11 や 3.12 に切り替えることで、既存の requirements.txt のまま通ることがあります。

これは次のようなケースで有効です。

  • 本番環境の Python バージョンが既に決まっている
  • 依存更新による副作用を避けたい
  • 一時的にまず動かしたい

3. Fortran コンパイラを導入してソースビルドできるようにする

理論上は可能ですが、一般的には優先度は低めです。

理由は次の通りです。

  • 開発環境構築の手間が大きい
  • OS ごとの差異が大きい
  • チーム開発では再現性が落ちやすい
  • 根本的には「wheel が無い」状態を回避できていない

そのため、特別な事情がなければ、まずは依存更新か Python バージョン調整を優先するのが無難です。

実務上のおすすめ方針

現場で対応するなら、次の順序がわかりやすいです。

パターンA: 新しい Python を使いたい場合

  • Python のバージョンはそのまま
  • requirements.txt の数値計算系依存を対応版へ更新
  • 仮想環境を作り直して再インストール

パターンB: 既存依存をできるだけ変えたくない場合

  • Python を 3.11 または 3.12 など安定版に戻す
  • 既存の依存定義のまま再構築する

再実行時の注意点

一度インストールに失敗した仮想環境は、中途半端な状態になっていることがあります。そのため、修正後は仮想環境を作り直すのが確実です。

たとえば次のような流れです。

既存の venv を削除
新しく仮想環境を作成
pip を更新
requirements.txt を再インストール

こうしておくと、前回失敗時のキャッシュや不整合の影響を受けにくくなります。

補足:
失敗したのが依存解決やビルド段階だけなら、そのまま再実行で通る場合もあります。ただし、バージョン修正を何度か繰り返した後は、仮想環境を作り直したほうが切り分けしやすくなります。

まとめ

Python 環境構築中に SciPy のインストールで失敗する場合、原因は単なるコンパイラ不足ではなく、Python と依存パッケージのバージョン不整合であることが少なくありません。

特に新しい Python バージョンでは、次の流れが起こりがちです。

  • 古い scipy などでは wheel が無い
  • pip がソースビルドに落ちる
  • Fortran コンパイラ不足で失敗する

対処としては、次のどちらかが基本になります。

  • 依存パッケージを Python 対応版へ更新する
  • Python のバージョンを安定している世代へ下げる

環境構築エラーに見えても、実際には「依存バージョンの設計」の問題であることが多いため、ログの最後だけでなく、どのパッケージがどの Python 版に対応しているかを見るのが解決の近道です。

コメント

タイトルとURLをコピーしました