[Distutils] PEP 440 ad PEP 508 requirement formats

Nick Coghlan ncoghlan at gmail.com
Sat Jan 16 10:46:59 EST 2016

On 16 January 2016 at 00:12, Paul Moore <p.f.moore at gmail.com> wrote:
> Pip refers to PEP 440 when defining the format of a requirement (see
> https://pip.pypa.io/en/stable/reference/pip_install/#requirement-specifiers).
> But PEP 508 *also* defines a requirement - the title implies that it's
> for dependency specification, but the content of the PEP says "the
> language defined is a compact line based format which is already in
> widespread use in pip requirements files".
> So what's the relationship between PEP 440 and PEP 508? Which one is
> the definitive definition of what is a "requirement"? The "packaging"
> library implements specifiers which conform (according to the docs) to
> PEP 440.

As Donald already noted, 508 is the higher level specification, that
includes 440 by reference to cover the "version specifier" section of
a full dependency specifier

The key parts that 508 adds above and beyond 440 are:

- package names (the current rules were previously only given in the 426 draft)
- extras
- environment markers

The main benefit of keeping the two levels separate is that there's a
*lot* of arcana in PEP 440 around version ordering and how that
relates to version comparison operators that you don't really need to
think about when working at the level of processing a list of
dependency specifiers.


Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia

More information about the Distutils-SIG mailing list