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.
PyPA: its tools (Pip, Build, …), its PEPs and its official guide https://packaging.python.org
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)