プロジェクトごとにpythonのバージョンを切り替えたいと思い、M1 Macにpyenvをインストールしようと思ったところ、色々手こずりました。これは全く最適解ではないですが、取り急ぎインストールできた方法を記載してみたいと思います。何が起こっても責任は取れないため、実行は自己責任でお願いします。。ちなみに、私は、macOS 12.2.1を使用しています。
pyenvインストール
失敗したやり方
まずは、下記のREADMEに記載の方法でやってみました。
% brew install pyenv
(--- snip ---)
Error: Cannot install in Homebrew on ARM processor in Intel default prefix (/usr/local)!
Please create a new installation in /opt/homebrew using one of the
"Alternative Installs" from:
https://docs.brew.sh/Installation
You can migrate your previously installed formula list with:
brew bundle dump
%
成功したやり方
homebrewが/opt
配下にインストールされるべきところ、/usr/local
配下にインストールされているようでした。記憶にないのですが、どうやらRosetta(Intel互換モード)で動作しているターミナルでインストールしたため、M1版ではなく、Intel向けのhomebrewがインストールされていたようです。
% which brew
/usr/local/bin/brew
M1対応版のhomebrewをインストールし直せば良いのですが、下記方法でこのままでもpyenvがインストールできたので、載せておきます。Rosettaを使用してターミナルを開き直し、brew install pyenv
を実行してもうまく行ったと思いますが、arch -x86_64
を頭につけることでターミナル開き直さず、Rosettaでコマンド実行ができました。
% arch -x86_64 brew install pyenv
参考
こちらのリンク先を参考にさせて頂きました。
- M1 macでIntelな環境のシェルを使ったCronジョブを流したりする
- Homebrew Apple M1 / Intel の共存 (2021/2/13版)
- Homebrew 3.0をApple SiliconなMacにインストールする際に/usr/localが出てきたら実行モードを見直そう
Pythonインストール
pythonインストール前にREADMEに記載の通り、下記を実行しました。
% echo 'eval "$(pyenv init --path)"' >> ~/.zprofile
% echo 'eval "$(pyenv init -)"' >> ~/.zshrc
%
% arch -x86_64 brew install openssl readline sqlite3 xz zlib
失敗したやり方①
そして、素直にpyenv install
を実行したら、またエラーに引っかかりました。
% pyenv install 3.8.13
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
失敗したやり方②
エラーメッセージに記載のwikiを参考に下記を実行しましたが、また別のエラーで失敗しました。
% which openssl
/usr/local/opt/openssl@1.1/bin/openssl
%
% CONFIGURE_OPTS="--with-openssl=/usr/local/opt/openssl@1.1" pyenv install -v 3.8.13
configure: error: Unexpected output of 'arch' on OSX
make: *** No targets specified and no makefile found. Stop.
BUILD FAILED (OS X 12.2.1 using python-build 20180424)
成功したやり方
結局こちらもarch -x86_64
を頭につけることでインストールできました。早く気がつけという感じなのですが、こちらもRosettaを使用して実行しないといけなかったです。
% arch -x86_64 pyenv install -v 3.8.13
% pyenv versions
* system (set by /Users/****/.pyenv/version)
3.8.13
%
versionの切り替え
無事複数バージョンインストールできたので、プロジェクトごとにバージョンを切り替えられるようにします。対象プロジェクトに移動し、pyenv local
を実行します。
% cd test1
% python --version
Python 2.7.18
% pyenv versions
* system (set by /Users/****/.pyenv/version)
3.10.3
3.8.13
3.8.7
% pyenv local 3.10.3
(ターミナル開き直す)
% python --version
Python 3.10.3
% pyenv versions
system
* 3.10.3 (set by /Users/****/Documents/test1/.python-version)
3.8.13
3.8.7
%
最後に
もはやM1版のhomebrewをインストールし直すところから始めた方が早かったかもしれません。。今手こずっている方の参考になれば幸いです。
コメント