🤖

M1 MacでのPythonデータサイエンス環境構築:NumPy/PandasのビルドエラーとMiniforge活用術

に公開

はじめに

本稿は、特定の環境下で発生したPythonデータサイエンスライブラリのインストール時におけるビルドエラーと、その解決策を記録する技術的備忘録である。

対象環境

  • マシン: MacBook Pro (14-inch, M1 Pro)
  • OS: macOS Sequoia 15.6
  • シェル: Zsh (macOS標準)
  • パッケージマネージャー: Homebrew 4.3.5
  • Python: 3.11.8 (pyenv 2.4.0経由でインストール)

上記環境において、pyenvでインストールしたPython 3.11.8と標準のvenvモジュールで仮想環境を構築し、pipを用いてNumPyやPandasをインストールしようとした際に、C拡張モジュールのビルドエラーが発生した。本稿ではこの問題の原因と、Miniforgeを用いた解決策を記述する。

原因

問題の根本的な原因は、M1 Proチップのarm64アーキテクチャに起因する。

pipはPython Package Index (PyPI) からパッケージをダウンロードする。データサイエンス関連のライブラリ、特にNumPy、Pandas、TensorFlowなどは、パフォーマンス向上のためにCやFortranで記述されたコードを含んでいる。

PyPIにarm64アーキテクチャ向けにビルド済みのバイナリパッケージ(wheelファイル)が存在しない場合、pipはソースコードからパッケージをローカルでコンパイルしようと試みる。

このコンパイルプロセスには、特定のバージョンのコンパイラ(GCC、Clang)や、BLAS、LAPACKといった数値計算ライブラリ、Fortranコンパイラなど、多数のビルド依存関係が必要となる。これらがシステムに正しくインストールおよび設定されていない場合、ビルドは失敗する。

解決策

pyenvvenvpipに依存するのではなく、arm64アーキテクチャにネイティブ対応したパッケージ管理システムであるMiniforgeを導入することで、この問題を解決する。MiniforgeはCondaの最小インストーラであり、conda-forgeチャネルを通じてarm64に最適化されたビルド済みバイナリパッケージを提供する。

1. Miniforgeのインストール

Homebrewを用いてMiniforgeをインストールする。

brew install miniforge

インストールが完了すると、conda initが実行され、シェルの設定ファイル(この環境では ~/.zshrc)にCondaを初期化するための設定が自動的に追記される。

# ~/.zshrc に追記される内容の例
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/opt/homebrew/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/opt/homebrew/etc/profile.d/conda.sh" ]; then
        . "/opt/homebrew/etc/profile.d/conda.sh"
    else
        export PATH="/opt/homebrew/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<

設定を有効にするため、ターミナルを再起動するか、以下のコマンドを実行する。

source ~/.zshrc

2. Conda仮想環境の作成と有効化

condaコマンドを使用して、データサイエンス用の新しい仮想環境を作成する。Pythonのバージョンは、前提環境に合わせて3.11.8を指定する。

conda create --name ds-env python=3.11.8

作成後、以下のコマンドで環境を有効化(アクティベート)する。

conda activate ds-env

プロンプトの先頭に(ds-env)と表示され、仮想環境が有効になったことが確認できる。

3. データサイエンスライブラリのインストール

有効化した仮想環境内で、conda installコマンドを用いて必要なライブラリをインストールする。conda-forgeチャネルを指定することで、コミュニティがメンテナンスしている豊富なarm64対応パッケージを利用できる。

conda install -c conda-forge numpy pandas tensorflow

このコマンドは、ソースからのコンパイルを必要とせず、arm64アーキテクチャ向けにビルド済みのNumPy、Pandas、TensorFlow、およびそれらの依存関係にあるライブラリを自動的に解決し、インストールする。

4. インストールの確認

インストールが正常に完了したことを確認するため、conda listコマンドでパッケージ一覧を表示する。

conda list numpy pandas tensorflow

これにより、指定したライブラリが仮想環境内にインストールされていることが確認できる。

まとめ

M1 (arm64)アーキテクチャのMacにおいて、pipによるデータサイエンスライブラリのインストールは、ビルド依存関係の複雑さから失敗することがある。

この問題に対し、arm64ネイティブのMiniforgeを導入し、condaによるパッケージ管理を行うアプローチは極めて有効である。conda-forgeチャネルを利用することで、ビルド済みの最適化されたバイナリパッケージを安定して導入でき、開発環境の構築を大幅に簡素化・安定化させることが可能となる。

参照

Discussion