Pythonのバージョン切り分けにpyenvを愛用しています.加えてrbenv,goenv,nodenvも愛用しています.今後も**env
の利用が増加する可能性も有りそうです.そこでanyenv
繋がりで全ての**env
を管理出来る様にするための作業をしました.pyenvを除いて全て上手く再構築出来ました.ところが,pyenvだけ上手く復活しません.pyenv install 3.10.7と実行しようものなら,怒濤のエラー... 仕方が無いので,最新バージョンのPython環境の構築には対応していないHomebrew版のpyenvを再度インストールするも,こちらも正常に動作せず,同様のエラー終了に... 万事休すかに思われたのですが,原因を探ってみると意外な事実が判明しました.この記事はその記録です.
分かった事実: Python3.10.xからOpenSSL1.1.1が必須に
以下の記事で言及が有りますが,どうやらPython3.10.xからOpenSSL1.1.1が必須になりました.これよりも古いバージョンのOpenSSLがインストールされている場合にはbuild出来ない様です.pyenvではPythonをソースコードからbuildして環境構築を実行します.これは関連が有りそうな予感
エラーログを辿ると
エラーログはここに格納されているよといったメッセージがbuildのエラー終了時に出力されるので,エラーログを探ってみることに.OpenSSL
で検索したところ,以下の内容がヒット...
1495 Could not build the ssl module!
1496 Python requires a OpenSSL 1.1.1 or newer
.bash_profileを確認
筆者の環境ではOpenSSLは最新版がインストール済のため,Pathが登録されていないのではないかと疑い,.bash_profileを確認してみました.以下の様にOpenSSL 3について既に環境情報が登録されていました.
PATH="/opt/homebrew/opt/openssl@3/bin:$PATH"
LDFLAGS="-L/opt/homebrew/opt/openssl@3/lib $LDFLAGS"
CPPFLAGS="-I/opt/homebrew/opt/openssl@3/include $CPPFLAGS"
PKG_CONFIG_PATH="/opt/homebrew/opt/openssl@3/lib/pkgconfig $PKG_CONFIG_PATH"
OpenSSL 1.1に関する環境情報を追加
OpenSSL 3ということはOpenSSl 1.1.1 or newerという条件を満たしていそうですが,エラーになってしまうので,OpenSSL 1.1についても情報を追記しました.この後,pyenv install 3.10.7を実行したところ,問題無く動作しました.根本原因は分からず終いとなりましたが,pyenvはこれで動作する様になりました.ひょっとするとOpenSSL 3ではバージョンが新しすぎるのかもしれません.
PATH="/opt/homebrew/opt/openssl@3/bin:$PATH"
LDFLAGS="-L/opt/homebrew/opt/openssl@3/lib $LDFLAGS"
CPPFLAGS="-I/opt/homebrew/opt/openssl@3/include $CPPFLAGS"
PKG_CONFIG_PATH="/opt/homebrew/opt/openssl@3/lib/pkgconfig $PKG_CONFIG_PATH"
PATH="/opt/homebrew/opt/openssl@1.1/bin:$PATH"
LDFLAGS="-L/opt/homebrew/opt/openssl@1.1/lib $LDFLAGS"
CPPFLAGS="-I/opt/homebrew/opt/openssl@1.1/include $CPPFLAGS"
PKG_CONFIG_PATH="/opt/homebrew/opt/openssl@1.1/lib/pkgconfig $PKG_CONFIG_PATH"
まとめ
OSSではよく有ることですが,トラブルシューティングのメモは忘れた頃に再発するトラブル解決のため,今後も積極的に残していこうと思います.