こんな人に読んでもらいたい
- 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を試し、正常終了することを確認できました。
