Poetry
A Python tool, written in Python, that resolves a project’s dependencies into poetry.lock, keeps a virtualenv per project and builds and publishes packages.
- What it is
- Package managers
- Type
- Open source
- Made by
- Poetry project (python-poetry), created by Sébastien Eustace
- License
- MIT
- Facts checked
- 9 October 2026
What it is
Poetry keeps everything about a project in pyproject.toml. Since Poetry 2.0 (January 2025) that means the standard [project] table; older projects use [tool.poetry]. poetry add pydantic picks a caret range (^2.14.0, written as >=2.14.0,<3.0.0), resolves the whole dependency tree, installs it into the project’s virtualenv (by default under Poetry’s cache directory) and writes the exact versions and file hashes to poetry.lock, which covers every platform at once. Since 2.0 the lockfile also records which dependency group and environment markers each package belongs to. poetry install on another machine installs exactly those versions, poetry build makes wheels and sdists with the poetry-core build backend, and poetry publish uploads them. Development dependencies go into groups; since 2.2 (September 2025) Poetry also reads and writes the standard PEP 735 [dependency-groups] table.
Poetry itself is a Python application and must be installed in its own isolated environment, with pipx or the official installer, never into the project it manages. Version 2.1 added an experimental poetry python install that downloads standalone Python builds. Extras live in plugins: since 2.0, poetry export (which can write pylock.toml since 2.3) and poetry shell are no longer built in. The project is actively maintained; 2.5.0 shipped in September 2026.
Why teams pick it
- Mature: dependency management, locking, virtualenvs, building and publishing in one tool since 2018
- One lockfile for every platform, now with groups and markers recorded per package
- Caught up with the standards: PEP 621
[project]metadata (2.0) and PEP 735 dependency groups (2.2) - A plugin system (since 1.2) for features the core leaves out, and projects can declare the plugins they need
Watch out for
- Resolution can be slow when packages don’t publish their metadata through PyPI’s JSON API: Poetry then downloads them to inspect, and its FAQ admits there is no way around it
- Being written in Python means installing Poetry into its own environment, separate from the interpreter each project uses
- Poetry 2.0 broke habits:
poetry shellandpoetry exportmoved to plugins andpoetry lockstopped updating versions by default poetry.lockis Poetry’s own format; the standardpylock.tomlis only available through the export plugin
Alternatives
What all package managers have in common →How it fits with other technologies
What Poetry uses
Add dependencies, lock them and reinstall from the lockfile (Poetry 2.4) · bash
poetry new demo && cd demo # [project] metadata, src layout, poetry-core backend
poetry add pydantic
# Using version ^2.14.0 for pydantic
# Writing lock file
grep pydantic pyproject.toml # "pydantic (>=2.14.0,<3.0.0)"
poetry add --group dev ruff # lands in [dependency-groups] dev (PEP 735)
poetry check --lock # All set! (pyproject.toml and poetry.lock agree)
poetry env remove --all && poetry install
# Installing dependencies from lock file
# Package operations: 6 installs, 0 updates, 0 removals
poetry run python -c "import pydantic; print(pydantic.VERSION)" # 2.14.0See it in a real stack
No architecture uses Poetry yet. Drop it into the playground and wire it up yourself.Open playground →Where it came from2018–2026
In 2018 a Python project typically spread its metadata over setup.py, setup.cfg, requirements.txt, MANIFEST.in and, for Pipenv users, a Pipfile. Sébastien Eustace, also the author of the Pendulum datetime library, released Poetry 0.1.0 on 28 February 2018 to replace all of them with a single pyproject.toml, a resolver and a lockfile.
Poetry 1.0 followed in December 2019, with Eustace thanking their employer at the time, PeopleDoc, for time to work on it. Version 1.2 (August 2022) added dependency groups, a new installer and an experimental plugin system, and later releases moved non-core commands such as export into plugins.
As standards for project metadata, dependency groups and lockfiles were adopted, Poetry followed them: the standard [project] table in 2.0 (January 2025), PEP 735 dependency groups in 2.2 (September 2025) and pylock.toml export in 2.3 (January 2026). It now competes with uv, which covers the same ground.
Why it’s built this way
pyproject.tomlas the only project file- One file replaced
setup.py,setup.cfg,requirements.txt,MANIFEST.inandPipfile, so dependencies, metadata and build settings could no longer drift apart. - Caret ranges by default
poetry addwrites^2.14.0, allowing any update that keeps the left-most non-zero digit, so projects pick up fixes without accepting the next breaking release.- A lockfile for every platform
poetry.lockis platform-independent, unlike the requirements files pip-tools locks for one platform, so teams on different operating systems share one file.- A small core with plugins
- The plugin system (1.2) let users adapt Poetry without forking it, and let the maintainers move commands such as
exportandshellout of the core in 2.0.
Timeline
- 2018
Poetry 0.1.0, 28 February
- 2019
Poetry 1.0 in December
- 2022
1.2: dependency groups, a new installer and plugins
- 2025
2.0 adopts the standard
[project]table; 2.2 adds PEP 735 dependency groups - 2026
2.3 exports
pylock.tomlvia plugin; 2.5 adds a built-in uninstaller
- Poetry README
- GitHub profile of Sébastien Eustace (creator of Poetry and Pendulum)
- Poetry history (changelog, from 0.1.0 on 2018-02-28)
- Poetry blog: Announcing Poetry 1.0.0 (Dec 2019)
- Poetry blog: Announcing Poetry 1.2.0 (Aug 2022)
- Poetry blog: Announcing Poetry 2.0.0 (Jan 2025)
- Poetry blog: Announcing Poetry 2.5.0 (Sep 2026)
- Astral blog: uv, Python packaging in Rust (Feb 2024; lockfiles compared with Poetry)
Sources12 · facts checked 9 October 2026
- Poetry docs: Introduction (requirements, isolated installation)
- Poetry docs: Basic usage (poetry.lock, virtualenv location)
- Poetry docs: Managing dependencies (groups)
- Poetry docs: Dependency specification (caret requirements)
- Poetry docs: Managing environments
- Poetry docs: Commands (python install, experimental since 2.1.0)
- Poetry docs: FAQ (why dependency resolution is slow)
- Poetry docs: The pyproject.toml file
- Poetry blog: Announcing Poetry 2.0.0 (Jan 2025)
- Poetry blog: Announcing Poetry 2.5.0 (Sep 2026)
- Poetry history (2.2.0 PEP 735 support, 2.3.0 pylock.toml export)
- Poetry README