Poetryとは?Pythonの依存関係管理とパッケージングを解説
PoetryはPythonのツールで、単一のpyproject.tomlから依存関係、仮想環境、パッケージングを管理し、再現性のあるインストールのためのlockfileを備えています。
Poetryは、JavaScriptやRustの開発者が享受しているlockfile駆動のオールインワンなワークフローをPythonにもたらします。requirementsファイル、setup.py、別個のvirtualenvツールを扱い分ける代わりに、すべてをpyproject.tomlに記述し、Poetryに解決、ロック、インストール、公開を任せます。
Poetryとは
PoetryはPythonプロジェクト向けの依存関係マネージャー兼buildツールです。標準のpyproject.tomlを読み書きし、完全な依存関係グラフを解決し、正確なバージョンをpoetry.lockに記録します。また、プロジェクト用の仮想環境を自動的に作成し管理します。
仕組み
「poetry add」で依存関係を宣言すると、Poetryは互換性のあるバージョンを解決してpoetry.lockに書き込みます。次に「poetry install」が、lockfileが指定するものを正確に、管理された仮想環境にインストールします。lockfileが解決済みのグラフ全体を捉えているため、どのマシンでもどのCI runnerでも同一の環境が得られます。
使用例
一般的な流れはadd、install、runです。
# add a dependency (updates pyproject.toml and poetry.lock)
poetry add requests
# install exactly from the lockfile
poetry install --no-interaction
# run a command inside the managed venv
poetry run pytestCI/CDでの役割
CIでは「poetry install --no-interaction」がロックされた環境を再現し、「poetry run」がその中でtestやbuildを実行します。Poetryのvirtualenvやそのcacheディレクトリを実行間でcacheすると、再解決と再ダウンロードを避けられます。lockfileはCIのbuildを決定論的にし、これがゆるいrequirementsファイルではなくPoetryを採用する主な理由です。
代替ツール
固定されたrequirementsファイルを使うpipが最小限のベースラインです。PDMは同様の標準ベースのマネージャーです。uvは、解決、ロック、インストールができる高速な新顔です。Poetryは、依存関係、環境、公開をカバーする成熟した統合ワークフローで際立っています。
重要なポイント
- Poetryはpyproject.tomlから依存関係、環境、パッケージングを管理します。
- poetry.lockは解決されたグラフ全体を固定し、再現性のあるインストールを実現します。
- CIでは「poetry install --no-interaction」を使い、virtualenvをcacheします。