pip installでssl moduleが利用できずエラー発生

こんな人に読んでもらいたい

  • pip installでパッケージインストール実行時にエラーが発生

実行環境

  • MacBook Air M1, 2020
  • macOS Sonoma Ver.14.5
  • Python Ver.3.10.5

エラー概要

Pythonアプリ開発で、インストール対象パッケージを管理するrequirements.txtを用意し、以下のコマンド実行しました。

pip install -r requirements.txt

その結果、以下のエラーが発生しました。(一部抜粋)

ERROR: Could not find a version that satisfies the requirement google-generativeai (from versions: none)
WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping

確認したポイント

パッケージが存在しているか

エラーを見ると、条件を満たすパッケージのバージョンがないと記載があるが、パッケージ情報を調べるとパッケージは存在する。

参考:https://pypi.org/search/?q=google-generativeai&o=

パッケージの利用要件を満たしているか

開発で利用するPythonのバージョンを確認した結果、「Python 3.10.5」であった。
パッケージ「google-generativeai」を利用するための要件を満たしているため、問題なし。

python --version

「google-generativeai」の利用要件

参考:https://ai.google.dev/api?hl=ja&lang=python

解決方法

原因は、エラーログのWarningの箇所にあるように、Python 3.10.5 の ssl moduleがOpenSSLライブラリを正しく読み込めていないことでした。
そのため、Pythonを再インストールし直し、OpenSSLを正しくリンクすることで解決することができました。

OpenSSLのパスを確認

以下のコマンドを実行し、OpenSSLのパスを確認します。
通常は /opt/homebrew/opt/openssl@1.1 または /usr/local/opt/openssl@1.1 になるはずです。

brew --prefix openssl@1.1

Pythonを再インストール

pyenvでPythonを再インストールし、OpenSSLを正しくリンクさせます。
以下のコマンドを実行し、pyenvを使ってOpenSSLライブラリをリンクした状態でPython 3.10.5を再ビルドします。

# OpenSSLのパスを環境変数に設定
export LDFLAGS="-L$(brew --prefix openssl@1.1)/lib"
export CPPFLAGS="-I$(brew --prefix openssl@1.1)/include"
export PKG_CONFIG_PATH="$(brew --prefix openssl@1.1)/lib/pkgconfig"

# pyenvでPythonを再インストール
pyenv install 3.10.5 --force

仮想環境の再作成

仮想環境を利用している場合は、仮想環境を再度作成してから作業を再開するようにしましょう。

pyenv virtualenv 3.10.5 env
pyenv activate env

ssl moduleの確認

Pythonシェルを起動し、ssl moduleが正しく読み込めることを確認します。
以下のコマンドを実行し、ssl moduleのバージョンが出力されれば成功です。

python
>>> import ssl
>>> print(ssl.OPENSSL_VERSION)

再度pip installを試し、正常終了することを確認できました。

¥3,300 (2024/10/14 22:33時点 | Amazon調べ)