[Python] 久しぶりにMacにPython環境を構築したメモ
はじめに(モチベーション)
最近M4 MacBook Proを購入しましたが、普段はDockerでAIツールを動かしているため、Macのローカル環境にPython環境を構築していませんでした。
以前は各種ツールのApple Silicon対応が不十分な頃に苦労して環境構築した為、今回は改めて最新の方法を検討しました。
この記事では、M4 Mac (macOS Sequoia) で快適にPython開発を行うための環境構築手順として、pyenv
, venv
, conda
を使い分ける前提で構築を行なっていきます。
作業環境
- PC : MacBook Pro 14インチ / 2024
- 16コアCPU + 40コアGPU搭載 M4 Max
- 128 GB memory
- OS : macOS Sequoia 15.2
最終環境
ツール | バージョン | 用途 | 補足 |
---|---|---|---|
anyenv | 1.1.5 | 〇〇env系の管理 |
asdf への移行も検討中 |
pyenv | 2.5.0 | Pythonのバージョン管理 |
venv /conda の併用 |
autoenv | 0.3.0 | ディレクトリごとに環境変数・コマンドを自動実行 | 仮想環境のactivateを自動化 |
minforge | miniforge3-24.9.2-0 | 無償のconda環境 | Apple Silicon対応済みの機械学習環境構築に利用 |
python | 3.13.0 | venvで利用したバージョン | 通常のPython実行環境として利用 |
構築
anyenv
anyenv は、pyenv
や nodenv
などの様々な〇〇env系ツールをまとめて管理するツールです。
以前から利用しているので今回も導入しましたが、代替としてasdfというツールもあるので次回は乗り換えを検討するかもしれません。
インストール
手順
brew install anyenv
初期化
anyenv init
を実行すると、.zshrc
に eval "$(anyenv init -)"
を追加するように指示されます。
しかし、この方法だとシェルの起動が遅くなる可能性があるため、以下の方法で初期化します。
公式の指示 (非推奨)
$ anyenv init
# Load anyenv automatically by adding
# the following to ~/.zshrc:
eval "$(anyenv init -)"
今回の手順
.zshrc
に以下を記述します。
# initialize anyenv >>>
if [ -f "$(anyenv root)/rc.sh" ]; then
source "$(anyenv root)/rc.sh"
fi
function __anyenv_env_update() {
echo "update anyenv env files ..."
local anyenv_root=$(anyenv root)
anyenv init - >! "$anyenv_root/rc.sh"
source "$anyenv_root/rc.sh"
echo "done"
}
alias anyenv_env_update='__anyenv_env_update'
# <<< initialize anyenv
初回 or anyenv install xxxx
で環境を追加した後、以下のコマンドを実行して設定を反映させます。
anyenv_env_update
プラグインを追加
anyenv
の一括アップデートを行うためのプラグインanyenv-updateを導入します。
手順
- 公式の手順に従ってインストールを実行
mkdir -p $(anyenv root)/plugins
git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update
-
anyenv
をアップデート
anyenv update
pyenv
pyenv はPythonのバージョン管理ツールです。
venv
でも仮想環境は作成できますが、conda
環境と共存させるために pyenv
を導入します。
インストール
手順
anyenv install pyenv
autoenv
autoenv はディレクトリ移動時に環境変数を自動で設定してくれるツールです。
Pythonの仮想環境のactivateを自動化するために導入します。
インストール
手順
brew install autoenv
環境設定
手順
デフォルトではディレクトリ以下の .env
ファイルを読み込みますが、.env
ファイルと区別するために、.autoenv.enter
ファイルを利用するように変更します。
.zshrc
に以下を追加します。
export AUTOENV_ENV_FILENAME=".autoenv.enter"
export AUTOENV_ENV_LEAVE_FILENAME=".autoenv.leave"
export AUTOENV_ENABLE_LEAVE=true
.autoenv.enter と .autoenv.leave の準備
手順
.autoenv.enter
と .autoenv.leave
の雛形を準備しておきます。
.autoenv.enter
.autoenv.leave
- テンプレート置き場の作成
cd ~
mkdir .autoenv
- ファイルの保存
curl -fLo .autoenv/.autoenv.leave 'https://gist.githubusercontent.com/hk-yakan/a5bb8f72587c9b173566bf59a72022f6/raw/57e811bfa90431c89ae980e299626101217f3c18/.autoenv.leave'
curl -fLo .autoenv/.autoenv.enter 'https://gist.githubusercontent.com/hk-yakan/7c5c9dc27f1945c506c37ef80d8435bd/raw/e5428b0794fdc92a48fd78cfd0c4055ffa619647/.autoenv.enter'
- 利用法
プロジェクトで利用する場合は、プロジェクトのディレクトリ以下にシンボリックリンクを貼ります。
cd {実際のプロジェクトのディレクトリ}
ln -s ~/.autoenv/.autoenv.enter .autoenv.enter
ln -s ~/.autoenv/.autoenv.leave .autoenv.leave
conda (Miniforge)
今回はminiforge
を使ってconda
環境を作成します。
インストール
手順
インストール可能なバージョンを確認し、インストールを実行します。
pyenv install -l | grep miniforge
pyenv install miniforge3-24.9.2-0
anyenv_env_update
環境作成
今回は、具体的な作業が決まっていたため、そのための環境を作成します。
手順
- ディレクトリを準備し、利用するPythonを設定
mkdir ai_sample
cd ai_sample
pyenv local miniforge3-24.9.2-0
- 仮想環境を作成
conda create -n ai_sample python=3.11.0
- autoenv の設定を実施
ln -s ~/.autoenv/.autoenv.enter .autoenv.enter
ln -s ~/.autoenv/.autoenv.leave .autoenv.leave
- 環境のactivate
autoenv は初回の呼び出し時に実行の許可を求めてくるのでy
を押して許可します。
$ cd ..
autoenv:
autoenv: WARNING:
autoenv: This is the first time you are about to source /.../.autoenv.leave:
...
autoenv: Are you sure you want to allow this? (y/N) y
$ cd ai_sample
autoenv:
autoenv: WARNING:
autoenv: This is the first time you are about to source /.../.autoenv.enter:
...
autoenv: Are you sure you want to allow this? (y/N) y
venv
同様にvenv
を用いた環境についてもテストの為、作成します。
手順
- ディレクトリの準備
mkdir py_sample
cd py_sample
- 必要なPythonのバージョンの準備
pyenv install 3.13.0
anyenv_env_update
pyenv local 3.13.0
- バージョンの確認
$ python -V
Python 3.13.0
- 仮想環境を作成
python -m venv .venv
- autoenv の設定を実施
ln -s ~/.autoenv/.autoenv.enter .autoenv.enter
ln -s ~/.autoenv/.autoenv.leave .autoenv.leave
- 環境のactivate
autoenv は初回の呼び出し時に実行の許可を求めてくるのでy
を押して許可します。
$ cd ..
autoenv:
autoenv: WARNING:
autoenv: This is the first time you are about to source /.../.autoenv.leave:
...
autoenv: Are you sure you want to allow this? (y/N) y
$ cd py_sample
autoenv:
autoenv: WARNING:
autoenv: This is the first time you are about to source /.../.autoenv.enter:
...
autoenv: Are you sure you want to allow this? (y/N) y
最後に
今回はM4 MacでのPython環境構築についてまとめました。個人的には可能な限りDockerで済ませたい気持ちはありますが、ローカル環境でサクッと試したい場合もあるので、今回の環境構築は役立つはずです。
参考文献
- Homebrew 経由の anyenv 経由の nodenv 経由で Node.js をインストールする
- anyenvをやめて良かった!asdf移行でシェル起動のイライラ解消
- 【Python】M1/M2 MacでPython環境の構築(pyenvとvenvのインストールと設定、そして使い方)
- Felo AIに聞いてみた結果
- 【Python】Anaconda、MinicondaではなくMiniforgeを使おう
- Autoenvを使う:環境管理への究極の近道
- pyenvでインストールしたanacondaでenvironmentを作成してactivateするまで
- 【python】No module named '_lzma'でつまずいた話
Discussion