PyPI’s PEP 517/518 build system lets you declare a build backend and dependencies in pyproject.toml, creating isolated, reproducible wheels. Learn how to migrate from setup.py, see a concrete example, and weigh the trade‑offs.
Python projects still use fragile setup.py files. Switching to pyproject.toml centralizes metadata, separates packaging from runtime, and unlocks modern build backends like Poetry. This blog walks through the why, how, and trade‑offs with a concrete example and actionable next steps.
Poetry 1.2+ dependency groups keep dev tooling out of published wheels, while extras remain the only way to let downstream users select optional features via pip. Use both: groups for test/lint/docs, extras for public feature flags like [redis] or [async].
Learn how to publish a Python package on PyPI using the modern PEP 517/518 build system. This guide walks you through configuring pyproject.toml, building, validating, and uploading to Test PyPI before the final release.
Stop fighting 'dependency drift.' Learn how Poetry uses pyproject.toml and deterministic lockfiles to ensure your Python environments are identical across all stages.
Decide where each non-core dependency lives in a Poetry project: groups for internal tooling, extras for user-facing optional features, markers for platform conditions — with a concrete pyproject.toml layout, install commands per environment, and validation steps.
Since mid 2022 it is now possible to get rid of setup.py , setup.cfg in favor of pyproject.toml . Editable installs work with recent versions of setuptools and pip and even the official packaging tutorial switched away from setup.py to pyproject.toml . However, documentation regarding requirements.txt seems to be have been also removed, and I wonder where to
Background I was about to try Python package downloaded from GitHub, and realized that it did not have a setup.py , so I could not install it with pip install -e <folder> Instead, the package had a pyproject.toml file which seems to have very similar entries as the setup.py usually has. What I found Googling lead me into PEP-518 and it gives some criti