Why Doesn't the Authoritative Python Packaging Guide Mention the Best Thing that's Happened to Python Packaging?
Despite uv’s meteoric rise and widespread adoption in the Python community over the last year, the excellent and official Python Packaging User Guide (PPUG) at packaging.python.org makes no mention of it. Understanding why this is requires some background knowledge and unveils understanding of the modern Python developer tooling ecosystem.
uv’s Rise
Since its introduction in early 2024, uv has rapidly gained traction as a high-performance alternative to existing Python tooling. uv delivers 10-100x faster package operations than traditional tools while consolidating functionality previously spread across multiple utilities (pip, pip-tools, virtualenv, pyenv, and more). Its performance advantages, cross-platform support, and unified approach have made it increasingly popular among Python developers.
The Python Packaging Authority (PyPA)
The PyPA emerged in 2011 as a loose working group focused on maintaining core Python packaging tools, particularly pip and virtualenv. While its name suggests comprehensive authority over all Python packaging, its actual scope was and is more limited.
In 2019, PEP 609 formalized the PyPA’s governance model. This PEP clarified that the PyPA’s primary role is maintaining specific projects rather than serving as a universal authority on Python packaging tools. In fact, the PyPA explicitly states it’s
specifically not focus at first on adding something to the standard library as our solution to our packaging problems. Adding something to the standard library is hard, and once it’s added, it’s a slow process to change it. Most of the current effort is largely focused on 3rd party projects.
The PyPA membership consists of a collection of important projects including pip, setuptools, wheel, and the Python Package Index (PyPI).
The Evolution of Python Packaging
Understanding this situation requires historical context:
- Python’s original packaging tool, distutils, was added to the standard library in 2000 but had significant limitations
- Setuptools emerged as a community-developed extension to overcome these limitations
- Despite not being part of the standard library, setuptools became the de facto tool for building packages
- Similarly, pip established itself as the standard package installer without official standard library inclusion
This pattern of community-developed tools becoming de facto standards without formal inclusion in the Python standard library has defined Python’s packaging ecosystem.
Breaking Free from Setuptools
Motivated by the limitations of setuptools, PEP 517 and PEP 518 marked a pivotal shift in 2017-2018. These standards defined interfaces that allowed alternative build systems to exist alongside setuptools, opening the door for innovation. This standardization sparked the development of numerous packaging tools, including hatch, flit, poetry, pdm, and eventually uv.
Crucially, none of these tools were designated as the “official” Python packaging tool or distributed with CPython. This deliberate neutrality encouraged competition and innovation while maintaining interoperability through standards.
The Python Packaging User Guide
Since 2013, the PyPA has maintained the Python Packaging User Guide (PPUG), an invaluable resource for developers navigating the packaging ecosystem. However, the guide predominantly focuses on PyPA member projects rather than attempting to cover the entire ecosystem of packaging tools.
This focus explains uv’s absence: as a non-PyPA project, uv falls outside the guide’s scope, regardless of its popularity or technical merits.
Somewhat confusing, however, is the PyPA’s description of this guide as the “authoritative resource on how to package, publish, and install Python projects using current tools.” Perhaps it would be better described as the authoritative resource using tools in the PyPA umbrella.
A Standards-Based Ecosystem
Python’s packaging ecosystem has evolved into a remarkably flexible system held together by carefully constructed standards rather than official tooling. This approach has fostered innovation but created challenges for newcomers navigating the proliferation of options.
The Python core developers have deliberately avoided declaring any particular packaging tool as “official,” focusing instead on standards that enable interoperability. This reflects Python’s broader philosophy of providing multiple approaches to solve problems.