はじめに
研究室で新しいM1 MacBook Airを提供してもらったので、早速Python環境でも構築しようと思い作業に取り掛かった。
最初にHomebrewを入れて、次に$ brew install pyenv
でpyenv環境を作ろう、よしこれで後はver指定してインストールするだけだ!!
そしたら次のようなエラーに出会った
$ pyenv install 3.9.7
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.9.7.tar.xz...
-> https://www.python.org/ftp/python/3.9.7/Python-3.9.7.tar.xz
Installing Python-3.9.7...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
BUILD FAILED (OS X 12.2.1 using python-build 20180424)
Inspect or clean up the working tree at /var/folders/xn/nbx24y4j3c10xm79t69r6xpr0000gn/T/python-build.20220506153547.20932
Results logged to /var/folders/xn/nbx24y4j3c10xm79t69r6xpr0000gn/T/python-build.20220506153547.20932.log
Last 10 log lines:
checking for --with-cxx-main=<compiler>... no
checking for clang++... no
configure:
By default, distutils will build C++ extension modules with "clang++".
If this is not intended, then set CXX on the configure command line.
checking for the platform triplet based on compiler characteristics... darwin
configure: error: internal configure error for the platform triplet, please file a bug report
make: *** No targets specified and no makefile found. Stop.
なんだこれ...初めて見た...
今回はmacにpyenvを使ってPython環境を構築する一通りの流れとこのエラーの対処方法、そしてPythonのversion変更でも詰まったところについて記事にまとめようと思う。
実機環境について
MacOS : Monterey 12.2.1
MacBook Air(M1, 2020)
チップ : Apple M1
$SHELL : zsh
さぁ、pyenvでPython環境を構築しよう!!
最初に、Homebrewをインストールしましょう。
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
はい、これでbrewのインストール完了。
次にpyenvを入れてみよう
$ brew install pyenv
次にpyenvのPATH設定などを行おう
※利用しているSHELLによって記述する場所が変わるため注意
# これで利用シェルがわかる
$ echo $SHELL
# bashの場合
$ vim ~/.bashrc
# zshの場合
$ vim ~/.zshrc
# 以下の内容をcmd+c, cmd+v(コピペ)
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
後に記述するが、この作業にPythonのversion変更における罠(ミス)があった。
これでpyenvの環境も構築できた。Pythonをinstallしよう!!
冒頭のエラーに至る。。。
解決方法1
最初にBUILD FAILED (OS X 12.2.1 using python-build 20180424)
について調べてみるとこの記事に出会った。
これによるとpython-build: use zlib from xcode sdk
この箇所つまり、xcode sdk のzlibを使おうとしたがなかったからエラーが起きたというものである。この記事の通りに進めてみよう。
# zlibをinstall
$ brew install zlib
# 次にzlibの設定をzshrcに記述
$ echo 'export LDFLAGS="-L/usr/local/opt/zlib/lib"' >> ~/.zshrc
$ echo 'export CPPFLAGS="-I/usr/local/opt/zlib/include"' >> ~/.zshrc
$ echo 'export PKG_CONFIG_PATH="/usr/local/opt/zlib/lib/pkgconfig"' >> ~/.zshrc
$ source ~/.zshrc
# bashの場合はbashrcに記述
$ echo 'export LDFLAGS="-L/usr/local/opt/zlib/lib"' >> ~/.bashrc
$ echo 'export CPPFLAGS="-I/usr/local/opt/zlib/include"' >> ~/.bashrc
$ echo 'export PKG_CONFIG_PATH="/usr/local/opt/zlib/lib/pkgconfig"' >> ~/.bashrc
$ source ~/.bashrc
よし!これでもう一度pyenv install 3.9.7
や!!
。。。
。。。
自分はうまくいきませんでした
解決方法2
次に同じ内容で調べているとよさそうなissueが見つかった。
それを読んでみると、CommandLineTools
というやつが原因のようで、これをアンストして再度インストすると解決できると書いてあった。
よし!なんでも試してやる!最悪変になったらパソコンリセットや!
# 古いツールの削除
$ sudo rm -rf /Library/Developer/CommandLineTools
# 新しいCommandLineToolsのインストール
$ xcode-select --install
$ pyenv install 3.9.7
このCommandLineToolsの再インストールは環境によると思いますが、ちょっと時間がかかります。
結果。。。
だめだった。。。なんでぇ
でもこれ以上良さげな情報を見つけられなかったので3回ほど再インストールを繰り返した。。。
ダメだった。
じゃあ、xcodeも関連しているようだしxcodeとCommandLineToolsの両方を再インストールしたるか。
因みに両方の再インストールとなるとかなり時間かかります。結果は。。。
$ pyenv install 3.9.7
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.9.7.tar.xz...
-> https://www.python.org/ftp/python/3.9.7/Python-3.9.7.tar.xz
Installing Python-3.9.7...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.9.7 to /Users/xxx/.pyenv/versions/3.9.7
できた!これでできた!!
なんで?
意外に罠だったPythonのversion変更
まぁインストールできたしversionを新しいのに変更しよう!
最初に現在のversionを確認
$ python -V
Python 2.7.18
これがデフォルトのものですね。
じゃあ、新しく3.9.7に更新しよう!!
$ pyenv global 3.9.7
$ python -V
Python 2.7.18
あれ?更新されない?あ、localの方を変えないとダメだっけ??
$ pyenv local 3.9.7
$ python -V
Python 2.7.18
あれ?ちゃんとインストールできているはずだけど
$ pyenv versions
system
* 3.9.7 (set by /Users/xxx/.pyenv/version)
ん??
結論としてはzshrc(もしくはbashrc)に書き込んだpyenvの設定したpathが間違っているようでした。
今のpath設定はこれexport PATH="$PYENV_ROOT/bin:$PATH"
いつからかわからないけど、$PYENV_ROOT/bin
ではなくて$PYENV_ROOT/shims
を参照するように変更されていたようです。
4年前に構築した時はbinがデフォルトだったが変わったのか、マシン自体が変わったからか...
とにかく、zshrc(もしくはbashrc)に先ほど記述した内容を書き換えよう。
$ cat ~/.zshrc
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/shims:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
export LDFLAGS="-L/opt/homebrew/opt/zlib/lib"
export CPPFLAGS="-I/opt/homebrew/opt/zlib/include"
export PKG_CONFIG_PATH="/opt/homebrew/opt/zlib/lib/pkgconfig"
zshrc(もしくはbashrc)の中身が解決方法1と2、そしてこの修正を経てこのようになっていれば良いです。
$ source ~/.zshrc
$ python -V
Python 3.9.7
できた!
まとめ
今回のエラーの原因はxcodeとCommandLineToolsの両方にあるように思います。
ただ、zlibの作業をしなかったら上手くいっていない可能性も大いにあると思ったので一連の手順をまとめてみました。
個人の環境によって色々と状況は変わるため、この記事がその人にとっての最善な解決方法ではないと思いますが少しでも自分の調査結果が力になれることを祈っています。