Macでpyenvを使ってPythonのインストールがzlibエラーとなる時の対処法

macOS Mojaveでhomebrewを使ってpyenvをインストールしPythonをインストールしようとしたら、zlibのエラーとなったのでその解決方法です

pyenvでPythonインストール

Pythonはバージョン2と3で互換性がなく、それぞれのバージョンで作られたPythonコードはそれぞれのバージョン環境で動作させる必要があります。

そのため、1つのプラットフォームで複数バージョンのPython環境を使いたくなります。

pyenvはそういった環境を作ってくれるコマンドで、目的のPythonバージョンを切り替えながら利用することができるようになります。

pyenvはhomebrewでもインストールできます。(homebrewのインストールはこちらを参照してください。)

brew install pyenv

そしてpyenvを使ってPythonをインストールするときは、まず以下のコマンドでインストールできるPythonのリストを見ます。

pyenv install -l

表示される一覧からPythonをインストールします。

pyenv install 3.7.3

このとき、インストールするPythonによっては以下のエラーが表示されてインストールできません。

zipimport.ZipImportError: can't decompress data; zlib not available
make: *** [install] Error 1

エラーではzlibがありませんと言ってます。

前バージョンまでのmacOSだとXcodeのCommand Line Toolsをインストールしていればこのようなエラーは発生しませんでした。

macOS Mojave上のXcode10からmacOS system headersが変更されているようで、いくつかのソフトではビルドに失敗するかもしれないと、Xcode10のリリースノートで説明しています。

そして、そのワークアラウンドとしてエクストラパッケージを提供するので、それでheadersをインストールしてくださいと説明しています。

おそらくsystem headersというのはPythonの標準的なライブラリが入っているものかと思われます。

パッケージは以下の場所にあります。

/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

つまり、これをインストールすればいいんですね。

【追記】Command Line Toolsをインストールしていても、このパッケージが無いことがあります。その場合は再度Command Line Toolsをインストールするとパッケージを確認できます。

Command Line ToolsはApple Develerサイトからも取得できます。

パッケージがあるのを確認できたら以下のコマンドでインストールします。

sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

installerコマンドの書式は以下となります。

installer -pkg "インストールするパッケージ" -target "インストール先"

インストール先は起動ディスクと同じであれば「/」を指定します。

パッケージをインストール後、リリースノートによると意図したCommand Line Toolsのバージョンを使うために以下のコマンドのどちらかを実行するそうです。

xcode-select -s <path to Xcode>
or
xcode-select -s /Library/Developer/CommandLineTools

そしてpyenvでPythonをインストールします。

pyenv install 3.7.3

するとエラーなしで正常にインストールできます。

ただ、リリースノートにはワークアラウンドなので将来的にこのパッケージは提供しなくなると言ってます。

その時はどうなるんでしょうか。。ちょっと心配です。

参考:

Xcode10リリースノート