🙌

M1 MacでPythonの特定のライブラリ(例: TensorFlow)がインストールできない場合の対処法

に公開

はじめに

Apple Silicon (M1/M2)搭載のMac環境において、特定のPythonライブラリをpipでインストールしようとすると、ビルドエラーや「Could not find a version that satisfies the requirement ...」といったエラーが発生する場合がある。本稿は、この問題の原因と解決策をまとめた技術的な備忘録である。

  • 環境例
    • OS: macOS Sequoia 15.6
    • Chip: Apple M1
    • Python: 3.11.8 (pyenv 2.4.0経由でインストール)

原因

この問題の主な原因は、プロセッサのアーキテクチャの不一致にある。

  1. アーキテクチャの違い:
    M1/M2チップはARM64アーキテクチャを採用している。一方、多くの既存のソフトウェアやPythonライブラリのビルド済みバイナリ(Wheel)は、Intelプロセッサ向けのx86_64アーキテクチャを前提として配布されてきた。

  2. ARM64対応パッケージの不足:
    pipは、実行環境のアーキテクチャ(この場合はARM64)に合致するパッケージを探す。しかし、インストールしようとしているライブラリやその特定バージョンがARM64ネイティブのビルド済みバイナリを提供していない場合、pipはソースコードからビルドを試みる。その際、依存関係の不足やソースコードの非互換性によりビルドに失敗し、インストールエラーとなる。

TensorFlowの場合、バージョン2.5以降、Appleはtensorflow-macosというApple Siliconに最適化されたパッケージを別途提供している。pip install tensorflowでは、このパッケージが正しく選択されないことがある。

解決策

以下に、いくつかの解決策を優先度順に記述する。

解決策1: Apple Siliconネイティブ版を直接インストールする (推奨)

多くの主要なライブラリは、ARM64ネイティブ対応版をリリースしている。TensorFlowに関しては、Appleが提供するtensorflow-macosパッケージと、GPUアクセラレーションを有効にするためのtensorflow-metalプラグインをインストールすることが公式に推奨されている。

  1. 既存のTensorFlowをアンインストール
    もし古いバージョンや通常のtensorflowパッケージがインストールされている場合は、まずそれを削除する。

    pip uninstall tensorflow
    
  2. tensorflow-macostensorflow-metalをインストール
    以下のコマンドで、Apple Siliconに最適化されたパッケージをインストールする。

    pip install tensorflow-macos
    pip install tensorflow-metal
    

    これにより、M1/M2チップのGPUを活用した高速な計算が可能になる。

解決策2: Miniforge (conda) を利用した環境構築

データサイエンスや機械学習のプロジェクトでは、condaによる環境管理が有効である。特に、conda-forgeコミュニティが提供するMiniforgeは、ARM64ネイティブのconda環境を構築するためのインストーラであり、M1/M2 Macでの利用に適している。

  1. Miniforgeのインストール
    MiniforgeのGitHubリポジトリから、Miniforge3-MacOSX-arm64.shをダウンロードし、以下のコマンドでインストールする。

    bash Miniforge3-MacOSX-arm64.sh
    

    インストーラの指示に従い、conda initを実行してシェル設定を更新する。

  2. Conda環境の作成と有効化
    TensorFlow用の新しい環境を作成する。

    conda create -n myenv python=3.9
    conda activate myenv
    
  3. TensorFlowのインストール
    Appleの公式ドキュメントに従い、conda-forgeチャネルから依存関係をインストールした後、piptensorflow-macosをインストールする。

    conda install -c apple tensorflow-deps
    pip install tensorflow-macos
    pip install tensorflow-metal
    

    conda-forgeチャネルはARM64対応のパッケージが豊富に揃っており、TensorFlow以外の多くのライブラリもconda install <package-name>でスムーズにインストールできる可能性が高い。

解決策3: Rosetta 2によるx86_64環境のエミュレート (最終手段)

ARM64ネイティブ版が存在しない、あるいは動作しないレガシーなライブラリを使用する必要がある場合の回避策である。この方法はパフォーマンスが低下するため、常用は推奨されない。

  1. x86_64モードでシェルを起動
    archコマンドを使用することで、ターミナルセッションをx86_64アーキテクチャとしてエミュレートできる。

    arch -x86_64 /bin/zsh
    

    このシェル内では、すべてのコマンドがRosetta 2を介して実行される。

  2. x86_64版のPython環境でライブラリをインストール
    このx86_64シェル内で、別途用意したx86_64版のPython(例: Intel版Homebrewでインストールしたもの)を使い、pipでライブラリをインストールする。

    # このシェル内で実行
    python3 -m pip install some-legacy-library
    

    この方法は環境が複雑化し、管理が煩雑になるため、あくまで最終的な選択肢とすべきである。

まとめ

M1/M2 MacでPythonライブラリのインストールに失敗した場合、その原因はARM64アーキテクチャとの互換性問題であることが多い。

  • 最も推奨される解決策は、tensorflow-macosのような公式に提供されているARM64ネイティブ版パッケージを使用することである。
  • 依存関係の管理を簡素化するため、Miniforgeを用いたARM64ネイティブのconda環境を構築することも非常に有効な手段である。
  • Rosetta 2によるエミュレーションは、互換性のないライブラリを扱うための最終手段として認識しておくべきである。

参照

Discussion