PEP Summaries

Page Status:Complete
Last Reviewed:2014-08-25

Summaries for the currently relevant PEPs in the space of Python installation and packaging.

PEP376 Database of Installed Python Distributions

PEP Link:

PEP376

PEP Status:

Accepted

Summary:

Describes a new .dist-info directory structure and system of metadata to be used when installing distributions.

User Impact:

This has very little implication for users, except to be aware of the format if they go hunting through their site-packages.

Note

PEP426 will likely spawn a child PEP that updates this to use a json-based system of metadata.

Implementation:

Currently, the bdist_wheel extension from the wheel project creates distributions using this structure, and setuptools and pip are equipped to manage distributions installed in this way. There is also an implementation in distlib.

PEP425 Compatibility Tags for Built Distributions

PEP Link:

PEP425

PEP Status:

Accepted

Summary:

Specifies a tagging system to use in Built Distribution file names. The motivation for the system was to tag wheel distributions, which are covered in PEP427

Note

A revision to this PEP is likely due to simple tags like “linux_x86_64” not handling the variation within linux platforms. Because of this, PyPI currently blocks uploading linux platform-specific wheels and pip won’t install linux platform-specific wheels from PyPI.

User Impact:

As wheels become more common, users will notice the new tagging scheme in wheel filenames.

Implementation:

The bdist_wheel setuptools extensions generates wheels using this scheme, and pip’s wheel installer understands the scheme as of v1.4. The wheel builder in distlib also implements this scheme.

PEP427 The Wheel Binary Package Format 1.0

PEP Link:

PEP427

PEP Status:

Accepted

Summary:

Specifies a Built Distribution format, that is based on, but modernizes the Egg format. Wheel filenames conform to PEP425

Note

PEP426 will likely spawn a child PEP that updates this to use a json-based system of metadata.

User Impact:

Built distributions are fast to install.

Implementation:

The bdist_wheel setuptools extension (available from wheel) generates wheels, and pip supports installing wheels as of v1.4. There is also an implementation in distlib, which allows both building wheels and installing from wheels.

PEP438 Transitioning to release-file hosting on PyPI

PEP Link:PEP438
PEP Status:Accepted
Summary:Specifies a two-step plan to phase out the primary use of external download links on PyPI, for the sake of security and installation speed.
User Impact:pip (as of v1.5) will be faster and more secure by default.
Implementation:Both pip and PyPI made changes during 2013 to implement this PEP.

PEP453 Explicit bootstrapping of pip in Python installations

PEP Link:PEP453
PEP Status:Accepted
Summary:Proposes the inclusion of a method for explicitly bootstrapping pip as the default package manager for Python.
User Impact:pip will be available in some Python installations without users having to install it.
Implementation:The goal is to have this for Python 3.4. PEP453 includes an integration timeline.

PEP426 Metadata for Python Software Packages 2.0

PEP Link:PEP426
PEP Status:Draft
Summary:Specifies version 2.0 of the metadata format. Version 1.0 is specified in PEP241. Version 1.1 is specified in PEP314. Version 1.2 is specified in PEP345. This is a work in progress, and represents a major upgrade to the Packaging ecosystem. PEP440 is a child of this PEP, and more PEPs are likely to grow out of this, as it evolves.
User Impact:When this is accepted, users themselves will not do anything to adopt the new system, but rather projects like pip, setuptools, and PyPI will make changes to conform to it, and then surface new features and functionality to users that are based on top of the new system.
Implementation:Most of the PEP is implemented in distlib, including the dependency metadata. Since the PEP is still in flux, the distlib implementation lags behind the most recent PEP changes, but most of the functionality in the PEP is covered.

PEP440 Version Identification and Dependency Specification

PEP Link:PEP440
PEP Status:Accepted
Summary:Specifies a versioning system for Python projects that goes along with PEP426, and replaces PEP386. This system will be mostly consistent with how most people version their projects today.
User Impact:Users will have a clear specification for what’s proper versioning for Python projects.
Implementation:distlib has version classes that understand PEP440, and pip relies on distlib‘s implementation in specific cases. pip also has a work-in-progress PR that implements PEP440.

PEP458 Surviving a Compromise of PyPI

PEP Link:PEP458
PEP Status:Draft
Summary:Specifies an integration of PyPI with the “The Update Framework” (TUF).
User Impact:pip will be more secure against various types of security attacks on PyPI and protect users against them.
Implementation:Nothing at this time.

PEP470 Using Multi Index Support for External to PyPI Package File Hosting

PEP Link:PEP470
PEP Status:Draft
Summary:PyPI would no longer support projects configuring external hosting links that pip crawls and installs from automatically. Projects would be allowed to configure external index links, but pip would never install from them automatically, but instead, only give users an informational message about what command they would use to do the install. This PEP effectively reverts PEP438.
User Impact:This would obsolete pip’s --allow-external and --allow-unverified links, because PyPI itself wouldn’t contain external or unverified links.
Implementation:Nothing at this time.