Poetry 1.0: modern Python dependency management

Poetry 1.0 (December 2019) by Sébastien Eustace: Python dependency and packaging management with pyproject.toml, deterministic lock file, modern resolver. Alternative to traditional pip + setup.py + virtualenv.

Open SourceR&D PoetryPythonPackage Managementpyproject.tomlOpen Source

Python package management: historical chaos

Before Poetry the Python tool stack was fragmented: setup.py (imperative), requirements.txt (no transitive resolution), separate virtualenv, pipenv with performance issues. No modern standard equivalent to Cargo (Rust), npm (JS), bundler (Ruby).

Poetry, created by Sébastien Eustace in 2018, unifies everything. Version 1.0 is released on 12 December 2019. MIT licence.

What it provides

  • pyproject.toml as single project file (PEP 518/621)
  • Lock file (poetry.lock) deterministic, versioned
  • Modern resolver with SAT solver
  • Virtual env auto-managed
  • Build & publish to PyPI with poetry build && poetry publish
  • Dependency groups (dev, test, docs) separate
[tool.poetry]
name = "myapp"
version = "0.1.0"

[tool.poetry.dependencies]
python = "^3.10"
django = "^4.2"
requests = "^2.31"

[tool.poetry.group.dev.dependencies]
pytest = "^7.4"

Adoption

Poetry becomes a popular choice for new Python projects, especially libraries and web applications. Shares space with pipenv (declining), uv (emerging successor in 2024), hatch (PyPA).


References: Poetry 1.0 (12 December 2019). Sébastien Eustace. MIT licence. pyproject.toml (PEP 518, 621). SAT solver resolver.

Need support? Under attack? Service Status
Need support? Under attack? Service Status