uv vs Poetry: Python Project Management Compared
Both manage a project, resolve dependencies, and write a lockfile; uv is faster and newer, Poetry is the mature, widely documented standard.
uv and Poetry both go beyond raw installs: they model a project, lock the full dependency graph, and manage virtual environments. uv (Rust) optimizes for speed; Poetry has years of adoption, plugins, and ecosystem familiarity.
| uv | Poetry | |
|---|---|---|
| Language | Rust | Python |
| Lockfile | uv.lock | poetry.lock |
| Resolve/install speed | Very fast | Slower, especially on big graphs |
| Packaging/publish | uv build / uv publish | poetry build / poetry publish |
| Maturity & docs | Newer, evolving fast | Mature, broad ecosystem |
Where uv wins
On large dependency graphs uv resolves and installs far faster, which compounds across every CI run. A single tool covers installing, locking, running, and building. The pyproject-based workflow is familiar to Poetry users, easing migration.
Where Poetry wins
Poetry has years of production use, extensive documentation, a plugin ecosystem, and predictable behavior that many teams already standardize on. If your team, tooling, or CI templates assume Poetry, the switch may not be worth the churn. Poetry resolver behavior is well understood and battle-tested.
In CI
Commit the lockfile (uv.lock or poetry.lock) and cache by its hash. uv sync and poetry install --no-root both give deterministic installs. The main practical difference you will feel in pipelines is wall-clock install time.
The verdict
Choose uv for speed and a single fast toolchain, especially on large projects or busy pipelines; stick with Poetry when its maturity, ecosystem, and your existing conventions outweigh the speed gain. Both produce reproducible, lockfile-driven builds.