fumiLab

fumimakerが作ったもの、やったことについて書いていきます。

pyenvでpython2系をインストールしようとするとMissin OpenSSL lib?と言われてしまう問題

ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?

f:id:fumimaker:20200218203208p:plain Pyenvで2系がインスコできない問題.**ERROR**: The Python ssl extension was not compiled. Missing the OpenSSL lib?のようにエラーが出ます. バージョン管理ツールであるpyenv.最近Python2系をインストールしようとした時にエラーが出てつまずいたので同じ現象に悩んでいる人がいたら少しでも力になれば幸いです.

環境

状況

3系はインストール成功するのに2系だけインストールできない.

pyenvで2系をインストールしようとする

pyenv install 2.7.10

pyenv install 2.7.10

python-build: use openssl from homebrew

python-build: use readline from homebrew

Downloading Python-2.7.10.tar.xz...

-> https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tar.xz

Installing Python-2.7.10...

patching file ./Lib/site.py

python-build: use readline from homebrew

python-build: use zlib from xcode sdk

**ERROR**: The Python ssl extension was not compiled. Missing the OpenSSL lib?



Please consult to the Wiki page to fix the problem.

https://github.com/pyenv/pyenv/wiki/Common-build-problems





**BUILD FAILED** (OS X 10.14.6 using python-build 1.2.16-4-g14871354)



Inspect or clean up the working tree at /var/folders/qx/_h8xypcx0kb8sj9q76rbwn2r0000gn/T/python-build.20200217193102.1168

Results logged to /var/folders/qx/_h8xypcx0kb8sj9q76rbwn2r0000gn/T/python-build.20200217193102.1168.log



Last 10 log lines:

rm -f /Users/fumi/.pyenv/versions/2.7.10/share/man/man1/python.1

(cd /Users/fumi/.pyenv/versions/2.7.10/share/man/man1; ln -s python2.1 python.1)

if test "xno" != "xno" ; then \

​     case no in \

​         upgrade) ensurepip="--upgrade" ;; \

​         install|*) ensurepip="" ;; \

​     esac; \

​      ./python.exe -E -m ensurepip \

​         $ensurepip --root=/ ; \

​ fi

**ERROR**: The Python ssl extension was not compiled. Missing the OpenSSL lib?と言われてしまっているようですね.wikiを見ろと言われているので見てみます.

github.com

トライ1

このように書いてあるので試してみます.

CFLAGS="-I$(brew --prefix openssl)/include" \
LDFLAGS="-L$(brew --prefix openssl)/lib" \
pyenv install -v 3.4.3

ダメでした.同じようなエラーが出ていますね.

...中略
rm -f /Users/fumi/.pyenv/versions/2.7.10/bin/python-config

(cd /Users/fumi/.pyenv/versions/2.7.10/bin; ln -s python2-config python-config)

test -d /Users/fumi/.pyenv/versions/2.7.10/lib/pkgconfig || /usr/bin/install -c -d -m 755 /Users/fumi/.pyenv/versions/2.7.10/lib/pkgconfig

rm -f /Users/fumi/.pyenv/versions/2.7.10/lib/pkgconfig/python2.pc

(cd /Users/fumi/.pyenv/versions/2.7.10/lib/pkgconfig; ln -s python-2.7.pc python2.pc)

rm -f /Users/fumi/.pyenv/versions/2.7.10/lib/pkgconfig/python.pc

(cd /Users/fumi/.pyenv/versions/2.7.10/lib/pkgconfig; ln -s python2.pc python.pc)

rm -f /Users/fumi/.pyenv/versions/2.7.10/share/man/man1/python2.1

(cd /Users/fumi/.pyenv/versions/2.7.10/share/man/man1; ln -s python2.7.1 python2.1)

rm -f /Users/fumi/.pyenv/versions/2.7.10/share/man/man1/python.1

(cd /Users/fumi/.pyenv/versions/2.7.10/share/man/man1; ln -s python2.1 python.1)

if test "xno" != "xno" ; then \

​     case no in \

​         upgrade) ensurepip="--upgrade" ;; \

​         install|*) ensurepip="" ;; \

​     esac; \

​      ./python.exe -E -m ensurepip \

​         $ensurepip --root=/ ; \

​ fi

**ERROR**: The Python ssl extension was not compiled. Missing the OpenSSL lib?



Please consult to the Wiki page to fix the problem.

https://github.com/pyenv/pyenv/wiki/Common-build-problems





**BUILD FAILED** (OS X 10.14.6 using python-build 1.2.16-4-g14871354)



Inspect or clean up the working tree at /var/folders/qx/_h8xypcx0kb8sj9q76rbwn2r0000gn/T/python-build.20200218103636.15430

Results logged to /var/folders/qx/_h8xypcx0kb8sj9q76rbwn2r0000gn/T/python-build.20200218103636.15430.log



Last 10 log lines:

rm -f /Users/fumi/.pyenv/versions/2.7.10/share/man/man1/python.1

(cd /Users/fumi/.pyenv/versions/2.7.10/share/man/man1; ln -s python2.1 python.1)

if test "xno" != "xno" ; then \

​     case no in \

​         upgrade) ensurepip="--upgrade" ;; \

​         install|*) ensurepip="" ;; \

​     esac; \

​      ./python.exe -E -m ensurepip \

​         $ensurepip --root=/ ; \

​ fi

この記事を見ると大丈夫そうなのにできない.環境の問題かなぁ.

qiita.com

トライ2

様々な記事を調べてみるとOpenSSL関連がおかしそう.バージョンが合わないとか,パスが通ってないとかかな.ということでOpenSSLのバージョンを調べてみる.面倒だったのでもう一度Brew Installしてみた.

brew install openssl

brew install openssl

Updating Homebrew...

==> **Auto-updated Homebrew!**

Updated 1 tap (homebrew/core).

==> **New Formulae**

libcbor

==> **Updated Formulae**

balena-cli         groovysdk         paket

bitlbee          gsettings-desktop-schemas pandoc-citeproc

cassandra         gsoap           plantuml

cfn-lint          helmfile          root

clhep           libstfl          ruby

dialog           macvim           taskell

freeciv          manticoresearch      vim

frotz           mgba            visp

git-gui          mikutter          weechat

golang-migrate       mit-scheme         wpscan

gradle           mmctl           zola

groovy           netpbm

==> **Deleted Formulae**

gh



Warning: openssl@1.1 1.1.1d is already installed and up-to-date

To reinstall 1.1.1d, run `brew reinstall openssl@1.1`

バージョンはOpenSSL1.1らしい.何やらパスのことを言っている.

トライ3

一応パスを通してもう一度やってみた.echo 'export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"' >> ~/.zshrc自分の環境ではzshを使ってるのでzshrcです.

pyenv install 2.7.10                         ✘ 1 

python-build: use openssl from homebrew

python-build: use readline from homebrew

Downloading Python-2.7.10.tar.xz...

-> https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tar.xz

Installing Python-2.7.10...

patching file ./Lib/site.py

python-build: use readline from homebrew

python-build: use zlib from xcode sdk

**ERROR**: The Python ssl extension was not compiled. Missing the OpenSSL lib?



Please consult to the Wiki page to fix the problem.

https://github.com/pyenv/pyenv/wiki/Common-build-problems





**BUILD FAILED** (OS X 10.14.6 using python-build 1.2.16-4-g14871354)



Inspect or clean up the working tree at /var/folders/qx/_h8xypcx0kb8sj9q76rbwn2r0000gn/T/python-build.20200218105508.40215

Results logged to /var/folders/qx/_h8xypcx0kb8sj9q76rbwn2r0000gn/T/python-build.20200218105508.40215.log



Last 10 log lines:

rm -f /Users/fumi/.pyenv/versions/2.7.10/share/man/man1/python.1

(cd /Users/fumi/.pyenv/versions/2.7.10/share/man/man1; ln -s python2.1 python.1)

if test "xno" != "xno" ; then \

​     case no in \

​         upgrade) ensurepip="--upgrade" ;; \

​         install|*) ensurepip="" ;; \

​     esac; \

​      ./python.exe -E -m ensurepip \

​         $ensurepip --root=/ ; \

​ fi

ダメです.同じ現象ですね.

しばらく調べているとこのような記事を発見した. OpenSSL1.1で3系を動かしている.2系はもしかしてダメなのか?

qiita.com

結論(トライ4)

github.com

このような記事を見つけました.OpenSSL1.1はダメらしい.OpenSSL1.0を入れればいいようです.pyenvは賢いので必要なものがないと必要なものを入れるようになってる.opensslをUninstallしてpyenvでインストールします.

OpenSSLを1.0にしてみます.

brew uninstall openssl

依存があってダメだよって言われましたが強制的に消します.

brew uninstall --ignore-dependencies openssl

そしてpyenvを潜影蛇手

pyenv install 2.7.10

pyenv install 2.7.10

Downloading openssl-1.0.2k.tar.gz...

-> https://pyenv.github.io/pythons/6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0

Installing openssl-1.0.2k...

Installed openssl-1.0.2k to /Users/fumi/.pyenv/versions/2.7.10



python-build: use readline from homebrew

Downloading Python-2.7.10.tar.xz...

-> https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tar.xz

Installing Python-2.7.10...

patching file ./Lib/site.py

python-build: use readline from homebrew

python-build: use zlib from xcode sdk

Installed Python-2.7.10 to /Users/fumi/.pyenv/versions/2.7.10

これのおかげでできた.pyenvって必要なやつ勝手に入れてくれるんすねー,すごい.

結論として,OpenSSLが1.0じゃないといけないところ,1.1がインスコされていたためだったっぽい.2系はOpenSSL1.0なんだね.ちなみに3系はそのまま入ったので1.1でいいみたい.

後付け

OpenSSL1.0のままPython3をインストールしようとするとこのようになります.

pyenv install 3.8.1

Downloading openssl-1.1.0j.tar.gz...

-> https://www.openssl.org/source/openssl-1.1.0j.tar.gz

Installing openssl-1.1.0j...

Installed openssl-1.1.0j to /Users/fumi/.pyenv/versions/3.8.1



python-build: use readline from homebrew

Downloading Python-3.8.1.tar.xz...

-> https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tar.xz

Installing Python-3.8.1...

python-build: use readline from homebrew

python-build: use zlib from xcode sdk

Installed Python-3.8.1 to /Users/fumi/.pyenv/versions/3.8.1

無事にインスコ成功しますね.

このようにpyenvが自動でOpenSSL1.1にアップデートしてくれます.ありがたい.OpenSSL1.1じゃないとPython3系の動作で不具合が出るのでPython2のインストールが終わったらOpenSSLを新しくしてあげましょう.なお.OpenSSL1.1でもPython2は正常に動作します.インストールだけがダメみたい.

ちょっとややこしいけどPythonは環境構築が一番難しいってそれ言われてるから.