pip-tools vs Poetry: CIに適したPython依存関係ワークフローは?
pip-toolsは、素のpip/requirementsワークフローにlockfileを追加します。Poetryは、プロジェクト、依存関係、パッケージングを扱う完全なマネージャーです。
pip-tools(pip-compile/pip-sync)は、最小限の変更で標準のpipワークフローに再現可能で固定されたrequirementsを重ねます。Poetryは、pyproject.tomlから依存関係、lockfile、virtualenv、パッケージングを管理するオールインワンツールです。
| pip-tools | Poetry | |
|---|---|---|
| スコープ | requirementsの上のlockfile | 依存関係 + venv + パッケージング |
| Lockfile | requirements.txt(コンパイル済み) | poetry.lock |
| 設定 | requirements.in / pyproject | pyproject.toml |
| パッケージング/公開 | 別途(build/twine) | 組み込み |
| 学習曲線 | 低い(pipに近い) | 高め(独自ワークフロー) |
CIでは
pip-toolsは、なじみのあるpip/requirementsの道を保ちつつ、コンパイルされ固定されたlockfileを追加します - ツールを変えずに再現性が欲しいチームにとって摩擦が少ないです。Poetryはワークフロー全体を、依存関係の解決、virtualenv、パッケージングを1つのツールで置き換えるので、公開するライブラリやアプリに便利です。どちらもlockからインストールすればCIで決定的なインストールが得られます。
キャッシュする
コンパイルされたrequirementsまたはpoetry.lockをキーにしたwheel/ダウンロードのcacheをキャッシュし、クリーンなインストールにはpip-syncまたはpoetry install --no-rootを使ってください。インストールはCIのrunner上で実行されます。それがジョブ時間の大半を占めるなら、より高速なマネージドrunnerが最も役立ちます。
結論
素のpipに近いまま再現性が欲しいなら: pip-tools。依存関係、venv、パッケージングを1つのツールで扱いたいなら: Poetry。どちらでもlockfileをコミットし、そこから決定的にインストールしてください。