みなさんこんにちは!
M1 MacにはデフォルトでPythonがインストールされていますが、Python本体のバージョンやパッケージを案件個別に管理したいケースが多く、デフォルトのPythonを利用した開発を行う人はあんまりいないと思います。
Pythonのパッケージ管理ツールとしてはPipenvとPoetryの2強だと思いますが、今回は最近勢いのあるPoetryでM1 MacのPython実行環境を構築する方法を紹介していきます。
それに付随して、Python自体のバージョン管理ツールとしてPyenvを併用していきます。
homebrewのインストール
まずはPyenvをインストールしていきますが、最初にhomebrewをインストールする必要があります。
ターミナルを開き、以下のコマンドを実行するとインストールできます。
参考: https://brew.sh/
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
インストールされたかどうかは以下のコマンドで確認できます。
% brew --version
Homebrew 4.0.5
Homebrew/homebrew-core (git revision 92a61f8a21a; last commit 2023-02-17)
Homebrew/homebrew-cask (git revision 2ae6e86efe; last commit 2023-02-16)
既にダウンロードされていた方はアップデートすることをお勧めします。
brew update && brew upgrade
Pyenvのインストール
homebrewがインストールされていれば以下のコマンドでインストール可能です。
参考: https://github.com/pyenv/pyenv
brew install pyenv
インストールが完了した後はPathを通す必要があるので以下のコマンドを実行してください。
(M1のデフォルトのshellはzshなので、それを前提にしていますが、bashなどを利用している方は適宜読み替えてください。)
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
source ~/.zshrc
以下のようにバージョンが表示されればインストール完了です。
% pyenv --version
pyenv 2.3.14
バージョンが古いときは以下のようにしてPyenv自体をアップデートできます。
brew update && brew upgrade pyenv
PyenvでPythonをインストール
インストールするpythonを確認し、インストールします。
pyenv install --list
pyenv install 3.10.10
使用するバージョンを決定します。
globalはマシン全体の設定で、localはそのディレクトリ(プロジェクト)内固有の設定になります。
とりあえずどっちも設定しておきましょう。
pyenv versions
pyenv global 3.10.10
pyenv local 3.10.10
pyenv local
の設定を行うとフォルダ内に、.python-version
というファイルができますが、これによってディレクトリ内で利用するPythonのバージョンを判定していますので、削除しないようにしてください。
設定がうまくいっていればpythonのバージョンが指定したものに変更されているのが確認できると思います。
% python --version
Python 3.10.10
Poetryをインストールする
参考: https://python-poetry.org/docs/
以下のようにインストールを行います。
curl -sSL https://install.python-poetry.org | python -
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
正常にインストールされていれば以下のような表示がされます。
% poetry --version
Poetry (version 1.3.2)
Poetry自体は以下のコマンドでアップデートできます。
% poetry self update
Updating Poetry version ...
Using version ^1.4.0 for poetry
...
% poetry --version
Poetry (version 1.4.0)
削除したい場合は以下のコマンドで削除できます。
curl -sSL https://install.python-poetry.org | python - --uninstall
Poetryを利用する目的として、「プロジェクトごとにパッケージを管理したい」という理由が大きいと思いますが、以下のコマンドを実行kすると、ディレクトリの中に.venvフォルダ、つまり仮想環境を作成できるので管理が楽になります。
poetry config virtualenvs.in-project true
プロジェクトを作成する
必要なツールが揃ったので、Poetryでプロジェクトを作成してみましょう。
% poetry new poetry-demo
...
% ls -al .
total 8
drwxr-xr-x 6 hogehoge staff 192B 3 13 18:02 poetry-demo/
poetry-demo
ディレクトリが生成されているのを確認できると思います。
次にディレクトリに入って仮想環境を作成し、有効化してみましょう。
% cd poetry-demo/
% poetry install
% poetry shell
% python -V
Python 3.9.16
おっと、Pythonのバージョンが3.9系になってしまっていますね。
pyproject.toml
というファイルを覗くと以下のようになっていました。
[tool.poetry]
name = "poetry-demo"
version = "0.1.0"
description = ""
authors = [""]
readme = "README.md"
packages = [{include = "poetry_demo"}]
[tool.poetry.dependencies]
python = "^3.9"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
以下の箇所に注目すると、Pythonのバージョンが3.9以上であれば何でもOK!というふうに設定ファイルが定義されていることがわかります。
[tool.poetry.dependencies]
python = "^3.9"
これは以下のコマンドで対応可能です。
仮想環境の中で以下を実行してください。
% poetry env use 3.10.10
% python -V
Python 3.10.10
求めているバージョンになりましたね!
ただし、このままでは他の人がプロジェクトを開始するときに同じく3.9系が利用されてしまう可能性があるので、pyproject.toml
の記述は以下のように変更しておくことをお勧めします。
[tool.poetry.dependencies]
python = "^3.10"
また、poetry.lock
も更新しておく必要があるため、実際の運用をする際には.venv
ディレクトリを削除して再構築し直すのが望ましいでしょう。
% rm -rf .venv/
% pyenv local 3.10.10
% poetry env use 3.10.10
% poetry install
終わりに
以上が、M1 Macでpyenvとpoetryを使ってPythonの環境を構築する手順です。これで、複数のPythonバージョンを使い分けたり、プロジェクトごとに環境を分離したりすることができます。