LoginSignup
8
8

More than 1 year has passed since last update.

M1 MacのHomebrewでIntel版のPythonを手軽に切り替えて使う方法

Last updated at Posted at 2021-11-03

M1 Macを始めたけれど、意外とx86_64でないと動かないライブラリやアプリがあって困る場合のメモ。この投稿を書く時点で、M1 Macに対応していないライブラリが結構あり、不便だったので手軽に環境を切り替えて実行できるようにした。

追記(2021/12/18)

最近はM1でもそんなに困ることがなくなってきたので、普通にHomebrewをインストールする方法で大丈夫です。
Pythonで各種動かないのは、pipではなくMiniforge3を使うことで回避できます。以下の投稿が役立ちます。

以下、M1Mac購入時の作業記録のメモ

ここでは以下のように、コマンドで環境(M1/Intel)を切り替える設定にする。

  • brew_m ... M1 Mac の Homebrew (arch -arm64e)
  • brew_x ... Intel Mac の Homebrew (arch -x86_64)

同じように、よく使うコマンドでは、末尾にxをつけるとIntel Mac用のコマンドが実行できるようにする。

  • python3 pip3 ... M1のPython3とpip3
  • python3x pip3x ... Intel MacのPython3とpip3

時々しか使わないコマンドは、以下のようにして実行する。

arch -x86_64 (コマンド)

なお、現在実行しているシェルのアーキテクチャを確認するには以下のコマンドを実行する。

uname -a

バイナリファイルのアーキテクチャを確認するには、以下のコマンドを実行する。

lipo -archs (バイナリ)
file (バイナリ)

利用例:

$ file commandxxx
commandxxx : Mach-O 64-bit executable arm64

$ lipo -archs commandxxx
arm64

Rosetta

Rosettaをインストール。Intel Mac用のツールを動かす。たぶん、ちょっと何かすると自動で入る。

softwareupdate --install-rosetta --agree-to-license

Homebrew

まずは普通にHomebrewをインストール。

Homebrewのサイト(こちら)から一行コピーして、実行する。以下は執筆時のコマンド。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Intel版のHomebrewのインストール

次に、Intel版のHomebrewをインストール。

arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

つまり、arch -x86_64 (コマンド)で、Intel版でコマンドを実行できる。

M1とIntel版ではインストール先が異なる

以下にも書いたけど、インストール先が異なる。

アーキテクチャ パス
Intel Mac /usr/local/Cellar/xxx
M1 Mac /opt/homebrew/Cellar/xxx

PATHの設定

~/.zshrcにパスを通す。GitでいろいろなOSで共通のシェル設定を使うので、macOS(darwin)判定を入れたもの。M1版のbrewになければIntel版のbrewを見るようにするもの。

~/.zshrc
if [[ `uname` == 'Darwin' ]]; then
  if [[ `uname -m` == 'arm64' ]]; then
    # m1とx86_64の共存設定
    export PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/local/sbin:$PATH
    export BREW_ROOT=/opt/homebrew
    eval $(/usr/local/bin/brew shellenv)
    eval $(/opt/homebrew/bin/brew shellenv)
  else
    # x86_64の設定
    export BREW_ROOT=/usr/local
    eval $(/usr/local/bin/brew shellenv)
  fi
  export PATH=$BREW_ROOT/bin:$PATH
  export PATH=$BREW_ROOT/sbin:$PATH
fi

aliasを設定

x86_64版のHomebrewを使いたい時はbrew_xで使えるようにする。

~/.zshrc
alias brew_x='arch -x86_64 /usr/local/bin/brew'
alias brew_m='arch -arm64e /opt/homebrew/bin/brew'

source ~/.zshrcを実行して設定を読み直したら以下を試してみよう。

Homebrewを使い分けよう

例えば、Intel版にslコマンドをインストール。

brew_x install sl

~/.zshrcでaliasを設定していれば、上記コマンドは、arch -x86_64 /usr/local/bin/brew install slを実行したのと同じ事になる。

インストールできたか確認しよう。

# インストールされているパッケージ一覧を見る
$ brew_x list
sl

Intel版のPython3をインストール

先ほど設定した HomebrewのIntel版(arch -x86_64)を利用して、Python3をインストール。

brew_x install python3

Homebrewの時と同様に、~/.zshrcにエイリアスを設定すると便利。

~/.zshrc
alias python3x=`/usr/local/bin/python3`
alias pip3x=`/usr/local/bin/python3 -m pip`

source ~/.zshrcで読み込んで試してみる。Intel版のPython3を実行しよう。

python3x (実行したいファイル)
pip3x instlal (パッケージ)

ワンライナーでアーキテクチャを確認しよう。

python3x -c 'import os;print(os.system("uname -a"))'

参考にしたサイト (感謝)

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8