私はこの記事を、2ヶ月以上前の記憶を頼りに書いているため、内容の正確性は他の記事には及びません。ほとんど備忘録のためだけに書いているようなものなのでご了承ください。
この記事が役立つかもしれない状況
- intelmacで動く実行ファイルを作りたいが手元にM1macしかない(pyinstallerなどはintelmacで作業しないとintelmacで動くファイルにならない)。
- なのでM1macにIntelmacのpython環境を構築したい
- Appleシリコンとintelプロセッサの環境でターミナルを分割したい
作業環境
MacBook Air (m1チップ)
os: Monterey ver.12.2.1
シェル : zsh
ターミナルを2つ用意する(Rosettaが有効のものと無効のもの)
ターミナルを2つ作るのに参考になる記事↓
https://qiita.com/funatsufumiya/items/cec08f1ba3387edc2eed
Rosettaはm1macでintelプロセッサを動かすのに必要なのでintel用のターミナルはRosettaが有効である必要があります。
デフォルトのターミナルはRosettaが無効なのでターミナルをもう一つ作ってそちらはRosettaを有効にすればよいことになります。Rosetta有効ターミナルにはintelmac用のhomebrew等々をインストールしてpython環境を1から構築してください。この時zshrcとzprofileへのパス等の設定が少しややこしいです。
zprofile内に書くべきこと
arm64はm1mac、x86_64はintelmac用の環境変数に対応しています。下の内容は簡単にいうと "uname -m" が arm64 だったらm1mac用の環境変数を、そうでなければintel用の環境変数を適用するということです。
if [ "$(uname -m)" = "arm64" ]; then
# arm64
export PYENV_ROOT="$HOME/.pyenv_arm64"
export PATH="$HOME/.pyenv_arm64/bin:$PATH"
eval "$(pyenv init --path)"
else
# x86_64
export PYENV_ROOT="$HOME/.pyenv_x64"
export PATH="$HOME/.pyenv_x64/bin:$PATH"
eval "$(pyenv init --path)"
fi
zshrc内に書くべきこと
if [ "$(uname -m)" = "arm64" ]; then
eval "$(/opt/homebrew/bin/brew shellenv)"
export PATH="/opt/homebrew/bin:$PATH"
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
export PATH="/opt/homebrew/bin:$PATH"
alias ibrew=/usr/local/bin/brew
alias ibrew="arch -x86_64 /usr/local/bin/brew"
alias eagle='open -n -a EAGLE'
alias g++="/usr/local/bin/g++-10 -std=c++17 -Wall -Wextra -Wconversion -pedantic"
alias gcc="/usr/local/bin/gcc-10 -std=c99 -Wall -Wextra"
export PATH="/opt/homebrew/opt/llvm/bin:$PATH"
else
eval "$(/usr/local/bin/brew shellenv)"
export PATH="/usr/local/bin:$PATH"
export PYENV_ROOT="$HOME/.pyenv_x86_64"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
fi
終わりに
なんか自分でもよくわかっていないのですがこれで動きました...
詳しい方いらっしゃったらアドバイスください。
ちなみに"uname -m"とターミナルに打ち込むと現在自分がどの環境で動かしているのか見られますので確認にどうぞ。
"x86_64"→intel
"arm64"→m1
「ターミナル intel化」でググると色々出てきます。