Skip to content

urllib3 v2.0 と LibreSSL の互換性エラーの解決策

問題の説明

Python 環境で import openaiimport requests を実行した際に、次のエラーが発生する場合があります:

python
ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with LibreSSL 2.8.3

この問題は、以下の条件が重なった際に発生します:

  • urllib3 のバージョンが v2.0 以上
  • Python の ssl モジュールが LibreSSL でコンパイルされている
  • システムの OpenSSL バージョンが古い(1.1.1 未満)

エラーが発生する典型的なシナリオ

none
pip install openai
python -c "import openai"
# エラーが発生

エラーの根本原因

urllib3 v2.0 は OpenSSL 1.1.1 以降の機能に依存していますが、多くの macOS 環境ではデフォルトで LibreSSL が使用されています。バージョンの不一致によりこのエラーが発生します。

重要な注意点

この問題は macOS のデフォルト Python 環境で頻発しますが、Linux や Windows でも同様の環境条件で発生する可能性があります。

推奨解決策

方法 1: urllib3 のバージョンダウングレード(簡単・即効性あり)

最も安全で簡単な解決策です。互換性のある urllib3 の旧バージョンをインストールします:

bash
pip uninstall urllib3
pip install 'urllib3<2.0'

特定バージョンのインストール例

bash
# 動作確認バージョンの例
pip install urllib3==1.26.6

方法 2: Python バージョンのアップグレード(根本的解決)

Python 3.12 以降では OpenSSL の互換性が改善されています:

bash
# Homebrew を使用して最新 Python をインストール(macOS)
brew install python@3.12

# 仮想環境の再作成
python3.12 -m venv myenv
source myenv/bin/activate

# パッケージの再インストール
pip install -r requirements.txt

方法 3: OpenSSL の手動アップグレード(上級者向け)

システムの OpenSSL をアップグレードし、Python を再構築します:

bash
# OpenSSL 1.1.1 のインストール
brew install openssl@1.1

# Python の再インストール(pyenv 使用例)
CONFIGURE_OPTS="--with-openssl=$(brew --prefix openssl@1.1)" pyenv install 3.9.16

# SSL バージョンの確認
python -c "import ssl; print(ssl.OPENSSL_VERSION)"
# OpenSSL 1.1.1 が表示されれば成功

補足的な回避策(非推奨)

警告のみ表示される場合の一時的な回避方法(根本解決ではありません):

python
import warnings
warnings.filterwarnings("ignore", message=r".*urllib3 v2.*only supports OpenSSL.*")

警告無視の注意

この方法はエラーメッセージを表示させなくするだけで、根本的なセキュリティ問題を解決しません。恒久対策として推奨されません。

原因の技術的背景

  • urllib3 v2.0 は OpenSSL 1.1.1+ 必須(公式リリースノート
  • macOS デフォルト Python は LibreSSL でビルドされることが多い
  • OpenSSL 1.1.0以下 では新機能 (TLS 1.3 等) がサポートされない

正常な環境の確認方法

python
import ssl
print(ssl.OPENSSL_VERSION_INFO)  # OpenSSL 1.1.1+ なら正常

根本解決のための推奨アプローチ

  1. 最新 Python への移行(3.12+)
  2. システム OpenSSL の更新
  3. プロジェクトごとに仮想環境を使用
  4. pip listurllib3バージョンを定期的に確認

本番環境では、urllib3 のバージョンピンニングを厳密に行うことをお勧めします:

txt
# requirements.txt での例
urllib3~=1.26.6