Skip to content
Latchkey

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-toolsPoetry
スコープrequirementsの上のlockfile依存関係 + venv + パッケージング
Lockfilerequirements.txt(コンパイル済み)poetry.lock
設定requirements.in / pyprojectpyproject.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をコミットし、そこから決定的にインストールしてください。

関連ガイド