The Future of Python Packaging

Page Status:Incomplete
Last Reviewed:2014-04-09

The distutils cross-platform build and distribution system was added to the Python standard library in late 2000. This means the current Python software distribution ecosystem (which builds on distutils) has a foundation that is almost 15 years old, which poses a variety of challenges to successful evolution.

The current effort to improve the situation started when the packaging library (also known as distutils2) failed to be accepted into the standard library for Python 3.3. That effort had spanned from 2009 to 2012.

The current effort is managed by the Python Packaging Authority (PyPA), in cooperation with members of the Python core development team.

Goals

  • To provide a relatively easy to use software distribution infrastructure that is also fast, reliable and reasonably secure. “Reasonably secure”, due to backwards compatibility constraints preventing turning off some insecure legacy features.
  • Although it’s still being defined, to work towards a “Meta-Packaging” [1] system that:
    • Clearly delineates the phases of distribution
    • Allows for multiple interacting tools vs one monolithic tool
    • Specifically allows for alternative build systems, i.e. a “MetaBuild” system.
  • To improve the docs for users, including the Python Packaging User Guide, anything related to packaging on docs.python.org, and the project docs for pip, setuptools, virtualenv, and wheel.
  • To be progressive, but also be very mindful to not break things that are currently working, due to haste.
  • To 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.

How to help

Presentations & Articles

In addition to this document, there have been some talks and presentations regarding current and future efforts related to packaging.

Major Todos

PyPI Infrastructure

  • Migration from the legacy PyPI server to Warehouse (the preview is available at https://warehouse.python.org/ running off the live PyPI data)
  • PEP458: An integration of PyPI with the “The Update Framework (TUF)”
  • Improved PyPI upload API

pip

Docs and Community

More PEPs

  • A “MetaBuild” PEP that would allow projects to specify alternative build systems (i.e. something other than setuptools).
  • Wheel 2.0

[1]See Nick Coghlan’s The Phases of Distribution and A Meta-Packaging System