PyPI and PyPA

PyPI and PyPA#

Historically, Python packaging and dependencies handling was a mess. One of the issue was about the tendencies to put everything in the same Python and abuse PYTHONPATH. Here, we present modern Python packaging and installation methods.

About Packaging#

  • A Python project: the raw source (repository or tarball, not only Python files), the sdist (an archive containing the source of a Python package) and the wheels (an archive containing the compiled Python package, specific to an OS/architecture and ready to be installed)

  • PEP 518 (pyproject.toml) and PEP 517 (frontends/backends and isolated builds)

  • A large diversity of choice for PEP 517 frontends (Pip, Build, PDM, …) and PEP 517 backends (setuptools, Flit, Meson, …)

For users#

  • PyPI (also known as the “cheese shop”) providing sdists and wheels

  • Virtual environments (venv, Virtualenv, …)

  • Python project managers (PDM, UV, Hatch, Poetry, …) inspired from NodeJS and Rust tooling

  • Notions of declared requirements, freeze and lock files (result of the dependency resolution)