I have had to understand Python packaging in depth on a number of occasions lately, both in my private development efforts and at my place of employment. For my own sake and simply to help others, I'd like to share what I consider valuable insight and information -- to save others time and effort, if mine was anything to judge by.
Python packaging has come further since people had to express everything with setup.py
and more importantly without pyproject.toml
. PEP 517 standardises how tools like Pip will execute building, in fact, and the standardisation basically makes it an entirely customizable process starting already with the so-called build backend. That's the value of build-backend
in your pyproject.toml
. A number of build backends have been developed now -- Poetry, Flit, Hatchling and others. Setuptools, a further development of disttools
that used to ship with Python, has also been standardized to offer a build backend -- if the pyproject.toml
specifies `build-backend = "setuptools