Flit vs Poetry: Python パッケージングツールの比較
ビルドして公開したいだけのシンプルな純 Python パッケージには Flit を選び、ロックされた依存関係、virtualenv 管理、依存解決を 1 つのツールで扱いたい場合は Poetry を選びましょう。
Flit と Poetry はどちらも pyproject.toml から Python パッケージをビルドして公開しますが、対象とするスコープが異なります。Flit は意図的にミニマルで、ほとんど設定なしで純 Python パッケージをビルドしてアップロードします。Poetry は独自のリゾルバ、ロックファイル (poetry.lock)、環境処理を備えたフルなプロジェクト兼依存関係マネージャーです。
| Flit | Poetry | |
|---|---|---|
| スコープ | build + 公開のみ | 解決 + ロック + venv + build + 公開 |
| ロックファイル | なし | poetry.lock |
| 依存関係リゾルバ | なし (依存は自分で管理) | 組み込みリゾルバ |
| 最適な用途 | 純 Python ライブラリ | 複雑な依存を持つアプリとライブラリ |
| 設定 | pyproject.toml ([tool.flit]) | pyproject.toml ([tool.poetry]) |
| 公開 | flit publish | poetry publish |
それぞれが本当に優れている点
Flit はシンプルさで優れます。コンパイル拡張のない単一モジュールや純 Python パッケージなら、flit build と flit publish は可能な限り手間が少なくて済みます。Poetry は依存管理が重要な場面で優れます。推移的依存を解決してロックし、virtualenv を管理し、ライフサイクル全体で一貫した CLI を提供します。
CI では
Flit の pipeline はごく小さく、install、flit build、そして artifact のアップロードだけです。Poetry の pipeline は、poetry.lock から厳密な環境を復元する poetry install の恩恵を受け、runner 間で build を再現可能にします。シンプルなパッケージを公開するだけなら、Flit は CI 内の可動部品が少なくて済みます。
正直な注意点
Flit は解決もロックも行わないため、依存が多いプロジェクトや自明でない build ステップを持つプロジェクトには適したツールではありません。Poetry は歴史的に一部の PEP メタデータ標準から逸脱し、リゾルバは大きなグラフで遅くなることがありましたが改善されています。新しいツール (uv、PDM) は速度で直接競合しています。
結論
できる限りツールを少なくしたい、ミニマルな純 Python パッケージには Flit を選びましょう。パッケージングだけでなく、依存解決、ロックファイル、環境管理が必要なら Poetry を選びましょう。