Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2912

MacOS 11.4 Big Sur で pyenv install 3.9.6 でハマったときの備忘録

$
0
0
2021/8/7現在、Pythonの最新安定版は3.9.6のよう。 元々pyenvで3.8.3を入れていたが、これを一度uninstallしてinstallし直そうとしたら以下エラー。 $ pyenv isntall 3.9.6 python-build: use readline from homebrew python-build: use zlib from xcode sdk BUILD FAILED (OS X 11.4 using python-build 2.0.4-8-gd209e061) ググると Xcode Command Line Tools が最新のMacOS 11.4に対応していないことによるエラーっぽい。ただ.bashrcや.bash_profileのPATHを追記とか、個人的によくわかってない対策が多く戸惑ったので備忘録。 ポイント 多くはM1(Apple Silicon, arm64)にHomebrewやPython, pyenvなどが対応してないことが原因っぽかった bashのPATHがきちんと通ってないことが多い M1に対応させるためLDFLAGSやCPPFLAGSなどの個別のパス指定?も重要 一回Homebrewを再インストールしといた方がいいかな brew doctorのWarningはやはり無視しない方がいいっぽい pyenvでM1対応のバージョンは3.9.1からなので注意 brew install するときは公式のGitHubのREADMEをみたがいい やっぱりbrewとは、bash_profileとは、$PATHとはみたいな「これはどういうもので、何をやっている記述なのか」を面倒でも理解しながら色々試すのが遠回りなようで近道な気がする このteratailのquickquipさんの回答を先にみておくと理解が早いかも。 ググって上位に出てくるこのGitHub Issueは「Ubuntuでの解決法」という前提条件がちゃんと書いてあるのでMacではお門違いなので注意。 やったこと Xcode13 beta のインストールと Command Line Tools への適用 最新の Xcode13 beta を入れて、設定>Loacationsの Command Line Tools を最新にするとコンソールに出力されるラスト10行のエラー文が変わった。 そしてpyenv install 3.9.6したら、cpythonのImport時にsymbolが見つからないよ的なエラー。ただあとになって思えばこれは本質的な原因ではなかったと思う。 Last 10 log lines: from . import _common File "/private/var/folders/j0/tj3vwrjs3nd_m_h3nfx1q_fm0000gn/T/python-build.20210807200735.65636/Python-3.9.1/Lib/importlib/_common.py", line 3, in <module> import zipfile File "/private/var/folders/j0/tj3vwrjs3nd_m_h3nfx1q_fm0000gn/T/python-build.20210807200735.65636/Python-3.9.1/Lib/zipfile.py", line 6, in <module> import binascii ImportError: dlopen(/private/var/folders/j0/tj3vwrjs3nd_m_h3nfx1q_fm0000gn/T/python-build.20210807200735.65636/Python-3.9.1/build/lib.macosx-11.4-arm64-3.9/binascii.cpython-39-darwin.so, 2): Symbol not found: _crc32 Referenced from: /private/var/folders/j0/tj3vwrjs3nd_m_h3nfx1q_fm0000gn/T/python-build.20210807200735.65636/Python-3.9.1/build/lib.macosx-11.4-arm64-3.9/binascii.cpython-39-darwin.so Expected in: flat namespace in /private/var/folders/j0/tj3vwrjs3nd_m_h3nfx1q_fm0000gn/T/python-build.20210807200735.65636/Python-3.9.1/build/lib.macosx-11.4-arm64-3.9/binascii.cpython-39-darwin.so make: *** [install] Error 1 .bash_profile, .bashrc 色々ググりながらbash_profileとbashrcをいじって最終的にこうなった。 .bash_profile if [ -f ~/.bashrc ] ; then . ~/.bashrc fi ## # Your previous /Users/takuya/.bash_profile file was backed up as /Users/takuya/.bash_profile.macports-saved_2019-06-24_at_17:30:49 ## # MacPorts Installer addition on 2019-06-24_at_17:30:49: adding an appropriate PATH variable for use with MacPorts. # export PATH="/opt/local/bin:/opt/local/sbin:$PATH" # Finished adapting your PATH environment variable for use with MacPorts. export PS1='\[\e[33m\]\u:\W\[\e[0m\]$ '; export PATH="/usr/local/bin:$PATH" # homebrew: mac os package manager eval "$(/opt/homebrew/bin/brew shellenv)" ## readline export LDFLAGS="-L/opt/homebrew/opt/readline/lib" # あとから追記したもの export CPPFLAGS="-I/opt/homebrew/opt/readline/include" # あとから追記したもの export PKG_CONFIG_PATH="/opt/homebrew/opt/readline/lib/pkgconfig" # あとから追記したもの # nodebrew: node.js package manager export PATH=$PATH:$HOME/.nodebrew/current/bin .bash_rc # rbenv export PATH="~/.rbenv/shims:/usr/local/bin:$PATH" eval "$(rbenv init -)" # pyenv export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" export PATH="/usr/local/opt/openssl@1.1/bin:$PATH" # flutter export PATH="$PATH:$HOME/flutter/bin" そしてpyenv install 3.9.6するとこういうエラーに行き着いた。 Installing Python-3.9.6... python-build: use readline from homebrew python-build: use zlib from xcode sdk WARNING: The Python readline extension was not compiled. Missing the GNU readline lib? 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 11.4 using python-build 2.0.4-8-gd209e061) Inspect or clean up the working tree at /var/folders/j0/tj3vwrjs3nd_m_h3nfx1q_fm0000gn/T/python-build.20210808110538.61673 Results logged to /var/folders/j0/tj3vwrjs3nd_m_h3nfx1q_fm0000gn/T/python-build.20210808110538.61673.log Last 10 log lines: $ensurepip --root=/ ; \ fi Looking in links: /var/folders/j0/tj3vwrjs3nd_m_h3nfx1q_fm0000gn/T/tmp4vr3drqh Processing /private/var/folders/j0/tj3vwrjs3nd_m_h3nfx1q_fm0000gn/T/tmp4vr3drqh/setuptools-56.0.0-py3-none-any.whl Processing /private/var/folders/j0/tj3vwrjs3nd_m_h3nfx1q_fm0000gn/T/tmp4vr3drqh/pip-21.1.3-py3-none-any.whl Installing collected packages: setuptools, pip WARNING: The scripts pip3 and pip3.9 are installed in '/Users/takuya/.pyenv/versions/3.9.6/bin' which is not on PATH. Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location. NOTE: The current PATH contains path(s) starting with `~`, which may not be expanded by all applications. Successfully installed pip-21.1.3 setuptools-56.0.0 ラスト10行よりも上の方のThe Python readline extension was not compiled. Missing the GNU readline lib?のWarningやErrorがまず気になった。 brew install readline 間違ってbrew install read-lineをしてしまってNo previously deleted formula foundというErrorがでたのでHomebrew自体の再インストールやエラー解消をまずやった(結果的に不要だったかも)。 homebrewの再インストール brew doctor 時のWarning解消 そうではなくbrew install readlineとしてやると上手く行ったようだが、以下のように「コンパイラがreadlineを見つけるようにするためには以下を設定しろ」との指示が。 readline is keg-only, which means it was not symlinked into /opt/homebrew, because macOS provides BSD libedit. For compilers to find readline you may need to set: export LDFLAGS="-L/opt/homebrew/opt/readline/lib" export CPPFLAGS="-I/opt/homebrew/opt/readline/include" For pkg-config to find readline you may need to set: export PKG_CONFIG_PATH="/opt/homebrew/opt/readline/lib/pkgconfig" ==> Summary 🍺 /opt/homebrew/Cellar/readline/8.1: 48 files, 1.7MB keg-only: Cellar だけにインストールされ、/usr/local にはリンクされていない formula のこと。 https://qiita.com/halo57/items/e7511f3befbcb9fedd6a なので.bash_profileに上記export3つを追記した。(source .bash_profileが何故か効かないのでターミナルを再起動した) 成功! その上でpyenv install 3.9.6したら成功した! $ pyenv install 3.9.6 $ pyenv 3.9.6 $ pyenv global 3.9.6 pyenvのglobalの使い方ってこれであってるっけ。。?ちなみに3.9.1以降じゃないとpyenvがM1チップに対応してないらしくインストールは出来ないので注意。 最終的な環境 $ python -v WARNING: Python 2.7 is not recommended. Python 2.7.16 (default, May 8 2021, 11:48:02) $ python3 -v Python 3.9.6 (default, Jun 29 2021, 05:25:02) $ pyenv -v pyenv 2.0.4-8-gd209e061 $ pyenv versions system 3.6.10 3.7.0 * 3.9.6 (set by /Users/takuya/.pyenv/version) $ openssl version OpenSSL 1.1.1k 25 Mar 2021 元々の .bash_profile, .bashrc ぐちゃぐちゃでした。。 .bash_profile if [ -f ~/.bashrc ] ; then . ~/.bashrc fi ## # Your previous /Users/takuya/.bash_profile file was backed up as /Users/takuya/.bash_profile.macports-saved_2019-06-24_at_17:30:49 ## # MacPorts Installer addition on 2019-06-24_at_17:30:49: adding an appropriate PATH variable for use with MacPorts. # export PATH="/opt/local/bin:/opt/local/sbin:$PATH" export PATH="~/.rbenv/shims:/usr/local/bin:$PATH" # Finished adapting your PATH environment variable for use with MacPorts. export PS1='\[\e[33m\]\u:\W\[\e[0m\]$ '; eval "$(rbenv init -)" export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" export PATH="/usr/local/opt/openssl@1.1/bin:$PATH" # Setting PATH for Flutter export PATH="$PATH:$HOME/flutter/bin" .bashrc export PATH=$PATH:/Users/takuya/.nodebrew/current/bin export PATH="$HOME/.pyenv/bin:$PATH" export PATH="/usr/local/bin:$PATH" .bashrcやPATHを通すことへの理解はこちら 気になったこと WARNING: The scripts pip, pip3 and pip3.8 are installed in '(それぞれ任意のパス)' which is not on PATH.というエラーが出ていたがいつの間にか出なくなっていた。 source .bashrc, source .bash_profileをやってもecho $PATHで出力されるPATHが変わらなかったり重複している。Cmd+Qでターミナルを再起動したらちゃんとなったけど。 「.bash_profileが(ターミナルに?)ログイン時に1回だけ呼ばれるのに対し、.bashrcは(新しいターミナルウィンドウを?)起動する度に呼ばれる」的なことが書いていたので、.bash_profileが上位ということで、なんとなくhomebrew系は.bash_profile い、env系は.bashrcに書いてみました。 MacportsというのはHomebrewと並ぶMacOSパッケージ管理ソフトでHomebrewより古くからあるらしい。PS1というのはターミナルの$の左に出るユーザー名やPC名、パス名をカスタマイズしたものなので今回は関係ないです。evalというのはよくわからん。 やってダメだったこと # CommandLineToolsを入れ直してもダメ sudo rm -rf /Library/Developer/CommandLineTools xcode-select --install # 11.4のpackageなんてねぇよと怒られた sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_11.4.pkg -target / これの対応方法② arch を x86_64 でインストール? pyenvがM1 Mac(Appleシリコン)に対応してないのでx86_64でインストール?するも、pyenv installはやはりダメ arch -arch x86_64 env PATH=${PATH/\/opt\/homebrew\/bin:/} pyenv install 3.8.7 zshrcにPATHの追記 export PATH="$HOME/.pyenv/bin:$PATH" export PATH="/usr/local/bin:$PATH" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)" export LDFLAGS="-L/usr/local/opt/zlib/lib -L/usr/local/opt/bzip2/lib" export CPPFLAGS="-I/usr/local/opt/zlib/include -I/usr/local/opt/bzip2/include" 自分の場合はecho $SHELLで確認するとzshでなくbashを使っていたので、.bashrcに書いてみたがダメだった。。 pyenvのこのIssue sudo yum install readline-develはEC2でのコマンドか? 余談 M1 Macに移行した時に移行アシスタントでやったけどpyenvやrbenv、Homebrewなどは1からやったほうがよかったのかなぁ M1 Macからemacs入ってないのでVimのコマンド操作を覚えながらやったけどMac標準のCtrl+k/Ctrl+yとか使えない(Vimだとdd/p)のが辛かったけどそれ以上の魅力がやはりあるのかな 他に参考になりそうなサイト pyenv common build problem on github https://github.com/pyenv/pyenv/wiki/Common-build-problems M1 Mac でのHomebrew管理 https://zenn.dev/junjunjunk/articles/4b230519d87de4 brew tap https://qiita.com/saa/items/85ed5e914d424fbf9fd6 homebrew readline7 https://qiita.com/Cj-bc/items/34bc4ef139844d031f27

Viewing all articles
Browse latest Browse all 2912

Trending Articles