PoetryをFishで使う(Pipenvからの移行)


はじめに

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を変換してみるとうまくいった。

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"
pyproject.toml
[tool.poetry]
name = "exampy"
version = "0.1.0"
description = ""
authors = ["ryoppippi <[email protected]>"]

[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に移行していこうと思う。