M1 Macにpyenv+Poetryをインストールする
これまで Anaconda をずっと使ってきましたが,実行環境を他に移すときにトラブることが多いようです.その原因はパッケージのバージョン違いにあるようで,手動で解決すればまあいいわけですが,そこに時間を取られるのも残念.
というわけで,M1 搭載 Mac Mini の新環境に移るタイミングでなんか良さそうな Poetry を使ってみることにしました.
使い分け
Python 環境構築にあたって,二種類のパッケージを使用します.
- pyenv: Python 仮想環境管理
- poetry: パッケージ管理
Anaconda 仮想環境は上記の二つを一つにまとめたようなものでしたが,Poetry は調べた感じでは Python のバージョンは管理できないようなので,pyenv を併用します.
以下,インストールは Rosetta2 を経由せずに行います.
pyenv インストール
terminal
$ brew update
$ brew install pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
パスを通し忘れずに.
terminal
$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.zshrc
Python インストール
pyenv で Python をインストールします.
terminal
// show the list of installable versions
$ pyenv install --list
$ pyenv install 3.9.1
Python 3.9.1 は macOS Big Sur に対応した初のバージョンだそうです (Python Release Python 3.9.1 | Python.org).これ以降のバージョンは Universal 2 バイナリ対応,すなわち Apple Silicon に対応したものになります.
逆に,それ以前のバージョンは Rosetta2 で動かすことになります.知らずに homebrew でインストールしようとしたら以下のエラーが出ました.
Unexpected output of 'arch' on OSX
Poetry インストール
terminal
$ curl -sSL https://install.poetry-python.org | python3 -
インストール後,以下のパスを追加します.
.zshrc
export PATH="$HOME/.local/bin:$PATH"
Poetry アップデート
以下のコマンドでアップデートできます.
terminal
$ poetry self update
ただし,Poetryのバージョンが1.1以前である場合,このコマンドは利用できません.一旦アンインストールし,再インストールします.
get-poetry.py
でインストールした場合,アンインストールコマンドはないため,rm
コマンドで消します.
Poetry のプロジェクト管理
Anaconda は仮想環境単位での管理でしたが,Poetry はプロジェクト単位での管理になります.Node.js の package.json が Poetry の pyproject.toml になった感じです.
terminal
$ mkdir myproject
$ pyenv local 3.9.1
$ pyenv install
そもそも pyenv では global
は全体設定,local
は特定のディレクトリ内でのバージョン設定となっており,設定していれば local
が優先されます.
Poetry ではプロジェクトディレクトリを開いて local
コマンドでプロジェクトごとに Python バージョンを指定するのが良いようです.
VS Codeを利用する場合は,下記設定を行なっておくと良いと思います.