On Thu, Jun 20, 2013 at 9:07 AM, Nick Coghlan <ncogh...@gmail.com> wrote:
> New versions of PEP 426 and PEP 440 are up on python.org:
>
> PEP 426 (metadata 2.0): http://www.python.org/dev/peps/pep-0426/
> PEP 440 (version spec): http://www.python.org/dev/peps/pep-0440/
>
> (as before, not including them inline due to sheer length)
>
> The bulk of the changes are in this commit:
> http://hg.python.org/peps/rev/de305af601fa
> (there are a few minor tweaks in subsequent commits to the PEPs repo)
>
> There have been several significant changes to the main metadata spec
> in PEP 426:
>
> * Added a basic "jsonschema" based description of the format
> * The "abbreviated metadata" notion is gone, replaced by "included
> documents". The metadata can now list the names of additional files
> included in the distinfo directory for the long description, the
> license and the change history. The contents are no longer embedded
> directly in the metadata (but will be extracted and made available by
> PyPI, with the markup format being determined from the file extension,
> just as it is by sites like GitHub)
> * The dependency system has been redesigned under the name "Semantic
> dependencies" (as they now allow a distribution to better say *why* a
> dependency is needed, rather than just saying "I need this" with
> almost no capacity to say why). There are now five kinds of
> dependencies (:meta:, :run:, :test:, :build: and :dev:) and they're
> integrated into the extras system so you can easily say you want to
> install some, none or all of them.
> * The "*" notation is added to extras to make it easier to say
> "install all dependencies", along with the "-extra_name" notation to
> exclude the dependencies for specific extras
> * The "-" notation is added to extras to make it easier to install
> *just* a distribution's dependencies, without installing the
> distribution itself.
> * "Install hooks" are now a distinct concept from the
> still-hypothetical "metabuild" system, and place more constraints on
> their expected handling (installation tools are also explicitly
> permitted to refuse to run them, but doing so is required to fail
> noisily rather than silently appearing to succeed)
>
> The most significant change to PEP 440 is to the handling of
> pre-releases: whether or not pre-releases should be accepted by
> default is now determined solely by whether or not there is a stable
> release that *also* satisfies the version specifier. Reference a
> pre-release (or not) now has no effect on whether pre-releases are
> considered viable candidates. Pre-releases are now accepted if:
> * they're already installed
> * there's no other available option
> * the installation tool is told specifically to consider them
>
> Other less significant changes to PEP 426 include:
>
> * Longer introduction giving more context for the nature and purpose
> of the metadata
> * Separated various other things out into appendices
> * Various tweaks to definitions (including the "Release" tweak from
> PEP 440, and switching "source archive" to refer to the original raw
> source, while using "sdist" for the Python specific format with the
> extra metadata)
> * Blanket permission for distribution related online services to
> impose additional restrictions to protect the integrity of the service
> (such as additional length limits beyond those stated in the PEP).
> * Explicitly require UTF-8 encoded JSON for serialisation
> * build_label renamed to source_label
> * version_url renamed to source_url
> * tightened up the validation rules for various fields (including RFC
> references where appropriate). Many of these "new" rules are things
> projects already comply with (because not complying doesn't work
> properly). Including them in the spec is about giving PyPI clear
> guidance to enforce them at point of upload, rather than leaving it to
> installation tools to try to sort out later.
> * a few more additions to the "Rejected Features" appendix (notably,
> my rationale for *not* requiring the install hooks to accept arbitrary
> keyword arguments)
>
> The other PEP 440 changes are also relatively minor:
>
> - what were previously called releases are now "final releases",
> freeing up "release" as a general term for any kind of release
> (developmental release, pre-release, final release, post release).
> - "source references" are now "direct references" and can also refer
> to prebuilt wheel files
> - automated tools (especially index servers) are given a lot of
> freedom to be opinionated about the appropriate uses for direct
> references
> - a few tweaks to the security guidelines for direct references
> - pytz/Olson database version translation is explicitly discussed (add
> a leading 0., convert the trailing letter to an incrementing number)
> - tighter rules for what characters are allowed in a source label
>
> The only major remaining open item is the addition of guidelines in
> Appendix A for converting legacy metadata to metadata 2.0. I consider
> the rest of the spec stable at this point, unless anyone picks up on a
> glaring hole in the latest draft that Daniel, Donald and I missed.
>
> Cheers,
> Nick.

FYI the tip revision of wheel (bdist_wheel,
https://bitbucket.org/dholth/wheel/) produces pymeta.json that is
almost up-to-date with this version of the spec, except that it still
inlines the description rather than saving it to a separate file.
bdist_wheel has always worked by converting setuptools metadata to PEP
metadata.
_______________________________________________
Distutils-SIG maillist  -  Distutils-SIG@python.org
http://mail.python.org/mailman/listinfo/distutils-sig

Reply via email to