Skip to content

hnswlib インストール時のビルドエラー解決法

問題の概要

Pythonパッケージ「hnswlib」のインストール時に発生するERROR: Could not build wheels for hnswlibエラーは、主にネイティブコードのコンパイルに必要なビルド環境が不足していることが原因です。特にApple Silicon搭載のMacで頻発し、以下の典型的なエラーメッセージが表示されます:

clang: error: the clang compiler does not support '-march=native'
error: command '/usr/bin/clang' failed with exit code 1

発生条件

このエラーが発生する主な環境:

  • Apple Silicon搭載Mac (M1/M2チップ)
  • Python 3.10以降の環境
  • pip install embeddinghubpip install chromadb 実行時
  • システムにXcodeコマンドラインツールやビルドツールが不足している場合

🍎 macOS(特にApple Silicon)向け解決策

方法1: 環境変数でビルドオプションを無効化(推奨)

最も効果的で簡単な解決法です。ターミナルで以下のコマンドを実行:

bash
export HNSWLIB_NO_NATIVE=1  # 現在のセッションのみ有効
pip install hnswlib

👉 恒久的に設定する場合(zsh/bashユーザー):

bash
echo "export HNSWLIB_NO_NATIVE=1" >> ~/.zshrc  # または ~/.bashrc
source ~/.zshrc

この解決法の原理

HNSWLIB_NO_NATIVE=1を設定すると、問題の原因となる-march=nativeコンパイルオプションの使用を無効化します。これにより互換性モードでビルドが行われます。

方法2: Xcodeコマンドラインツールのインストール

bash
xcode-select --install
  • ポップアップが表示されたら「インストール」を選択
  • 完了後システム再起動を推奨
  • インストール確認: xcode-select -v

方法3: アーキテクチャを明示的に指定(Intel Mac向け)

Intelチップ搭載Macで動作しない場合:

bash
ARCHFLAGS="-arch x86_64" pip install hnswlib

方法4: GCCのインストール(代替コンパイラ)

bash
brew install gcc  # Homebrewが必須

💻 Windows向け解決策

Visual C++ ビルドツールのインストール

  1. Microsoft公式サイトからビルドツールをダウンロード
  2. インストーラで以下を選択:
    • ワークロード → 「C++によるデスクトップ開発」
    • 個別のコンポーネント
      • MSVC v143 - VS 2022 C++ x64/x86 ビルドツール
      • Windows 10 SDK
  3. インストール後PCを再起動

Conda経由でのインストール(代替方法)

bash
conda install -c conda-forge hnswlib

🐧 Linux向け解決策

ビルドに必要な依存関係をインストール

Pythonバージョンに応じた開発ツールをインストール:

bash
# Python 3.10の場合
sudo apt install python3.10-dev build-essential -y

# Python 3.11の場合
sudo apt install python3.11-dev build-essential -y
bash
sudo yum install python3-devel gcc gcc-c++ make

🔧 その他の有効な解決策

Conda環境の利用(全プラットフォーム対応)

bash
conda create -n myenv python=3.10
conda activate myenv
conda install -c conda-forge hnswlib

Pythonバージョンをダウングレード

bash
pyenv install 3.10.10  # 3.10系の最新バージョン
pyenv global 3.10.10

⚠️ 根本原因と予防策

エラーの根本的な原因

hnswlibパッケージが-march=nativeオプションを使用した最適化コンパイルを試みますが、このオプションが一部の環境(特にApple Silicon Macの古いXcode)でサポートされていません。

予防的な対策

  1. 常に仮想環境を使用
    bash
    python -m venv myenv
    source myenv/bin/activate
  2. 最新のビルドツールを維持
    bash
    # macOS
    softwareupdate --all --install --force
    xcode-select --install
    
    # Windows
    Visual Studioインストーラで定期的に更新

非推奨アプローチ

以下の方法は環境によっては有効ですが、根本解決ではなく一時的な回避策に過ぎません:

  • pip install chromadb==0.3.25(古い特定バージョン指定)
  • --no-cache-dirオプションの使用
  • ライブラリのソースコード改変

✔️ 検証済みソリューションまとめ

プラットフォーム推奨方法代替方法
Apple Silicon Macexport HNSWLIB_NO_NATIVE=1Condaインストール
Intel MacARCHFLAGS="-arch x86_64" pip installXcodeツール更新
WindowsVisual C++ ビルドツールconda install -c conda-forge
Linuxsudo apt install python3.x-dev build-essential

最終更新: 2024年9月 (最新環境での動作を確認)