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コンパイラなど、多数のビルド依存関係が必要となる。これらがシステムに正しくインストールおよび設定されていない場合、ビルドは失敗する。
解決策
pyenvとvenv、pipに依存するのではなく、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