Phase 10 of 25 · Topic 10.5

Modern Packaging with pyproject.toml & Build Backends

1Concept

PEP 517/518 and PEP 621 standardized `pyproject.toml` as the universal configuration file for Python packaging, replacing `setup.py` and `requirements.txt`. It defines build backends (Hatch, Flit, Poetry, setuptools) and project metadata.

2Architecture Diagram

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[project]
name = "enterprise-sdk"
version = "1.0.0"

3Code Example

Python 3.12
pyproject_sample = '''
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[project]
name = "enterprise-api"
version = "2.0.0"
dependencies = ["fastapi>=0.110.0", "pydantic>=2.7.0"]
'''
print("=== Standard pyproject.toml Configuration ===")
print(pyproject_sample.strip())

4Expected Output

=== Standard pyproject.toml Configuration ===
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[project]
name = "enterprise-api"
version = "2.0.0"
dependencies = ["fastapi>=0.110.0", "pydantic>=2.7.0"]

5Key Takeaways

  • `pyproject.toml` eliminates arbitrary code execution during package installation (`pip install`).
  • Hatch and Poetry provide deterministic lockfile dependency resolution.
  • Standardizes linters (ruff, black, mypy) into a single configuration file.