Python の環境作成に今まで Pipenv という物を使っていた。node で言うと npm みたいな物だ。これがあまりにも遅いと苦情が出たので違うやつを探していたところ、検索すると Poetry https://python-poetry.org/ が比較的メジャーっぽい事が分かったので使ってみる。
Poetry とは、ある Python プロジェクトに必要なライブラリを簡単に準備する仕組みだ。他の Python プロジェクトと混ざらないように閉じた環境を作ってその中にライブラリをインストールする。Python 自体の実行ファイル選択には pyenv https://github.com/pyenv/pyenv という別の仕組みを使う。Node の NPM と比較すると次のようになる。
- 閉じた環境の作成:
- Python:
poetry install
で環境を作成してライブラリをインストールする。- ライブラリ本体は Virtual environment path という所に入る。
- Node:
npm install
で環境を作成してライブラリをインストールする。- ライブラリ本体は、
node_modules
ディレクトリに入る。
- ライブラリ本体は、
- Python:
- 実行ファイルの選択:
- Python:
pyenv local (version)
で Python のバージョンを指定する。- ディレクトリで勝手にバージョンが切り替わる。
-
.python-version
に使うバージョンが記載される。 - pyenv にも、pyenv-virtualenv という環境を作るプラグインがあるが使わない。
- Node:
nodebrew use (version)
等で Node のバージョンを指定する。- 特にディレクトリごとにバージョンを変える機能は無いと思う。
- Python:
始め方
Poetry インストール
久しぶりに https://python-poetry.org/docs/ を見ると pipx
を使ってインストールする紹介になっていた。
brew install pipx
pipx ensurepath
pipx install poetry
poetry 自体の更新
poetry self update
pyenv インストール
brew install pyenv
pyenv で Python バージョンを選択する
インストール可能バージョンを調べる
pyenv install --list
3.7.7 をインストール
pyenv install 3.7.7
このディレクトリでは 3.7.7 を使う。
pyenv local 3.7.7
プロジェクトを作る
サンプルプロジェクトを作って欲しい時 (新しく my-package という名前のフォルダが出来る)
poetry new my-package
質問に答えながらプロジェクトを作りたい時 (現在のフォルダにプロジェクトを作成する)
poetry init
プロジェクトを管理する
実行時に使うパッケージを追加する
poetry add (package)
開発時に使うパッケージを追加する
poetry add -D (package)
pyproject.toml もしくは poetry.lock に基づいてライブラリをインストール。デフォルトで dev 用もインストールする。
poetry install
pyproject.toml だけを見てライブラリを更新
poetry update
環境の削除
poetry env remove 3.7.7
プロジェクトのディレクトリに環境を作る
標準で poetry は ~/Library/Caches/pypoetry/virtualenvs のような所に環境を作る。プロジェクト以下の .venv に作りたい時は以下のようにする。
poetry config virtualenvs.in-project true
Pipenv から Poetry への移行
私はちびちび Pipfile を見ながら poetry add
して移行しました。poetry init
の後で pyproject.toml を直接編集して必要パッケージを記述してみましたが、その後の poetry install
が終わらなくなってしまいました。
その後一つづつ poetry add
していくと、どうやら poetry add -D awscli
で止まる事が分かりました。Poetry 側の問題なのか awscli の問題なのか分かりませんが、随分時間を無駄にしました。
あと、Poetry にはタスクランナーとしての機能が付いていないので(https://github.com/python-poetry/poetry/pull/591#issuecomment-504762152 を見てると将来も望み薄)、作業用スクリプトを Makefile 起動に切り替える必要がありました。
Poetry を使っての感想としては poetry install
はむしろ pipenv install
より遅かったですが他は速いのでまあ満足です。