この記事は KMC 2 Advent Calendar 2019 3日目の記事ということにしました。
Poetry
Python の Dependency Manager は pipenv
が有名で、自分もリリース当初から使っていた。ただ、最近はリリースが一年間されておらず、割と不安な状態*1。
最近は pipenv への対抗馬として Poetry が開発されているらしい。こちらは活発でリリースも頻繁にされており良い感じ。
pipenv で決まりだと思っていたのに… と思いながらも Poetry を使ってみた。
pipenv は Pipfile で依存パッケージを記述するが、Poetry では pyproject.toml を用いる。その他細かい使い方は README 参照。
感想
良かったところ
- ちゃんと使える
PyPI にアップロードするのがとても楽になる
pyproject.toml
に書いたらpoetry build && poetry publish
で終わり!依存解決が早い
- グラフィカルなコンソール表示
機能の取捨選択が良い
pipenv はおもてなし機能が多すぎると思う。
ソースコードがきれい
これは出たばかりだからかも。
poetry run
の実装を見たところ、ちゃんと os.exec
しているので安心した。
イマイチなところ
CLI のインターフェースは pipenv のほうが好き
poetry add
はinstall
コマンドにまとめて欲しい、とか。pyproject.toml
が無いときにadd
やinstall
しても、良しなにinit
されて動いて欲しい、とか。カスタマイズが弱い
単純にフラグが少なくて、要求とマッチせず困ることがある。
また、 pipenv ではフラグ類は基本的に環境変数で設定できるが、Poetry は一部のフラグしか設定できない。
まだ絶賛開発中である
時々バグっぽい挙動がある。作者が想定していそうなパッケージストラクチャを使っていれば動くが、そこから外れるとよく分からないエラーが出る。結局ソースコードを読むことになる。
(良い意味でも悪い意味でも)かっちりしている
パッケージ追加時において、pipenv はデフォルトのバージョン指定は
*
(どのバージョンでも ok)である。それに対して、 Poetry は^{current version}
となる。個人の開発レベルでは*
のほうが嬉しい(*
にする手段はある)。
結論
まだ開発中ではあるものの、パッケージマネージャとして欲しい機能がちょうど良く揃っていて良いソフトウェアだと感じた。特に setup.py
を生成してくれるのが魅力的で、PyPI にアップロードしようという気持ちにしてくれる。
もうすぐ 1.0 が出るらしいし、当面は Poetry で過ごそうと思う。
*1:master だけは進んでいる…