MacOSでpyenvのPythonインストールエラーを解決する完全ガイド

はじめに

MacOSで開発環境を構築する際、複数のPythonバージョンを管理するためにpyenvは欠かせないツールです。しかし、特にOSのアップデート後やM1/M2チップへの移行後に、よく見かける問題が「BUILD FAILED」エラーです。

この記事では、MacOS(特にMonterey 12.3.1以降)でpyenvを使用してPythonをインストールする際に発生する一般的なエラーと、その解決方法を詳しく解説します。

目次

  1. 問題の概要
  2. 解決方法1: Xcodeコマンドラインツールの再インストール
  3. 解決方法2: OpenSSL関連の問題
  4. 解決方法3: Intel MacからM1/M2 Macへの移行時の問題
  5. まとめ
  6. よくある質問

問題の概要

典型的なエラーメッセージは以下のようなものです:

BUILD FAILED (OS X 12.3.1 using python-build 20180424)

あるいは、より具体的には:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/Users/username/.pyenv/versions/3.x.x/lib/python3.x/ssl.py", line 100, in <module>
    import _ssl             # if we can't import it, let the error propagate
    ^^^^^^^^^^^
ModuleNotFoundError: No module named '_ssl'
ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?

これらのエラーは主に以下の原因で発生します:

  1. Xcodeコマンドラインツールのバージョン不一致または破損
  2. OpenSSLライブラリの問題
  3. Intel MacからApple Silicon (M1/M2)への移行時の互換性の問題

解決方法1: Xcodeコマンドラインツールの再インストール

多くの場合、この問題はXcodeコマンドラインツールを再インストールすることで解決します。以下の手順を試してください:

# 古いツールをアンインストール
sudo rm -rf /Library/Developer/CommandLineTools

# Xcodeコマンドラインツールを再インストール
xcode-select --install

# Pythonをpyenvでインストール
pyenv install 3.8.5 # または必要なバージョン

この方法は多くのユーザーにとって効果的です。コマンドラインツールの再インストールには数分かかることがありますので、完了するまで待ちましょう。

インストール後、以下のコマンドでClangのバージョンを確認できます:

bashclang --version

出力は以下のようになるはずです:

Apple clang version 13.x.x 
Target: x86_64-apple-darwin21.x.x (またはarm64-apple-darwin)
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

解決方法2: OpenSSL関連の問題

SSL拡張モジュールのコンパイルエラーが発生している場合は、OpenSSLに関連する問題の可能性があります。以下の解決策を試してください:

Homebrewを使用している場合:

# OpenSSLをインストールまたは更新
brew update
brew install openssl

# 環境変数を設定してからPythonをインストール
export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"
pyenv install 3.8.5 # または必要なバージョン

Apple Silicon (M1/M2) Macの場合:

export LDFLAGS="-L/opt/homebrew/opt/openssl@1.1/lib"
export CPPFLAGS="-I/opt/homebrew/opt/openssl@1.1/include"
pyenv install 3.8.5

解決方法3: Intel MacからM1/M2 Macへの移行時の問題

Apple Migrationツールを使用してIntel MacからM1/M2 Macに移行した場合、いくつかのライブラリファイルが問題を引き起こしている可能性があります。特に以下のファイルを確認しましょう:

/usr/local/lib/libgettextlib.dylib
/usr/local/lib/libintl.dylib
/usr/local/include/libintl.h

これらのファイルが存在する場合、次のコマンドで削除してみてください:

sudo rm /usr/local/lib/libgettextlib.dylib
sudo rm /usr/local/lib/libintl.dylib
sudo rm /usr/local/include/libintl.h

また、Homebrewを再インストールすることも効果的です:

# Homebrewをアンインストール
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"

# Homebrewを再インストール
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

M1/M2 Macでは、Homebrewのインストール場所が/usr/localから/opt/homebrewに変更されていることに注意してください。

まとめ

MacOSでpyenvを使用してPythonをインストールする際のエラーは、主に以下の対処法で解決できます:

  1. Xcodeコマンドラインツールの再インストール – 最も一般的な解決策
  2. OpenSSL関連の設定 – SSL拡張モジュールのエラーに対処
  3. 互換性のないライブラリの削除 – 特にIntelからApple Siliconへの移行時

これらの方法を順番に試して、お使いのMacでpyenvによるPythonのインストールを成功させましょう。

よくある質問

Q: pyenvでインストールできるPythonのバージョンを確認するには?

A: pyenv install --list コマンドを実行すると、インストール可能なすべてのバージョンが表示されます。

Q: 特定のバージョンをシステムのデフォルトとして設定するには?

A: pyenv global 3.8.5 (または希望するバージョン)を実行します。

Q: プロジェクト固有のPythonバージョンを設定するには?

A: プロジェクトディレクトリ内で pyenv local 3.8.5 を実行します。

Q: pyenvのインストールに失敗した場合はどうすればいいですか?

A: まず、必要な依存関係がすべてインストールされていることを確認してください。Homebrewを使用している場合、brew doctor を実行して潜在的な問題を特定しましょう。