M1 MacのPython環境 ~pyenv + poetry ~

Apple Silicon Macでpyenvを使ってpython環境を用意する時に、MacOSX-arm64でbuildできないpythonのdistributionを指定してダウンロードするとできない場合がある。それとpoetryの使い方などをメモ。

構成としては ・バージョン管理はpyenv ・パッケージ管理はpoetry


how to install pyenv

homebrewでpyenvをインストール

brew install pyenv

そして.bashrcか.zshrcなどシェル設定に以下を追加

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"

if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init -)"
fi

これでおk Reference : Getting Pyenv


use pyenv

pythonのバージョンをインストールする前に注意することとしては、 apple silicon用のdistributeがあるバージョンしかpyenvでinstall出来ない。 古いpython環境を作るときはめんどい可能性がある。

たとえば普通にanacondaをインストールしようとたところ

pyenv install anaconda3-5.3.1

ERROR: The binary distribution of Anaconda3 is not available for MacOSX-arm64.

と言われた。apple silicon対応のdistributionを探したところ anaconda3-2022.05 だと大丈夫らしい。

pyenv install anaconda3-2022.05

これでok。 他のバージョンも新しめのpythonなら大丈夫そうだが、古いと怪しい。


how to install poetry

curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3

設定変更 venv のファイルをプロジェクトディレクトリの下に置くようにに変更(好み)

poetry config virtualenvs.in-project true

use poetry

mkdir sample-project # 新しいプロジェクトディレクトリを作成
cd sample-project # ディレクトリに移動
pyenv local 3.9.12 # pyenvでバージョンを指定
poetry init # poetry 初期化

pyproject.tomlができる poetryでバージョン確認

poetry env info

Virtualenv
Python:         3.10.8
Implementation: CPython
Path:           /Users/gollowars/Desktop/testpy/.venv
Executable:     /Users/gollowars/Desktop/testpy/.venv/bin/python
Valid:          True

System
Platform:   darwin
OS:         posix
Python:     3.10.8
Path:       /opt/homebrew/opt/python@3.10/Frameworks/Python.framework/Versions/3.10
Executable: /opt/homebrew/opt/python@3.10/Frameworks/Python.framework/Versions/3.10/bin/python3.10

先ほど作られたpyproject.tomlの中に記述されているpythonのバージョンを、 使いたいpythonのバージョンに変更する。

[tool.poetry]
name = "testpy"
version = "0.1.0"
description = ""
authors = ["gollowars <ashikawa@mud.co.jp>"]
readme = "README.md"

[tool.poetry.dependencies]
# python = "^3.10"
python = "^3.9.12" # ここを変更


[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

変更後に

poetry env use 3.9.12

うまくいかない時

pyenv versions
3.11.0(set by PYENV_VERSION environment variable)

が設定されちゃってて、pyenv localなどが効かない場合の変更方法

pyenv shell --unset

poetryでpythonのバージョンを変更したい場合

rm -rf .venv
rm poetry.lock
pyenv local 3.9.2

pyproject.tomlのpythonバージョンを変更し保存

poetry env use 3.9.2
poetry install

でおk

reference: poetry | ゼロから学ぶPython