小林ノエルのエンジニア的忘備録

フリーランス兼会社員エンジニアが技術とかリモートワークのこととかをツラツラ書いていきます

pyenv install で ModuleNotFoundError: No module named 'pyexpat' でコケたときの対応メモ

問題

pyenvで新しいpytonをインストールしようとした時に下記のようなエラーが出てインストールできなかった。

$ pyenv install 3.7.5
...
...
(中略)
...

ModuleNotFoundError: No module named 'pyexpat'
make: *** [install] Error 1

ネットで出てくる記事

日本語ではこちらの記事がでてきた。

pyexpat が原因で pyenv install が出来ない解決方法 - Qiita

おいおいホントかよって感じのソリューションだったのでリンク先のgithubのissueをよくよく読んだら本当の原因と解決方法が書いてあった。

https://github.com/pyenv/pyenv/issues/1066

原因

基本的にはこちらのコメントの通り。

https://github.com/pyenv/pyenv/issues/1066#issuecomment-503246581

In particular, it causes pyexpat to fail to link when installing on a fresh Mojave system with the 10.14 Command Line Tools and SDK headers (/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg) installed.

そういえば自分も以前に昔のバージョンのnokogiriとかmysql2 gemとかインストールするために、このheaderファイルインストールしてた。。。

対応

https://github.com/pyenv/pyenv/issues/1066#issuecomment-538201389

# This location may be different defendant on how the CLI tools were installed.
$ sudo rm -rf /Library/Developer/CommandLineTools
$ xcode-select --install

基本的には消してcommand line toolsを再インストールすればOKとのこと。試したらちゃんとpyenvでのpythonのインストールができました。