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を利用する場合は,下記設定を行なっておくと良いと思います.

https://blog.mktia.com/poetry-configuration-for-vscode

参考:Managing environments | Documentation | Poetry