はじめに
2020 年の Python パッケージ管理ベストプラクティスがバズっていたので調べてみたところ、以前から気になっていたPoetryがかなり良くなっているということなので、Pipenvから移行してみた。
環境
OS: macOS 10.15 Catalina
Shell: Fish
Poetryのインストール
pip install poetry
環境変数設定
Pipenvでは、仮想環境がプロジェクトフォルダに作成されるように、以下のように設定していた。
export PIPENV_VENV_IN_PROJECT=true
Poetryでは以下のように設定すれば良いらしい。
poetry config --list
poetry config virtualenvs.in-project true
#Pipfile→pyproject.toml
Poetryではpyproject.tomlでライブラリを管理するため、変換が必要になる。
幸いにも、変換ツールpoetrifyが公開されているので、それを用いることにする(詳しくは作者のブログを参照)。
pip install poetrify
cd example/
poetrify generate
試しにPipfileを変換してみるとうまくいった。
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
black = "==18.3a1"
mypy = "*"
pytest = "*"
[packages]
numpy = "*"
scipy = "*"
plotly = "*"
sklearn = "*"
[requires]
python_version = "3.7"
[tool.poetry]
name = "exampy"
version = "0.1.0"
description = ""
authors = ["ryoppippi <1560508+ryoppippi@users.noreply.github.com>"]
[tool.poetry.dependencies]
python = "^3.7"
numpy = "^1.17.4"
scipy = "^1.4.1"
plotly = "^4.4.1"
sklearn = "^0.0"
[tool.poetry.dev-dependencies]
black = "^19.10b0"
mypy = "^0.761"
pytest = "^5.3.2"
[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"
仮想環境の構築
以下を実行すると仮想環境の構築、poetry.lock
ファイルの作成が行われ、仮想環境が起動する。
poetry shell
Fish向けプラグイン
筆者はFishをシェルとして使用しているが、Pipenv時代にはfish-pipenvというプラグインを愛用していた。
このプラグインは、pipenvで構築したプロジェクトのディレクトリに移動した時に自動で仮想環境をactivateしてくれる優れものであった。
残念ながらPoetry用にはまだ同等のものがなかったので、今回自作した。是非とも活用して欲しい。
fish-poetry
まとめ
Pyenvとの連携が若干微妙だったりと不満点もなくはないが、圧倒的にlockが早く終わるなど利点も多い。順次Poetryに移行していこうと思う。