2020-09-28 03:58:34 -04:00
|
|
|
PEP: 639
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
Title: Improving License Clarity with Better Package Metadata
|
2022-04-19 03:26:30 -04:00
|
|
|
Author: Philippe Ombredanne <pombredanne@nexb.com>,
|
|
|
|
C.A.M. Gerlach <CAM.Gerlach@Gerlach.CAM>,
|
2024-05-10 00:04:17 -04:00
|
|
|
Karolina Surma <karolina.surma@gazeta.pl>,
|
2022-04-19 03:26:30 -04:00
|
|
|
PEP-Delegate: Brett Cannon <brett@python.org>
|
2024-05-10 03:52:08 -04:00
|
|
|
Discussions-To: https://discuss.python.org/t/53020
|
2024-08-29 14:30:14 -04:00
|
|
|
Status: Provisional
|
2020-09-28 03:58:34 -04:00
|
|
|
Type: Standards Track
|
2022-06-14 17:22:20 -04:00
|
|
|
Topic: Packaging
|
2020-10-16 15:39:49 -04:00
|
|
|
Created: 15-Aug-2019
|
2022-04-19 03:26:30 -04:00
|
|
|
Post-History: `15-Aug-2019 <https://discuss.python.org/t/2154>`__,
|
PEP 639: Further update per discussion, w/flat license key, etc. (#2705)
Substantive content changes:
* Instead of adding a new top-level `license-expression` key for the license expression in the `[project]` table of the `pyproject.toml` source metadata, the PEP now specifies using the top-level string value of the `license` key for this purpose, which PEP 621 (PEP-621) reserved it for, and updates the `license-expression` and `license` key specs, and the examples, rejected ideas and other sections accordingly.
* Since this makes it not possible to convert a legacy `license` key to the new `License-Expression` field at build time, and that's not really advisable anyway, it drastically simplifies the normative Converting Legacy Metadata section to just a single normative statement, and updates/removes other mentions of it accordingly, and the (already rather unhelpful) example
* Likewise, it simplifies and refines the guidance in the Mapping classifiers to SPDX identifiers section to be more general and less focused on build time, and also allows tools to ignore redundant parent classifiers (Note: This section will be moved to an external appendix in the next PR, but I didn't move it here for ease of review)
* The `license_files` directory was renamed to `licenses` at the request of @brettcannon and to simplify things a touch
* The specified handling of the `license.file` key was a bit confused by a (apparently quite common) misunderstanding about how the specified file is used (to inject its text directly under the `License` field in core metadata, rather than included in distribution archives or its path specified in metadata) due to it being rather underspecified in PEP 621, which this revision corrects.
* Bump the core metadata version to reflect acceptance of PEP 685 as Metadata 2.3
* Bump the SPDX license list version to be up to date
Significant non-normative/editorial changes:
* Mention implementation of drafts of this PEP in Hatch and Setuptools, and also describes previous efforts in Setuptools and Wheel that this PEP builds on more clearly, as suggested on the discussion thread
* Reference the canonical project [source] metadata PyPA spec instead of PEP 621, use clearer language surrounding that, and update a few references to other PEPs
* Revise the Motivations and Rationale to be less duplicative/redundant, more balanced and focused more specifically on their respective areas (providing some background and describing the problem, and introducing and justifying the proposed solution, respectively)
* Add a short blurb making explicit the use of RFC 2119 terminology (MUST, SHOULD, etc)
* Update PEP headers
* Various other minor revisions to correct typos and other issues, clarify and simply the text, and improve source formatting.
2022-08-02 23:43:25 -04:00
|
|
|
`17-Dec-2021 <https://discuss.python.org/t/12622>`__,
|
2024-05-10 03:52:08 -04:00
|
|
|
`10-May-2024 <https://discuss.python.org/t/53020>`__,
|
2024-08-29 14:30:14 -04:00
|
|
|
Resolution: https://discuss.python.org/t/53020/106
|
|
|
|
|
|
|
|
|
|
|
|
Provisional Acceptance
|
|
|
|
======================
|
|
|
|
|
|
|
|
This PEP has been **provisionally accepted**,
|
|
|
|
with the following required conditions before the PEP is made Final:
|
|
|
|
|
|
|
|
1. An implementation of the PEP in two build back-ends.
|
|
|
|
2. An implementation of the PEP in PyPI.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
|
|
|
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _639-abstract:
|
|
|
|
|
2020-09-28 03:58:34 -04:00
|
|
|
Abstract
|
|
|
|
========
|
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
This PEP defines a specification how licenses are documented in the Python
|
|
|
|
projects.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
To achieve that, it:
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
- Adopts the `SPDX license expression syntax <639-spdx_>`__ as a
|
|
|
|
means of expressing the license for a Python project.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
- Defines how to include license files within the projects, source and built
|
|
|
|
distributions.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
- Specifies the necessary changes to :term:`Core Metadata` and
|
|
|
|
the corresponding :term:`Pyproject Metadata key`\s
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-06-28 18:20:47 -04:00
|
|
|
- Describes the necessary changes to
|
|
|
|
the `source distribution (sdist) <sdistspec_>`__,
|
2024-05-10 00:04:17 -04:00
|
|
|
`built distribution (wheel) <wheelspec_>`__ and
|
|
|
|
`installed project <installedspec_>`__ standards.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
This will make license declaration simpler and less ambiguous for
|
|
|
|
package authors to create, end users to understand,
|
|
|
|
and tools to programmatically process.
|
2022-04-19 03:26:30 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
The changes will update the
|
|
|
|
`Core Metadata specification <coremetadataspec_>`__ to version 2.4.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _639-goals:
|
2020-09-28 03:58:34 -04:00
|
|
|
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
Goals
|
|
|
|
=====
|
|
|
|
|
2022-02-03 18:16:44 -05:00
|
|
|
This PEP's scope is limited to covering new mechanisms for documenting
|
2024-05-10 00:04:17 -04:00
|
|
|
the license of a :term:`distribution package`, specifically defining:
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
- A means of specifying a SPDX :term:`license expression`.
|
|
|
|
- A method of including license texts in :term:`distribution package`\s
|
|
|
|
and installed :term:`Project`\s.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
The changes that this PEP requires have been designed to minimize impact and
|
|
|
|
maximize backward compatibility.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
|
|
|
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _639-non-goals:
|
|
|
|
|
2020-09-28 03:58:34 -04:00
|
|
|
Non-Goals
|
|
|
|
=========
|
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
This PEP doesn't recommend any particular license to be chosen by any
|
|
|
|
particular package author.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
If projects decide not to use the new fields, no additional restrictions are
|
|
|
|
imposed by this PEP when uploading to PyPI.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
This PEP also is not about license documentation for individual files,
|
2022-04-19 03:26:30 -04:00
|
|
|
though this is a :ref:`surveyed topic <639-license-doc-source-files>`
|
2024-05-10 00:04:17 -04:00
|
|
|
in an appendix, nor does it intend to cover cases where the
|
|
|
|
:term:`source distribution <Source Distribution (or "sdist")>` and
|
|
|
|
:term:`binary distribution` packages don't have
|
|
|
|
:ref:`the same licenses <639-rejected-ideas-difference-license-source-binary>`.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
|
|
|
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _639-motivation:
|
|
|
|
|
2020-09-28 03:58:34 -04:00
|
|
|
Motivation
|
|
|
|
==========
|
|
|
|
|
PEP 639: Further update per discussion, w/flat license key, etc. (#2705)
Substantive content changes:
* Instead of adding a new top-level `license-expression` key for the license expression in the `[project]` table of the `pyproject.toml` source metadata, the PEP now specifies using the top-level string value of the `license` key for this purpose, which PEP 621 (PEP-621) reserved it for, and updates the `license-expression` and `license` key specs, and the examples, rejected ideas and other sections accordingly.
* Since this makes it not possible to convert a legacy `license` key to the new `License-Expression` field at build time, and that's not really advisable anyway, it drastically simplifies the normative Converting Legacy Metadata section to just a single normative statement, and updates/removes other mentions of it accordingly, and the (already rather unhelpful) example
* Likewise, it simplifies and refines the guidance in the Mapping classifiers to SPDX identifiers section to be more general and less focused on build time, and also allows tools to ignore redundant parent classifiers (Note: This section will be moved to an external appendix in the next PR, but I didn't move it here for ease of review)
* The `license_files` directory was renamed to `licenses` at the request of @brettcannon and to simplify things a touch
* The specified handling of the `license.file` key was a bit confused by a (apparently quite common) misunderstanding about how the specified file is used (to inject its text directly under the `License` field in core metadata, rather than included in distribution archives or its path specified in metadata) due to it being rather underspecified in PEP 621, which this revision corrects.
* Bump the core metadata version to reflect acceptance of PEP 685 as Metadata 2.3
* Bump the SPDX license list version to be up to date
Significant non-normative/editorial changes:
* Mention implementation of drafts of this PEP in Hatch and Setuptools, and also describes previous efforts in Setuptools and Wheel that this PEP builds on more clearly, as suggested on the discussion thread
* Reference the canonical project [source] metadata PyPA spec instead of PEP 621, use clearer language surrounding that, and update a few references to other PEPs
* Revise the Motivations and Rationale to be less duplicative/redundant, more balanced and focused more specifically on their respective areas (providing some background and describing the problem, and introducing and justifying the proposed solution, respectively)
* Add a short blurb making explicit the use of RFC 2119 terminology (MUST, SHOULD, etc)
* Update PEP headers
* Various other minor revisions to correct typos and other issues, clarify and simply the text, and improve source formatting.
2022-08-02 23:43:25 -04:00
|
|
|
Software must be licensed in order for anyone other than its creator to
|
2024-05-10 00:04:17 -04:00
|
|
|
download, use, share and modify it.
|
|
|
|
Today, there are multiple fields where licenses
|
|
|
|
are documented in :term:`Core Metadata`,
|
|
|
|
and there are limitations to what can be expressed in each of them.
|
|
|
|
This often leads to confusion both for package authors
|
|
|
|
and end users, including distribution re-packagers.
|
|
|
|
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
This has triggered a number of license-related discussions and issues,
|
2022-04-19 03:26:30 -04:00
|
|
|
including on `outdated and ambiguous PyPI classifiers <classifierissue_>`__,
|
|
|
|
`license interoperability with other ecosystems <interopissue_>`__,
|
|
|
|
`too many confusing license metadata options <packagingissue_>`__,
|
|
|
|
`limited support for license files in the Wheel project <wheelfiles_>`__, and
|
2024-06-28 18:20:47 -04:00
|
|
|
`the lack of precise license metadata <pepissue_>`__.
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
As a result, on average, Python packages tend to have more ambiguous and
|
|
|
|
missing license information than other common ecosystems. This is supported by
|
|
|
|
the `statistics page <cdstats_>`__ of the
|
2022-04-19 03:26:30 -04:00
|
|
|
`ClearlyDefined project <clearlydefined_>`__, an
|
2024-05-10 00:04:17 -04:00
|
|
|
`Open Source Initiative <osi_>`__ effort to help
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
improve licensing clarity of other FOSS projects, covering all packages
|
|
|
|
from PyPI, Maven, npm and Rubygems.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
The current license classifiers could be extended to include the full range of
|
|
|
|
the SPDX identifiers while deprecating the ambiguous classifiers
|
|
|
|
(such as ``License :: OSI Approved :: BSD License``).
|
|
|
|
|
|
|
|
However, there are multiple arguments against such an approach:
|
|
|
|
|
|
|
|
- It requires a great effort to duplicate the SPDX license list and keep it in
|
|
|
|
sync.
|
|
|
|
|
|
|
|
- It is a hard break in backward compatibility, forcing package authors
|
|
|
|
to update to new classifiers immediately when PyPI deprecates the old ones.
|
|
|
|
|
|
|
|
- It only covers packages under a single license;
|
|
|
|
it doesn't address projects that vendor dependencies (e.g. Setuptools),
|
|
|
|
offer a choice of licenses (e.g. Packaging) or were relicensed,
|
|
|
|
adapt code from other projects or contain fonts, images,
|
|
|
|
examples, binaries or other assets under other licenses.
|
|
|
|
|
|
|
|
- It requires both authors and tools understand and implement the PyPI-specific
|
|
|
|
classifier system.
|
|
|
|
|
|
|
|
- It does not provide as clear an indicator that a package
|
|
|
|
has adopted the new system, and should be treated accordingly.
|
|
|
|
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _639-rationale:
|
|
|
|
|
2020-09-28 03:58:34 -04:00
|
|
|
Rationale
|
|
|
|
=========
|
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
A survey was conducted to map the existing license metadata
|
|
|
|
definitions in the :ref:`Python ecosystem <639-license-doc-python>` and a
|
|
|
|
:ref:`variety of other packaging systems, Linux distributions,
|
|
|
|
language ecosystems and applications <639-license-doc-other-projects>`.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
The takeaways from the survey have guided the recommendations of this PEP:
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
- SPDX and SPDX-like syntaxes are the most popular :term:`license expression`\s
|
|
|
|
in many modern package systems.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
- Most Free and Open Source Software licenses require package authors to
|
|
|
|
include their full text in a :term:`Distribution Package`.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
Therefore, this PEP introduces two new Core Metadata fields:
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
- :ref:`License-Expression <639-spec-field-license-expression>` that
|
|
|
|
provides an unambiguous way to express the license of a package
|
|
|
|
using SPDX license expressions.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
- :ref:`License-File <639-spec-field-license-file>` that
|
|
|
|
offers a standardized way to include the full text of the license(s)
|
|
|
|
with the package when distributed,
|
|
|
|
and allows other tools consuming the :term:`Core Metadata`
|
|
|
|
to locate a :term:`distribution archive`'s license files.
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
Furthermore, this specification builds upon
|
PEP 639: Further update per discussion, w/flat license key, etc. (#2705)
Substantive content changes:
* Instead of adding a new top-level `license-expression` key for the license expression in the `[project]` table of the `pyproject.toml` source metadata, the PEP now specifies using the top-level string value of the `license` key for this purpose, which PEP 621 (PEP-621) reserved it for, and updates the `license-expression` and `license` key specs, and the examples, rejected ideas and other sections accordingly.
* Since this makes it not possible to convert a legacy `license` key to the new `License-Expression` field at build time, and that's not really advisable anyway, it drastically simplifies the normative Converting Legacy Metadata section to just a single normative statement, and updates/removes other mentions of it accordingly, and the (already rather unhelpful) example
* Likewise, it simplifies and refines the guidance in the Mapping classifiers to SPDX identifiers section to be more general and less focused on build time, and also allows tools to ignore redundant parent classifiers (Note: This section will be moved to an external appendix in the next PR, but I didn't move it here for ease of review)
* The `license_files` directory was renamed to `licenses` at the request of @brettcannon and to simplify things a touch
* The specified handling of the `license.file` key was a bit confused by a (apparently quite common) misunderstanding about how the specified file is used (to inject its text directly under the `License` field in core metadata, rather than included in distribution archives or its path specified in metadata) due to it being rather underspecified in PEP 621, which this revision corrects.
* Bump the core metadata version to reflect acceptance of PEP 685 as Metadata 2.3
* Bump the SPDX license list version to be up to date
Significant non-normative/editorial changes:
* Mention implementation of drafts of this PEP in Hatch and Setuptools, and also describes previous efforts in Setuptools and Wheel that this PEP builds on more clearly, as suggested on the discussion thread
* Reference the canonical project [source] metadata PyPA spec instead of PEP 621, use clearer language surrounding that, and update a few references to other PEPs
* Revise the Motivations and Rationale to be less duplicative/redundant, more balanced and focused more specifically on their respective areas (providing some background and describing the problem, and introducing and justifying the proposed solution, respectively)
* Add a short blurb making explicit the use of RFC 2119 terminology (MUST, SHOULD, etc)
* Update PEP headers
* Various other minor revisions to correct typos and other issues, clarify and simply the text, and improve source formatting.
2022-08-02 23:43:25 -04:00
|
|
|
existing practice in the `Setuptools <setuptoolsfiles_>`__ and
|
|
|
|
`Wheel <wheelfiles_>`__ projects.
|
2024-05-10 00:04:17 -04:00
|
|
|
An up-to-date version of the current draft of this PEP is
|
|
|
|
`implemented <hatchimplementation_>`__ in the
|
|
|
|
`Hatch <hatch_>`__ packaging tool, and an earlier draft of the
|
|
|
|
:ref:`license files portion <639-spec-field-license-file>`
|
|
|
|
is `implemented in Setuptools <setuptoolspep639_>`__.
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
|
|
|
|
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _639-terminology:
|
|
|
|
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
Terminology
|
|
|
|
===========
|
|
|
|
|
PEP 639: Further update per discussion, w/flat license key, etc. (#2705)
Substantive content changes:
* Instead of adding a new top-level `license-expression` key for the license expression in the `[project]` table of the `pyproject.toml` source metadata, the PEP now specifies using the top-level string value of the `license` key for this purpose, which PEP 621 (PEP-621) reserved it for, and updates the `license-expression` and `license` key specs, and the examples, rejected ideas and other sections accordingly.
* Since this makes it not possible to convert a legacy `license` key to the new `License-Expression` field at build time, and that's not really advisable anyway, it drastically simplifies the normative Converting Legacy Metadata section to just a single normative statement, and updates/removes other mentions of it accordingly, and the (already rather unhelpful) example
* Likewise, it simplifies and refines the guidance in the Mapping classifiers to SPDX identifiers section to be more general and less focused on build time, and also allows tools to ignore redundant parent classifiers (Note: This section will be moved to an external appendix in the next PR, but I didn't move it here for ease of review)
* The `license_files` directory was renamed to `licenses` at the request of @brettcannon and to simplify things a touch
* The specified handling of the `license.file` key was a bit confused by a (apparently quite common) misunderstanding about how the specified file is used (to inject its text directly under the `License` field in core metadata, rather than included in distribution archives or its path specified in metadata) due to it being rather underspecified in PEP 621, which this revision corrects.
* Bump the core metadata version to reflect acceptance of PEP 685 as Metadata 2.3
* Bump the SPDX license list version to be up to date
Significant non-normative/editorial changes:
* Mention implementation of drafts of this PEP in Hatch and Setuptools, and also describes previous efforts in Setuptools and Wheel that this PEP builds on more clearly, as suggested on the discussion thread
* Reference the canonical project [source] metadata PyPA spec instead of PEP 621, use clearer language surrounding that, and update a few references to other PEPs
* Revise the Motivations and Rationale to be less duplicative/redundant, more balanced and focused more specifically on their respective areas (providing some background and describing the problem, and introducing and justifying the proposed solution, respectively)
* Add a short blurb making explicit the use of RFC 2119 terminology (MUST, SHOULD, etc)
* Update PEP headers
* Various other minor revisions to correct typos and other issues, clarify and simply the text, and improve source formatting.
2022-08-02 23:43:25 -04:00
|
|
|
The keywords "MUST", "MUST NOT", "REQUIRED",
|
|
|
|
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL"
|
|
|
|
in this document are to be interpreted as described in :rfc:`2119`.
|
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
|
|
|
|
.. _639-terminology-license:
|
|
|
|
|
|
|
|
License terms
|
|
|
|
-------------
|
|
|
|
|
|
|
|
The license-related terminology draws heavily from the `SPDX Project <spdx_>`__,
|
|
|
|
particularly :term:`license identifier` and :term:`license expression`.
|
|
|
|
|
|
|
|
.. glossary::
|
|
|
|
|
|
|
|
license classifier
|
|
|
|
A `PyPI Trove classifier <classifiers_>`__
|
|
|
|
(as :ref:`described <packaging:core-metadata-classifier>`
|
|
|
|
in the :term:`Core Metadata` specification)
|
|
|
|
which begins with ``License ::``.
|
|
|
|
|
|
|
|
license expression
|
|
|
|
SPDX expression
|
|
|
|
A string with valid `SPDX license expression syntax <spdxpression_>`__
|
|
|
|
including one or more SPDX :term:`license identifier`\(s),
|
|
|
|
which describes a :term:`Project`'s license(s)
|
|
|
|
and how they inter-relate.
|
|
|
|
Examples:
|
|
|
|
``GPL-3.0-or-later``,
|
|
|
|
``MIT AND (Apache-2.0 OR BSD-2-clause)``
|
|
|
|
|
|
|
|
license identifier
|
|
|
|
SPDX identifier
|
|
|
|
A valid `SPDX short-form license identifier <spdxid_>`__,
|
|
|
|
as described in the
|
|
|
|
:ref:`639-spec-field-license-expression` section of this PEP.
|
|
|
|
This includes all valid SPDX identifiers and
|
2024-06-28 18:20:47 -04:00
|
|
|
the custom ``LicenseRef-[idstring]`` strings conforming to the
|
|
|
|
`SPDX specification, clause 10.1 <spdxcustom_>`__.
|
2024-05-10 00:04:17 -04:00
|
|
|
Examples:
|
|
|
|
``MIT``,
|
2024-06-28 18:20:47 -04:00
|
|
|
``GPL-3.0-only``,
|
|
|
|
``LicenseRef-My-Custom-License``
|
2024-05-10 00:04:17 -04:00
|
|
|
|
|
|
|
root license directory
|
|
|
|
license directory
|
|
|
|
The directory under which license files are stored in a
|
|
|
|
:term:`project source tree`, :term:`distribution archive`
|
|
|
|
or :term:`installed project`.
|
|
|
|
Also, the root directory that their paths
|
|
|
|
recorded in the :ref:`License-File <639-spec-field-license-file>`
|
|
|
|
:term:`Core Metadata field` are relative to.
|
|
|
|
Defined to be the :term:`project root directory`
|
|
|
|
for a :term:`project source tree` or
|
|
|
|
:term:`source distribution <Source Distribution (or "sdist")>`;
|
|
|
|
and a subdirectory named ``licenses`` of
|
|
|
|
the directory containing the :term:`built metadata`—
|
|
|
|
i.e., the ``.dist-info/licenses`` directory—
|
|
|
|
for a :term:`Built Distribution` or :term:`installed project`.
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
|
|
|
|
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _639-specification:
|
|
|
|
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
Specification
|
|
|
|
=============
|
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
The changes necessary to implement this PEP include:
|
|
|
|
|
|
|
|
- additions to :ref:`Core Metadata <639-spec-core-metadata>`,
|
|
|
|
as defined in the `specification <coremetadataspec_>`__.
|
|
|
|
|
|
|
|
- additions to the author-provided
|
|
|
|
:ref:`project source metadata <639-spec-source-metadata>`,
|
|
|
|
as defined in the `specification <pyprojecttoml_>`__.
|
|
|
|
|
2024-06-28 18:20:47 -04:00
|
|
|
- :ref:`additions <639-spec-project-formats>` to the
|
2024-05-10 00:04:17 -04:00
|
|
|
source distribution (sdist), built distribution (wheel) and installed project
|
|
|
|
specifications.
|
|
|
|
|
|
|
|
- :ref:`guide for tools <639-spec-converting-metadata>`
|
|
|
|
handling and converting legacy license metadata to license
|
|
|
|
expressions, to ensure the results are consistent and correct.
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
|
|
|
|
Note that the guidance on errors and warnings is for tools' default behavior;
|
|
|
|
they MAY operate more strictly if users explicitly configure them to do so,
|
|
|
|
such as by a CLI flag or a configuration option.
|
|
|
|
|
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
.. _639-spdx:
|
2022-04-19 03:26:30 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
SPDX license expression syntax
|
|
|
|
------------------------------
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
This PEP adopts the SPDX license expression syntax as
|
|
|
|
documented in the `SPDX specification <spdxpression_>`__, either
|
|
|
|
Version 2.2 or a later compatible version.
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
A license expression can use the following :term:`license identifier`\s:
|
|
|
|
|
|
|
|
- Any SPDX-listed license short-form identifiers that are published in the
|
|
|
|
`SPDX License List <spdxlist_>`__, version 3.17 or any later compatible
|
|
|
|
version. Note that the SPDX working group never removes any license
|
|
|
|
identifiers; instead, they may choose to mark an identifier as "deprecated".
|
|
|
|
|
2024-06-28 18:20:47 -04:00
|
|
|
- The custom ``LicenseRef-[idstring]`` string(s), where
|
|
|
|
``[idstring]`` is a unique string containing letters, numbers,
|
|
|
|
``.`` and/or ``-``, to identify licenses that are not included in the SPDX
|
|
|
|
license list. The custom identifiers must follow the SPDX specification,
|
|
|
|
`clause 10.1 <spdxcustom_>`__ of the given specification version.
|
2024-05-10 00:04:17 -04:00
|
|
|
|
|
|
|
|
|
|
|
Examples of valid SPDX expressions:
|
|
|
|
|
|
|
|
.. code-block:: none
|
|
|
|
|
|
|
|
MIT
|
|
|
|
BSD-3-Clause
|
2024-06-28 18:20:47 -04:00
|
|
|
MIT AND (Apache-2.0 OR BSD-2-Clause)
|
2024-05-10 00:04:17 -04:00
|
|
|
MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause)
|
|
|
|
GPL-3.0-only WITH Classpath-Exception-2.0 OR BSD-3-Clause
|
2024-06-28 18:20:47 -04:00
|
|
|
LicenseRef-Special-License OR CC0-1.0 OR Unlicense
|
2024-05-10 00:04:17 -04:00
|
|
|
LicenseRef-Proprietary
|
|
|
|
|
|
|
|
|
|
|
|
Examples of invalid SPDX expressions:
|
|
|
|
|
|
|
|
.. code-block:: none
|
|
|
|
|
|
|
|
Use-it-after-midnight
|
|
|
|
Apache-2.0 OR 2-BSD-Clause
|
2024-06-28 18:20:47 -04:00
|
|
|
LicenseRef-License with spaces
|
|
|
|
LicenseRef-License_with_underscores
|
2024-05-10 00:04:17 -04:00
|
|
|
|
|
|
|
|
|
|
|
.. _639-spec-core-metadata:
|
|
|
|
|
|
|
|
Core Metadata
|
|
|
|
-------------
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
|
|
|
|
The error and warning guidance in this section applies to build and
|
2024-05-10 00:04:17 -04:00
|
|
|
publishing tools; end-user-facing install tools MAY be less strict than
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
mentioned here when encountering malformed metadata
|
|
|
|
that does not conform to this specification.
|
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
As it adds new fields, this PEP updates the Core Metadata version to 2.4.
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
|
|
|
|
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _639-spec-field-license-expression:
|
|
|
|
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
Add ``License-Expression`` field
|
|
|
|
''''''''''''''''''''''''''''''''
|
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
The ``License-Expression`` optional :term:`Core Metadata field`
|
|
|
|
is specified to contain a text string
|
2024-06-28 18:20:47 -04:00
|
|
|
that is a valid SPDX :term:`license expression`,
|
|
|
|
as :ref:`defined above <639-spdx>`.
|
|
|
|
|
|
|
|
Build and publishing tools SHOULD
|
|
|
|
check that the ``License-Expression`` field contains a valid SPDX expression,
|
|
|
|
including the validity of the particular license identifiers
|
|
|
|
(as :ref:`defined above <639-spdx>`).
|
|
|
|
Tools MAY halt execution and raise an error when an invalid expression is found.
|
|
|
|
If tools choose to validate the SPDX expression, they also SHOULD
|
|
|
|
store a case-normalized version of the ``License-Expression``
|
|
|
|
field using the reference case for each SPDX license identifier and uppercase
|
|
|
|
for the ``AND``, ``OR`` and ``WITH`` keywords.
|
|
|
|
Tools SHOULD report a warning and publishing tools MAY raise an error
|
|
|
|
if one or more license identifiers
|
|
|
|
have been marked as deprecated in the `SPDX License List <spdxlist_>`__.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
For all newly-uploaded :term:`distribution archive`\s
|
|
|
|
that include a ``License-Expression`` field,
|
|
|
|
the `Python Package Index (PyPI) <pypi_>`__ MUST
|
|
|
|
validate that they contain a valid, case-normalized license expression with
|
|
|
|
valid identifiers (as :ref:`defined above <639-spdx>`)
|
|
|
|
and MUST reject uploads that do not.
|
2024-06-28 18:20:47 -04:00
|
|
|
Custom license identifiers which conform to the SPDX specification
|
|
|
|
are considered valid.
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
PyPI MAY reject an upload for using a deprecated license identifier,
|
|
|
|
so long as it was deprecated as of the above-mentioned SPDX License List
|
|
|
|
version.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
|
|
|
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _639-spec-field-license-file:
|
|
|
|
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
Add ``License-File`` field
|
|
|
|
''''''''''''''''''''''''''
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
``License-File`` is an optional :term:`Core Metadata field`.
|
|
|
|
Each instance contains the string
|
|
|
|
representation of the path of a license-related file. The path is located
|
|
|
|
within the :term:`project source tree`, relative to the
|
|
|
|
:term:`project root directory`.
|
2022-02-03 18:16:44 -05:00
|
|
|
It is a multi-use field that may appear zero or
|
2024-05-10 00:04:17 -04:00
|
|
|
more times and each instance lists the path to one such file. Files specified
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
under this field could include license text, author/attribution information,
|
|
|
|
or other legal notices that need to be distributed with the package.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2022-04-19 03:26:30 -04:00
|
|
|
As :ref:`specified by this PEP <639-spec-project-formats>`, its value
|
2024-05-10 00:04:17 -04:00
|
|
|
is also that file's path relative to the :term:`root license directory`
|
|
|
|
in both :term:`installed project`\s
|
|
|
|
and the standardized :term:`Distribution Package` types.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
If a ``License-File`` is listed in a
|
|
|
|
:term:`Source Distribution <Source Distribution (or "sdist")>` or
|
|
|
|
:term:`Built Distribution`'s Core Metadata:
|
|
|
|
|
|
|
|
- That file MUST be included in the :term:`distribution archive` at the
|
|
|
|
specified path relative to the root license directory.
|
|
|
|
|
|
|
|
- That file MUST be installed with the :term:`project` at that same relative
|
|
|
|
path.
|
|
|
|
|
|
|
|
- The specified relative path MUST be consistent between project source trees,
|
|
|
|
source distributions (sdists), built distributions (:term:`Wheel`\s) and
|
|
|
|
installed projects.
|
|
|
|
|
|
|
|
- Inside the root license directory, packaging tools MUST reproduce the
|
|
|
|
directory structure under which the source license files are located
|
|
|
|
relative to the project root.
|
|
|
|
|
|
|
|
- Path delimiters MUST be the forward slash character (``/``),
|
|
|
|
and parent directory indicators (``..``) MUST NOT be used.
|
|
|
|
|
|
|
|
- License file content MUST be UTF-8 encoded text.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
Build tools MAY and publishing tools SHOULD produce an informative warning
|
|
|
|
if a built distribution's metadata contains no ``License-File`` entries,
|
|
|
|
and publishing tools MAY but build tools MUST NOT raise an error.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
For all newly-uploaded :term:`distribution archive`\s that include one or more
|
|
|
|
``License-File`` fields in their Core Metadata
|
|
|
|
and declare a ``Metadata-Version`` of ``2.4`` or higher,
|
|
|
|
PyPI SHOULD validate that all specified files are present in that
|
|
|
|
:term:`distribution archive`\s,
|
|
|
|
and MUST reject uploads that do not validate.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
|
|
|
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _639-spec-field-license:
|
|
|
|
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
Deprecate ``License`` field
|
|
|
|
'''''''''''''''''''''''''''
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
The legacy unstructured-text ``License`` :term:`Core Metadata field`
|
|
|
|
is deprecated and replaced by the new ``License-Expression`` field.
|
2024-06-28 18:20:47 -04:00
|
|
|
The fields are mutually exclusive.
|
|
|
|
Tools which generate Core Metadata MUST NOT create both these fields.
|
|
|
|
Tools which read Core Metadata, when dealing with both these fields present
|
|
|
|
at the same time, MUST read the value of ``License-Expression`` and MUST
|
|
|
|
disregard the value of the ``License`` field.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-06-28 18:20:47 -04:00
|
|
|
If only the ``License`` field is present, tools MAY issue a warning
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
informing users it is deprecated and recommending ``License-Expression``
|
|
|
|
instead.
|
2021-02-02 15:58:38 -05:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
For all newly-uploaded :term:`distribution archive`\s that include a
|
2022-04-19 03:26:30 -04:00
|
|
|
``License-Expression`` field, the `Python Package Index (PyPI) <pypi_>`__ MUST
|
2024-06-28 18:20:47 -04:00
|
|
|
reject any that specify both ``License`` and ``License-Expression`` fields.
|
2021-02-02 15:58:38 -05:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
The ``License`` field may be removed from a new version of the specification
|
|
|
|
in a future PEP.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2021-02-02 15:58:38 -05:00
|
|
|
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _639-spec-field-classifier:
|
|
|
|
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
Deprecate license classifiers
|
|
|
|
'''''''''''''''''''''''''''''
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
Using :term:`license classifier`\s
|
|
|
|
in the ``Classifier`` :term:`Core Metadata field`
|
|
|
|
(`described in the Core Metadata specification <coremetadataclassifiers_>`__)
|
PEP 639: Further update per discussion, w/flat license key, etc. (#2705)
Substantive content changes:
* Instead of adding a new top-level `license-expression` key for the license expression in the `[project]` table of the `pyproject.toml` source metadata, the PEP now specifies using the top-level string value of the `license` key for this purpose, which PEP 621 (PEP-621) reserved it for, and updates the `license-expression` and `license` key specs, and the examples, rejected ideas and other sections accordingly.
* Since this makes it not possible to convert a legacy `license` key to the new `License-Expression` field at build time, and that's not really advisable anyway, it drastically simplifies the normative Converting Legacy Metadata section to just a single normative statement, and updates/removes other mentions of it accordingly, and the (already rather unhelpful) example
* Likewise, it simplifies and refines the guidance in the Mapping classifiers to SPDX identifiers section to be more general and less focused on build time, and also allows tools to ignore redundant parent classifiers (Note: This section will be moved to an external appendix in the next PR, but I didn't move it here for ease of review)
* The `license_files` directory was renamed to `licenses` at the request of @brettcannon and to simplify things a touch
* The specified handling of the `license.file` key was a bit confused by a (apparently quite common) misunderstanding about how the specified file is used (to inject its text directly under the `License` field in core metadata, rather than included in distribution archives or its path specified in metadata) due to it being rather underspecified in PEP 621, which this revision corrects.
* Bump the core metadata version to reflect acceptance of PEP 685 as Metadata 2.3
* Bump the SPDX license list version to be up to date
Significant non-normative/editorial changes:
* Mention implementation of drafts of this PEP in Hatch and Setuptools, and also describes previous efforts in Setuptools and Wheel that this PEP builds on more clearly, as suggested on the discussion thread
* Reference the canonical project [source] metadata PyPA spec instead of PEP 621, use clearer language surrounding that, and update a few references to other PEPs
* Revise the Motivations and Rationale to be less duplicative/redundant, more balanced and focused more specifically on their respective areas (providing some background and describing the problem, and introducing and justifying the proposed solution, respectively)
* Add a short blurb making explicit the use of RFC 2119 terminology (MUST, SHOULD, etc)
* Update PEP headers
* Various other minor revisions to correct typos and other issues, clarify and simply the text, and improve source formatting.
2022-08-02 23:43:25 -04:00
|
|
|
is deprecated and replaced by the more precise ``License-Expression`` field.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-07-25 17:07:53 -04:00
|
|
|
If the ``License-Expression`` field is present, build tools MAY raise an error
|
|
|
|
if one or more license classifiers
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
is included in a ``Classifier`` field, and MUST NOT add
|
|
|
|
such classifiers themselves.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-07-25 17:07:53 -04:00
|
|
|
Otherwise, if this field contains a license classifier,
|
|
|
|
tools MAY issue a warning informing users such classifiers
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
are deprecated, and recommending ``License-Expression`` instead.
|
|
|
|
For compatibility with existing publishing and installation processes,
|
|
|
|
the presence of license classifiers SHOULD NOT raise an error unless
|
|
|
|
``License-Expression`` is also provided.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2022-04-19 03:26:30 -04:00
|
|
|
New license classifiers MUST NOT be `added to PyPI <classifiersrepo_>`__;
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
users needing them SHOULD use the ``License-Expression`` field instead.
|
2024-05-10 00:04:17 -04:00
|
|
|
License classifiers may be removed from a new version of the specification
|
|
|
|
in a future PEP.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
|
|
|
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _639-spec-source-metadata:
|
|
|
|
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
Project source metadata
|
|
|
|
-----------------------
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
This PEP specifies changes to the project's source
|
|
|
|
metadata under a ``[project]`` table in the ``pyproject.toml`` file.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
.. _639-spec-key-license-text:
|
2022-04-19 03:26:30 -04:00
|
|
|
|
PEP 639: Further update per discussion, w/flat license key, etc. (#2705)
Substantive content changes:
* Instead of adding a new top-level `license-expression` key for the license expression in the `[project]` table of the `pyproject.toml` source metadata, the PEP now specifies using the top-level string value of the `license` key for this purpose, which PEP 621 (PEP-621) reserved it for, and updates the `license-expression` and `license` key specs, and the examples, rejected ideas and other sections accordingly.
* Since this makes it not possible to convert a legacy `license` key to the new `License-Expression` field at build time, and that's not really advisable anyway, it drastically simplifies the normative Converting Legacy Metadata section to just a single normative statement, and updates/removes other mentions of it accordingly, and the (already rather unhelpful) example
* Likewise, it simplifies and refines the guidance in the Mapping classifiers to SPDX identifiers section to be more general and less focused on build time, and also allows tools to ignore redundant parent classifiers (Note: This section will be moved to an external appendix in the next PR, but I didn't move it here for ease of review)
* The `license_files` directory was renamed to `licenses` at the request of @brettcannon and to simplify things a touch
* The specified handling of the `license.file` key was a bit confused by a (apparently quite common) misunderstanding about how the specified file is used (to inject its text directly under the `License` field in core metadata, rather than included in distribution archives or its path specified in metadata) due to it being rather underspecified in PEP 621, which this revision corrects.
* Bump the core metadata version to reflect acceptance of PEP 685 as Metadata 2.3
* Bump the SPDX license list version to be up to date
Significant non-normative/editorial changes:
* Mention implementation of drafts of this PEP in Hatch and Setuptools, and also describes previous efforts in Setuptools and Wheel that this PEP builds on more clearly, as suggested on the discussion thread
* Reference the canonical project [source] metadata PyPA spec instead of PEP 621, use clearer language surrounding that, and update a few references to other PEPs
* Revise the Motivations and Rationale to be less duplicative/redundant, more balanced and focused more specifically on their respective areas (providing some background and describing the problem, and introducing and justifying the proposed solution, respectively)
* Add a short blurb making explicit the use of RFC 2119 terminology (MUST, SHOULD, etc)
* Update PEP headers
* Various other minor revisions to correct typos and other issues, clarify and simply the text, and improve source formatting.
2022-08-02 23:43:25 -04:00
|
|
|
Add string value to ``license`` key
|
|
|
|
'''''''''''''''''''''''''''''''''''
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
``license`` key in the ``[project]`` table is defined to contain a top-level
|
|
|
|
string value. It is a valid SPDX license expression as
|
|
|
|
:ref:`defined in this PEP <639-spdx>`.
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
Its value maps to the ``License-Expression`` field in the core metadata.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-06-28 18:20:47 -04:00
|
|
|
Build tools SHOULD validate and perform case normalization of the expression
|
|
|
|
as described in the
|
PEP 639: Further update per discussion, w/flat license key, etc. (#2705)
Substantive content changes:
* Instead of adding a new top-level `license-expression` key for the license expression in the `[project]` table of the `pyproject.toml` source metadata, the PEP now specifies using the top-level string value of the `license` key for this purpose, which PEP 621 (PEP-621) reserved it for, and updates the `license-expression` and `license` key specs, and the examples, rejected ideas and other sections accordingly.
* Since this makes it not possible to convert a legacy `license` key to the new `License-Expression` field at build time, and that's not really advisable anyway, it drastically simplifies the normative Converting Legacy Metadata section to just a single normative statement, and updates/removes other mentions of it accordingly, and the (already rather unhelpful) example
* Likewise, it simplifies and refines the guidance in the Mapping classifiers to SPDX identifiers section to be more general and less focused on build time, and also allows tools to ignore redundant parent classifiers (Note: This section will be moved to an external appendix in the next PR, but I didn't move it here for ease of review)
* The `license_files` directory was renamed to `licenses` at the request of @brettcannon and to simplify things a touch
* The specified handling of the `license.file` key was a bit confused by a (apparently quite common) misunderstanding about how the specified file is used (to inject its text directly under the `License` field in core metadata, rather than included in distribution archives or its path specified in metadata) due to it being rather underspecified in PEP 621, which this revision corrects.
* Bump the core metadata version to reflect acceptance of PEP 685 as Metadata 2.3
* Bump the SPDX license list version to be up to date
Significant non-normative/editorial changes:
* Mention implementation of drafts of this PEP in Hatch and Setuptools, and also describes previous efforts in Setuptools and Wheel that this PEP builds on more clearly, as suggested on the discussion thread
* Reference the canonical project [source] metadata PyPA spec instead of PEP 621, use clearer language surrounding that, and update a few references to other PEPs
* Revise the Motivations and Rationale to be less duplicative/redundant, more balanced and focused more specifically on their respective areas (providing some background and describing the problem, and introducing and justifying the proposed solution, respectively)
* Add a short blurb making explicit the use of RFC 2119 terminology (MUST, SHOULD, etc)
* Update PEP headers
* Various other minor revisions to correct typos and other issues, clarify and simply the text, and improve source formatting.
2022-08-02 23:43:25 -04:00
|
|
|
:ref:`639-spec-field-license-expression` section,
|
|
|
|
outputting an error or warning as specified.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
Examples:
|
|
|
|
|
|
|
|
.. code-block:: toml
|
|
|
|
|
|
|
|
[project]
|
|
|
|
license = "MIT"
|
|
|
|
|
|
|
|
[project]
|
|
|
|
license = "MIT AND (Apache-2.0 OR BSD-2-clause)"
|
|
|
|
|
|
|
|
[project]
|
|
|
|
license = "MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause)"
|
|
|
|
|
|
|
|
[project]
|
|
|
|
license = "LicenseRef-Proprietary"
|
|
|
|
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _639-spec-key-license-files:
|
|
|
|
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
Add ``license-files`` key
|
|
|
|
'''''''''''''''''''''''''
|
2020-09-28 03:58:34 -04:00
|
|
|
|
PEP 639: Further update per discussion, w/flat license key, etc. (#2705)
Substantive content changes:
* Instead of adding a new top-level `license-expression` key for the license expression in the `[project]` table of the `pyproject.toml` source metadata, the PEP now specifies using the top-level string value of the `license` key for this purpose, which PEP 621 (PEP-621) reserved it for, and updates the `license-expression` and `license` key specs, and the examples, rejected ideas and other sections accordingly.
* Since this makes it not possible to convert a legacy `license` key to the new `License-Expression` field at build time, and that's not really advisable anyway, it drastically simplifies the normative Converting Legacy Metadata section to just a single normative statement, and updates/removes other mentions of it accordingly, and the (already rather unhelpful) example
* Likewise, it simplifies and refines the guidance in the Mapping classifiers to SPDX identifiers section to be more general and less focused on build time, and also allows tools to ignore redundant parent classifiers (Note: This section will be moved to an external appendix in the next PR, but I didn't move it here for ease of review)
* The `license_files` directory was renamed to `licenses` at the request of @brettcannon and to simplify things a touch
* The specified handling of the `license.file` key was a bit confused by a (apparently quite common) misunderstanding about how the specified file is used (to inject its text directly under the `License` field in core metadata, rather than included in distribution archives or its path specified in metadata) due to it being rather underspecified in PEP 621, which this revision corrects.
* Bump the core metadata version to reflect acceptance of PEP 685 as Metadata 2.3
* Bump the SPDX license list version to be up to date
Significant non-normative/editorial changes:
* Mention implementation of drafts of this PEP in Hatch and Setuptools, and also describes previous efforts in Setuptools and Wheel that this PEP builds on more clearly, as suggested on the discussion thread
* Reference the canonical project [source] metadata PyPA spec instead of PEP 621, use clearer language surrounding that, and update a few references to other PEPs
* Revise the Motivations and Rationale to be less duplicative/redundant, more balanced and focused more specifically on their respective areas (providing some background and describing the problem, and introducing and justifying the proposed solution, respectively)
* Add a short blurb making explicit the use of RFC 2119 terminology (MUST, SHOULD, etc)
* Update PEP headers
* Various other minor revisions to correct typos and other issues, clarify and simply the text, and improve source formatting.
2022-08-02 23:43:25 -04:00
|
|
|
A new ``license-files`` key is added to the ``[project]`` table for specifying
|
2022-02-03 18:16:44 -05:00
|
|
|
paths in the project source tree relative to ``pyproject.toml`` to file(s)
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
containing licenses and other legal notices to be distributed with the package.
|
2024-05-10 00:04:17 -04:00
|
|
|
It corresponds to the ``License-File`` fields in the Core Metadata.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-07-25 17:07:53 -04:00
|
|
|
Its value is an array of strings which MUST contain valid glob patterns,
|
2024-08-19 17:40:33 -04:00
|
|
|
as specified below:
|
|
|
|
|
|
|
|
- Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``.``)
|
|
|
|
MUST be matched verbatim.
|
|
|
|
|
|
|
|
- Special glob characters: ``*``, ``?``, ``**`` and character ranges: ``[]``
|
|
|
|
containing only the verbatim matched characters MUST be supported.
|
2024-08-20 17:03:18 -04:00
|
|
|
Within ``[...]``, the hyphen indicates a locale-agnostic range (e.g. ``a-z``,
|
|
|
|
order based on Unicode code points).
|
2024-08-19 17:40:33 -04:00
|
|
|
Hyphens at the start or end are matched literally.
|
|
|
|
|
|
|
|
- Path delimiters MUST be the forward slash character (``/``).
|
|
|
|
Patterns are relative to the directory containing ``pyproject.toml``,
|
|
|
|
therefore the leading slash character MUST NOT be used.
|
|
|
|
|
|
|
|
- Parent directory indicators (``..``) MUST NOT be used.
|
|
|
|
|
|
|
|
Any characters or character sequences not covered by this specification are
|
|
|
|
invalid. Projects MUST NOT use such values.
|
2024-08-29 11:57:26 -04:00
|
|
|
Tools consuming this field SHOULD reject invalid values with an error.
|
2024-08-19 17:40:33 -04:00
|
|
|
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
Tools MUST assume that license file content is valid UTF-8 encoded text,
|
|
|
|
and SHOULD validate this and raise an error if it is not.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-07-25 17:07:53 -04:00
|
|
|
Literal paths (e.g. ``LICENSE``) are treated as valid globs which means they
|
|
|
|
can also be defined.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-07-25 17:07:53 -04:00
|
|
|
Build tools:
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
|
|
|
|
- MUST treat each value as a glob pattern, and MUST raise an error if the
|
|
|
|
pattern contains invalid glob syntax.
|
|
|
|
|
2024-07-25 17:07:53 -04:00
|
|
|
- MUST include all files matched by a listed pattern in all
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
distribution archives.
|
|
|
|
|
|
|
|
- MUST list each matched file path under a ``License-File`` field in the
|
2024-05-10 00:04:17 -04:00
|
|
|
Core Metadata.
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
|
2024-07-25 17:07:53 -04:00
|
|
|
- MUST raise an error if any individual user-specified pattern
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
does not match at least one file.
|
|
|
|
|
2024-07-25 17:07:53 -04:00
|
|
|
If the ``license-files`` key is present and
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
is set to a value of an empty array, then tools MUST NOT include any
|
|
|
|
license files and MUST NOT raise an error.
|
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
Examples of valid license files declaration:
|
|
|
|
|
|
|
|
.. code-block:: toml
|
|
|
|
|
|
|
|
[project]
|
2024-07-25 17:07:53 -04:00
|
|
|
license-files = ["LICEN[CS]E*", "AUTHORS*"]
|
2024-05-10 00:04:17 -04:00
|
|
|
|
|
|
|
[project]
|
2024-07-25 17:07:53 -04:00
|
|
|
license-files = ["licenses/LICENSE.MIT", "licenses/LICENSE.CC0"]
|
2024-05-10 00:04:17 -04:00
|
|
|
|
|
|
|
[project]
|
2024-07-25 17:07:53 -04:00
|
|
|
license-files = ["LICENSE.txt", "licenses/*"]
|
2024-05-10 00:04:17 -04:00
|
|
|
|
|
|
|
[project]
|
2024-07-25 17:07:53 -04:00
|
|
|
license-files = []
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
Examples of invalid license files declaration:
|
|
|
|
|
|
|
|
.. code-block:: toml
|
|
|
|
|
|
|
|
[project]
|
2024-07-25 17:07:53 -04:00
|
|
|
license-files = ["..\LICENSE.MIT"]
|
2024-05-10 00:04:17 -04:00
|
|
|
|
|
|
|
Reason: ``..`` must not be used.
|
|
|
|
``\`` is an invalid path delimiter, ``/`` must be used.
|
|
|
|
|
|
|
|
|
|
|
|
.. code-block:: toml
|
|
|
|
|
|
|
|
[project]
|
2024-07-25 17:07:53 -04:00
|
|
|
license-files = ["LICEN{CSE*"]
|
2024-05-10 00:04:17 -04:00
|
|
|
|
|
|
|
Reason: "LICEN{CSE*" is not a valid glob.
|
|
|
|
|
|
|
|
|
|
|
|
.. _639-spec-key-license-table:
|
2022-04-19 03:26:30 -04:00
|
|
|
|
PEP 639: Further update per discussion, w/flat license key, etc. (#2705)
Substantive content changes:
* Instead of adding a new top-level `license-expression` key for the license expression in the `[project]` table of the `pyproject.toml` source metadata, the PEP now specifies using the top-level string value of the `license` key for this purpose, which PEP 621 (PEP-621) reserved it for, and updates the `license-expression` and `license` key specs, and the examples, rejected ideas and other sections accordingly.
* Since this makes it not possible to convert a legacy `license` key to the new `License-Expression` field at build time, and that's not really advisable anyway, it drastically simplifies the normative Converting Legacy Metadata section to just a single normative statement, and updates/removes other mentions of it accordingly, and the (already rather unhelpful) example
* Likewise, it simplifies and refines the guidance in the Mapping classifiers to SPDX identifiers section to be more general and less focused on build time, and also allows tools to ignore redundant parent classifiers (Note: This section will be moved to an external appendix in the next PR, but I didn't move it here for ease of review)
* The `license_files` directory was renamed to `licenses` at the request of @brettcannon and to simplify things a touch
* The specified handling of the `license.file` key was a bit confused by a (apparently quite common) misunderstanding about how the specified file is used (to inject its text directly under the `License` field in core metadata, rather than included in distribution archives or its path specified in metadata) due to it being rather underspecified in PEP 621, which this revision corrects.
* Bump the core metadata version to reflect acceptance of PEP 685 as Metadata 2.3
* Bump the SPDX license list version to be up to date
Significant non-normative/editorial changes:
* Mention implementation of drafts of this PEP in Hatch and Setuptools, and also describes previous efforts in Setuptools and Wheel that this PEP builds on more clearly, as suggested on the discussion thread
* Reference the canonical project [source] metadata PyPA spec instead of PEP 621, use clearer language surrounding that, and update a few references to other PEPs
* Revise the Motivations and Rationale to be less duplicative/redundant, more balanced and focused more specifically on their respective areas (providing some background and describing the problem, and introducing and justifying the proposed solution, respectively)
* Add a short blurb making explicit the use of RFC 2119 terminology (MUST, SHOULD, etc)
* Update PEP headers
* Various other minor revisions to correct typos and other issues, clarify and simply the text, and improve source formatting.
2022-08-02 23:43:25 -04:00
|
|
|
Deprecate ``license`` key table subkeys
|
|
|
|
'''''''''''''''''''''''''''''''''''''''
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
|
PEP 639: Further update per discussion, w/flat license key, etc. (#2705)
Substantive content changes:
* Instead of adding a new top-level `license-expression` key for the license expression in the `[project]` table of the `pyproject.toml` source metadata, the PEP now specifies using the top-level string value of the `license` key for this purpose, which PEP 621 (PEP-621) reserved it for, and updates the `license-expression` and `license` key specs, and the examples, rejected ideas and other sections accordingly.
* Since this makes it not possible to convert a legacy `license` key to the new `License-Expression` field at build time, and that's not really advisable anyway, it drastically simplifies the normative Converting Legacy Metadata section to just a single normative statement, and updates/removes other mentions of it accordingly, and the (already rather unhelpful) example
* Likewise, it simplifies and refines the guidance in the Mapping classifiers to SPDX identifiers section to be more general and less focused on build time, and also allows tools to ignore redundant parent classifiers (Note: This section will be moved to an external appendix in the next PR, but I didn't move it here for ease of review)
* The `license_files` directory was renamed to `licenses` at the request of @brettcannon and to simplify things a touch
* The specified handling of the `license.file` key was a bit confused by a (apparently quite common) misunderstanding about how the specified file is used (to inject its text directly under the `License` field in core metadata, rather than included in distribution archives or its path specified in metadata) due to it being rather underspecified in PEP 621, which this revision corrects.
* Bump the core metadata version to reflect acceptance of PEP 685 as Metadata 2.3
* Bump the SPDX license list version to be up to date
Significant non-normative/editorial changes:
* Mention implementation of drafts of this PEP in Hatch and Setuptools, and also describes previous efforts in Setuptools and Wheel that this PEP builds on more clearly, as suggested on the discussion thread
* Reference the canonical project [source] metadata PyPA spec instead of PEP 621, use clearer language surrounding that, and update a few references to other PEPs
* Revise the Motivations and Rationale to be less duplicative/redundant, more balanced and focused more specifically on their respective areas (providing some background and describing the problem, and introducing and justifying the proposed solution, respectively)
* Add a short blurb making explicit the use of RFC 2119 terminology (MUST, SHOULD, etc)
* Update PEP headers
* Various other minor revisions to correct typos and other issues, clarify and simply the text, and improve source formatting.
2022-08-02 23:43:25 -04:00
|
|
|
Table values for the ``license`` key in the ``[project]`` table,
|
|
|
|
including the ``text`` and ``file`` table subkeys, are now deprecated.
|
|
|
|
If the new ``license-files`` key is present,
|
|
|
|
build tools MUST raise an error if the ``license`` key is defined
|
|
|
|
and has a value other than a single top-level string.
|
|
|
|
|
|
|
|
If the new ``license-files`` key is not present
|
|
|
|
and the ``text`` subkey is present in a ``license`` table,
|
|
|
|
tools SHOULD issue a warning informing users it is deprecated
|
|
|
|
and recommending a license expression as a top-level string key instead.
|
|
|
|
|
|
|
|
Likewise, if the new ``license-files`` key is not present
|
|
|
|
and the ``file`` subkey is present in the ``license`` table,
|
|
|
|
tools SHOULD issue a warning informing users it is deprecated and recommending
|
|
|
|
the ``license-files`` key instead.
|
|
|
|
|
|
|
|
If the specified license ``file`` is present in the source tree,
|
|
|
|
build tools SHOULD use it to fill the ``License-File`` field
|
|
|
|
in the core metadata, and MUST include the specified file
|
2024-07-25 17:07:53 -04:00
|
|
|
as if it were specified in a ``license-file`` field.
|
PEP 639: Further update per discussion, w/flat license key, etc. (#2705)
Substantive content changes:
* Instead of adding a new top-level `license-expression` key for the license expression in the `[project]` table of the `pyproject.toml` source metadata, the PEP now specifies using the top-level string value of the `license` key for this purpose, which PEP 621 (PEP-621) reserved it for, and updates the `license-expression` and `license` key specs, and the examples, rejected ideas and other sections accordingly.
* Since this makes it not possible to convert a legacy `license` key to the new `License-Expression` field at build time, and that's not really advisable anyway, it drastically simplifies the normative Converting Legacy Metadata section to just a single normative statement, and updates/removes other mentions of it accordingly, and the (already rather unhelpful) example
* Likewise, it simplifies and refines the guidance in the Mapping classifiers to SPDX identifiers section to be more general and less focused on build time, and also allows tools to ignore redundant parent classifiers (Note: This section will be moved to an external appendix in the next PR, but I didn't move it here for ease of review)
* The `license_files` directory was renamed to `licenses` at the request of @brettcannon and to simplify things a touch
* The specified handling of the `license.file` key was a bit confused by a (apparently quite common) misunderstanding about how the specified file is used (to inject its text directly under the `License` field in core metadata, rather than included in distribution archives or its path specified in metadata) due to it being rather underspecified in PEP 621, which this revision corrects.
* Bump the core metadata version to reflect acceptance of PEP 685 as Metadata 2.3
* Bump the SPDX license list version to be up to date
Significant non-normative/editorial changes:
* Mention implementation of drafts of this PEP in Hatch and Setuptools, and also describes previous efforts in Setuptools and Wheel that this PEP builds on more clearly, as suggested on the discussion thread
* Reference the canonical project [source] metadata PyPA spec instead of PEP 621, use clearer language surrounding that, and update a few references to other PEPs
* Revise the Motivations and Rationale to be less duplicative/redundant, more balanced and focused more specifically on their respective areas (providing some background and describing the problem, and introducing and justifying the proposed solution, respectively)
* Add a short blurb making explicit the use of RFC 2119 terminology (MUST, SHOULD, etc)
* Update PEP headers
* Various other minor revisions to correct typos and other issues, clarify and simply the text, and improve source formatting.
2022-08-02 23:43:25 -04:00
|
|
|
If the file does not exist at the specified path,
|
|
|
|
tools MUST raise an informative error as previously specified.
|
|
|
|
|
|
|
|
Table values for the ``license`` key MAY be removed
|
|
|
|
from a new version of the specification in a future PEP.
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
|
|
|
|
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _639-spec-project-formats:
|
|
|
|
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
License files in project formats
|
|
|
|
--------------------------------
|
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
A few additions will be made to the existing specifications.
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
:term:`Project source tree`\s
|
|
|
|
Per :ref:`639-spec-source-metadata` section, the
|
|
|
|
`Declaring Project Metadata specification <pyprojecttoml_>`__
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
will be updated to reflect that license file paths MUST be relative to the
|
|
|
|
project root directory; i.e. the directory containing the ``pyproject.toml``
|
|
|
|
(or equivalently, other legacy project configuration,
|
|
|
|
e.g. ``setup.py``, ``setup.cfg``, etc).
|
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
:term:`Source distributions (sdists) <Source Distribution (or "sdist")>`
|
|
|
|
The `sdist specification <sdistspec_>`__ will be updated to reflect that if
|
|
|
|
the ``Metadata-Version`` is ``2.4`` or greater,
|
|
|
|
the sdist MUST contain any license files specified by
|
|
|
|
the :ref:`License-File field <639-spec-field-license-file>`
|
|
|
|
in the ``PKG-INFO`` at their respective paths
|
|
|
|
relative to the of the sdist
|
|
|
|
(containing the ``pyproject.toml`` and the ``PKG-INFO`` Core Metadata).
|
|
|
|
|
|
|
|
:term:`Built distribution`\s (:term:`wheel`\s)
|
|
|
|
The `Wheel specification <wheelspec_>`__ will be updated to reflect that if
|
PEP 639: Further update per discussion, w/flat license key, etc. (#2705)
Substantive content changes:
* Instead of adding a new top-level `license-expression` key for the license expression in the `[project]` table of the `pyproject.toml` source metadata, the PEP now specifies using the top-level string value of the `license` key for this purpose, which PEP 621 (PEP-621) reserved it for, and updates the `license-expression` and `license` key specs, and the examples, rejected ideas and other sections accordingly.
* Since this makes it not possible to convert a legacy `license` key to the new `License-Expression` field at build time, and that's not really advisable anyway, it drastically simplifies the normative Converting Legacy Metadata section to just a single normative statement, and updates/removes other mentions of it accordingly, and the (already rather unhelpful) example
* Likewise, it simplifies and refines the guidance in the Mapping classifiers to SPDX identifiers section to be more general and less focused on build time, and also allows tools to ignore redundant parent classifiers (Note: This section will be moved to an external appendix in the next PR, but I didn't move it here for ease of review)
* The `license_files` directory was renamed to `licenses` at the request of @brettcannon and to simplify things a touch
* The specified handling of the `license.file` key was a bit confused by a (apparently quite common) misunderstanding about how the specified file is used (to inject its text directly under the `License` field in core metadata, rather than included in distribution archives or its path specified in metadata) due to it being rather underspecified in PEP 621, which this revision corrects.
* Bump the core metadata version to reflect acceptance of PEP 685 as Metadata 2.3
* Bump the SPDX license list version to be up to date
Significant non-normative/editorial changes:
* Mention implementation of drafts of this PEP in Hatch and Setuptools, and also describes previous efforts in Setuptools and Wheel that this PEP builds on more clearly, as suggested on the discussion thread
* Reference the canonical project [source] metadata PyPA spec instead of PEP 621, use clearer language surrounding that, and update a few references to other PEPs
* Revise the Motivations and Rationale to be less duplicative/redundant, more balanced and focused more specifically on their respective areas (providing some background and describing the problem, and introducing and justifying the proposed solution, respectively)
* Add a short blurb making explicit the use of RFC 2119 terminology (MUST, SHOULD, etc)
* Update PEP headers
* Various other minor revisions to correct typos and other issues, clarify and simply the text, and improve source formatting.
2022-08-02 23:43:25 -04:00
|
|
|
the ``Metadata-Version`` is ``2.4`` or greater and one or more
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
``License-File`` fields is specified, the ``.dist-info`` directory MUST
|
PEP 639: Further update per discussion, w/flat license key, etc. (#2705)
Substantive content changes:
* Instead of adding a new top-level `license-expression` key for the license expression in the `[project]` table of the `pyproject.toml` source metadata, the PEP now specifies using the top-level string value of the `license` key for this purpose, which PEP 621 (PEP-621) reserved it for, and updates the `license-expression` and `license` key specs, and the examples, rejected ideas and other sections accordingly.
* Since this makes it not possible to convert a legacy `license` key to the new `License-Expression` field at build time, and that's not really advisable anyway, it drastically simplifies the normative Converting Legacy Metadata section to just a single normative statement, and updates/removes other mentions of it accordingly, and the (already rather unhelpful) example
* Likewise, it simplifies and refines the guidance in the Mapping classifiers to SPDX identifiers section to be more general and less focused on build time, and also allows tools to ignore redundant parent classifiers (Note: This section will be moved to an external appendix in the next PR, but I didn't move it here for ease of review)
* The `license_files` directory was renamed to `licenses` at the request of @brettcannon and to simplify things a touch
* The specified handling of the `license.file` key was a bit confused by a (apparently quite common) misunderstanding about how the specified file is used (to inject its text directly under the `License` field in core metadata, rather than included in distribution archives or its path specified in metadata) due to it being rather underspecified in PEP 621, which this revision corrects.
* Bump the core metadata version to reflect acceptance of PEP 685 as Metadata 2.3
* Bump the SPDX license list version to be up to date
Significant non-normative/editorial changes:
* Mention implementation of drafts of this PEP in Hatch and Setuptools, and also describes previous efforts in Setuptools and Wheel that this PEP builds on more clearly, as suggested on the discussion thread
* Reference the canonical project [source] metadata PyPA spec instead of PEP 621, use clearer language surrounding that, and update a few references to other PEPs
* Revise the Motivations and Rationale to be less duplicative/redundant, more balanced and focused more specifically on their respective areas (providing some background and describing the problem, and introducing and justifying the proposed solution, respectively)
* Add a short blurb making explicit the use of RFC 2119 terminology (MUST, SHOULD, etc)
* Update PEP headers
* Various other minor revisions to correct typos and other issues, clarify and simply the text, and improve source formatting.
2022-08-02 23:43:25 -04:00
|
|
|
contain a ``licenses`` subdirectory, which MUST contain the files listed
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
in the ``License-File`` fields in the ``METADATA`` file at their respective
|
PEP 639: Further update per discussion, w/flat license key, etc. (#2705)
Substantive content changes:
* Instead of adding a new top-level `license-expression` key for the license expression in the `[project]` table of the `pyproject.toml` source metadata, the PEP now specifies using the top-level string value of the `license` key for this purpose, which PEP 621 (PEP-621) reserved it for, and updates the `license-expression` and `license` key specs, and the examples, rejected ideas and other sections accordingly.
* Since this makes it not possible to convert a legacy `license` key to the new `License-Expression` field at build time, and that's not really advisable anyway, it drastically simplifies the normative Converting Legacy Metadata section to just a single normative statement, and updates/removes other mentions of it accordingly, and the (already rather unhelpful) example
* Likewise, it simplifies and refines the guidance in the Mapping classifiers to SPDX identifiers section to be more general and less focused on build time, and also allows tools to ignore redundant parent classifiers (Note: This section will be moved to an external appendix in the next PR, but I didn't move it here for ease of review)
* The `license_files` directory was renamed to `licenses` at the request of @brettcannon and to simplify things a touch
* The specified handling of the `license.file` key was a bit confused by a (apparently quite common) misunderstanding about how the specified file is used (to inject its text directly under the `License` field in core metadata, rather than included in distribution archives or its path specified in metadata) due to it being rather underspecified in PEP 621, which this revision corrects.
* Bump the core metadata version to reflect acceptance of PEP 685 as Metadata 2.3
* Bump the SPDX license list version to be up to date
Significant non-normative/editorial changes:
* Mention implementation of drafts of this PEP in Hatch and Setuptools, and also describes previous efforts in Setuptools and Wheel that this PEP builds on more clearly, as suggested on the discussion thread
* Reference the canonical project [source] metadata PyPA spec instead of PEP 621, use clearer language surrounding that, and update a few references to other PEPs
* Revise the Motivations and Rationale to be less duplicative/redundant, more balanced and focused more specifically on their respective areas (providing some background and describing the problem, and introducing and justifying the proposed solution, respectively)
* Add a short blurb making explicit the use of RFC 2119 terminology (MUST, SHOULD, etc)
* Update PEP headers
* Various other minor revisions to correct typos and other issues, clarify and simply the text, and improve source formatting.
2022-08-02 23:43:25 -04:00
|
|
|
paths relative to the ``licenses`` directory.
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
:term:`Installed project`\s
|
2022-04-19 03:26:30 -04:00
|
|
|
The `Recording Installed Projects specification <installedspec_>`__ will be
|
PEP 639: Further update per discussion, w/flat license key, etc. (#2705)
Substantive content changes:
* Instead of adding a new top-level `license-expression` key for the license expression in the `[project]` table of the `pyproject.toml` source metadata, the PEP now specifies using the top-level string value of the `license` key for this purpose, which PEP 621 (PEP-621) reserved it for, and updates the `license-expression` and `license` key specs, and the examples, rejected ideas and other sections accordingly.
* Since this makes it not possible to convert a legacy `license` key to the new `License-Expression` field at build time, and that's not really advisable anyway, it drastically simplifies the normative Converting Legacy Metadata section to just a single normative statement, and updates/removes other mentions of it accordingly, and the (already rather unhelpful) example
* Likewise, it simplifies and refines the guidance in the Mapping classifiers to SPDX identifiers section to be more general and less focused on build time, and also allows tools to ignore redundant parent classifiers (Note: This section will be moved to an external appendix in the next PR, but I didn't move it here for ease of review)
* The `license_files` directory was renamed to `licenses` at the request of @brettcannon and to simplify things a touch
* The specified handling of the `license.file` key was a bit confused by a (apparently quite common) misunderstanding about how the specified file is used (to inject its text directly under the `License` field in core metadata, rather than included in distribution archives or its path specified in metadata) due to it being rather underspecified in PEP 621, which this revision corrects.
* Bump the core metadata version to reflect acceptance of PEP 685 as Metadata 2.3
* Bump the SPDX license list version to be up to date
Significant non-normative/editorial changes:
* Mention implementation of drafts of this PEP in Hatch and Setuptools, and also describes previous efforts in Setuptools and Wheel that this PEP builds on more clearly, as suggested on the discussion thread
* Reference the canonical project [source] metadata PyPA spec instead of PEP 621, use clearer language surrounding that, and update a few references to other PEPs
* Revise the Motivations and Rationale to be less duplicative/redundant, more balanced and focused more specifically on their respective areas (providing some background and describing the problem, and introducing and justifying the proposed solution, respectively)
* Add a short blurb making explicit the use of RFC 2119 terminology (MUST, SHOULD, etc)
* Update PEP headers
* Various other minor revisions to correct typos and other issues, clarify and simply the text, and improve source formatting.
2022-08-02 23:43:25 -04:00
|
|
|
updated to reflect that if the ``Metadata-Version`` is ``2.4`` or greater
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
and one or more ``License-File`` fields is specified, the ``.dist-info``
|
PEP 639: Further update per discussion, w/flat license key, etc. (#2705)
Substantive content changes:
* Instead of adding a new top-level `license-expression` key for the license expression in the `[project]` table of the `pyproject.toml` source metadata, the PEP now specifies using the top-level string value of the `license` key for this purpose, which PEP 621 (PEP-621) reserved it for, and updates the `license-expression` and `license` key specs, and the examples, rejected ideas and other sections accordingly.
* Since this makes it not possible to convert a legacy `license` key to the new `License-Expression` field at build time, and that's not really advisable anyway, it drastically simplifies the normative Converting Legacy Metadata section to just a single normative statement, and updates/removes other mentions of it accordingly, and the (already rather unhelpful) example
* Likewise, it simplifies and refines the guidance in the Mapping classifiers to SPDX identifiers section to be more general and less focused on build time, and also allows tools to ignore redundant parent classifiers (Note: This section will be moved to an external appendix in the next PR, but I didn't move it here for ease of review)
* The `license_files` directory was renamed to `licenses` at the request of @brettcannon and to simplify things a touch
* The specified handling of the `license.file` key was a bit confused by a (apparently quite common) misunderstanding about how the specified file is used (to inject its text directly under the `License` field in core metadata, rather than included in distribution archives or its path specified in metadata) due to it being rather underspecified in PEP 621, which this revision corrects.
* Bump the core metadata version to reflect acceptance of PEP 685 as Metadata 2.3
* Bump the SPDX license list version to be up to date
Significant non-normative/editorial changes:
* Mention implementation of drafts of this PEP in Hatch and Setuptools, and also describes previous efforts in Setuptools and Wheel that this PEP builds on more clearly, as suggested on the discussion thread
* Reference the canonical project [source] metadata PyPA spec instead of PEP 621, use clearer language surrounding that, and update a few references to other PEPs
* Revise the Motivations and Rationale to be less duplicative/redundant, more balanced and focused more specifically on their respective areas (providing some background and describing the problem, and introducing and justifying the proposed solution, respectively)
* Add a short blurb making explicit the use of RFC 2119 terminology (MUST, SHOULD, etc)
* Update PEP headers
* Various other minor revisions to correct typos and other issues, clarify and simply the text, and improve source formatting.
2022-08-02 23:43:25 -04:00
|
|
|
directory MUST contain a ``licenses`` subdirectory which MUST contain
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
the files listed in the ``License-File`` fields in the ``METADATA`` file
|
PEP 639: Further update per discussion, w/flat license key, etc. (#2705)
Substantive content changes:
* Instead of adding a new top-level `license-expression` key for the license expression in the `[project]` table of the `pyproject.toml` source metadata, the PEP now specifies using the top-level string value of the `license` key for this purpose, which PEP 621 (PEP-621) reserved it for, and updates the `license-expression` and `license` key specs, and the examples, rejected ideas and other sections accordingly.
* Since this makes it not possible to convert a legacy `license` key to the new `License-Expression` field at build time, and that's not really advisable anyway, it drastically simplifies the normative Converting Legacy Metadata section to just a single normative statement, and updates/removes other mentions of it accordingly, and the (already rather unhelpful) example
* Likewise, it simplifies and refines the guidance in the Mapping classifiers to SPDX identifiers section to be more general and less focused on build time, and also allows tools to ignore redundant parent classifiers (Note: This section will be moved to an external appendix in the next PR, but I didn't move it here for ease of review)
* The `license_files` directory was renamed to `licenses` at the request of @brettcannon and to simplify things a touch
* The specified handling of the `license.file` key was a bit confused by a (apparently quite common) misunderstanding about how the specified file is used (to inject its text directly under the `License` field in core metadata, rather than included in distribution archives or its path specified in metadata) due to it being rather underspecified in PEP 621, which this revision corrects.
* Bump the core metadata version to reflect acceptance of PEP 685 as Metadata 2.3
* Bump the SPDX license list version to be up to date
Significant non-normative/editorial changes:
* Mention implementation of drafts of this PEP in Hatch and Setuptools, and also describes previous efforts in Setuptools and Wheel that this PEP builds on more clearly, as suggested on the discussion thread
* Reference the canonical project [source] metadata PyPA spec instead of PEP 621, use clearer language surrounding that, and update a few references to other PEPs
* Revise the Motivations and Rationale to be less duplicative/redundant, more balanced and focused more specifically on their respective areas (providing some background and describing the problem, and introducing and justifying the proposed solution, respectively)
* Add a short blurb making explicit the use of RFC 2119 terminology (MUST, SHOULD, etc)
* Update PEP headers
* Various other minor revisions to correct typos and other issues, clarify and simply the text, and improve source formatting.
2022-08-02 23:43:25 -04:00
|
|
|
at their respective paths relative to the ``licenses`` directory,
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
and that any files in this directory MUST be copied from wheels
|
|
|
|
by install tools.
|
|
|
|
|
|
|
|
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _639-spec-converting-metadata:
|
|
|
|
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
Converting legacy metadata
|
|
|
|
--------------------------
|
|
|
|
|
PEP 639: Further update per discussion, w/flat license key, etc. (#2705)
Substantive content changes:
* Instead of adding a new top-level `license-expression` key for the license expression in the `[project]` table of the `pyproject.toml` source metadata, the PEP now specifies using the top-level string value of the `license` key for this purpose, which PEP 621 (PEP-621) reserved it for, and updates the `license-expression` and `license` key specs, and the examples, rejected ideas and other sections accordingly.
* Since this makes it not possible to convert a legacy `license` key to the new `License-Expression` field at build time, and that's not really advisable anyway, it drastically simplifies the normative Converting Legacy Metadata section to just a single normative statement, and updates/removes other mentions of it accordingly, and the (already rather unhelpful) example
* Likewise, it simplifies and refines the guidance in the Mapping classifiers to SPDX identifiers section to be more general and less focused on build time, and also allows tools to ignore redundant parent classifiers (Note: This section will be moved to an external appendix in the next PR, but I didn't move it here for ease of review)
* The `license_files` directory was renamed to `licenses` at the request of @brettcannon and to simplify things a touch
* The specified handling of the `license.file` key was a bit confused by a (apparently quite common) misunderstanding about how the specified file is used (to inject its text directly under the `License` field in core metadata, rather than included in distribution archives or its path specified in metadata) due to it being rather underspecified in PEP 621, which this revision corrects.
* Bump the core metadata version to reflect acceptance of PEP 685 as Metadata 2.3
* Bump the SPDX license list version to be up to date
Significant non-normative/editorial changes:
* Mention implementation of drafts of this PEP in Hatch and Setuptools, and also describes previous efforts in Setuptools and Wheel that this PEP builds on more clearly, as suggested on the discussion thread
* Reference the canonical project [source] metadata PyPA spec instead of PEP 621, use clearer language surrounding that, and update a few references to other PEPs
* Revise the Motivations and Rationale to be less duplicative/redundant, more balanced and focused more specifically on their respective areas (providing some background and describing the problem, and introducing and justifying the proposed solution, respectively)
* Add a short blurb making explicit the use of RFC 2119 terminology (MUST, SHOULD, etc)
* Update PEP headers
* Various other minor revisions to correct typos and other issues, clarify and simply the text, and improve source formatting.
2022-08-02 23:43:25 -04:00
|
|
|
Tools MUST NOT use the contents of the ``license.text`` ``[project]`` key
|
|
|
|
(or equivalent tool-specific format),
|
2024-05-10 00:04:17 -04:00
|
|
|
license classifiers or the value of the Core Metadata ``License`` field
|
2022-10-06 15:14:32 -04:00
|
|
|
to fill the top-level string value of the ``license`` key
|
2024-05-10 00:04:17 -04:00
|
|
|
or the Core Metadata ``License-Expression`` field
|
PEP 639: Further update per discussion, w/flat license key, etc. (#2705)
Substantive content changes:
* Instead of adding a new top-level `license-expression` key for the license expression in the `[project]` table of the `pyproject.toml` source metadata, the PEP now specifies using the top-level string value of the `license` key for this purpose, which PEP 621 (PEP-621) reserved it for, and updates the `license-expression` and `license` key specs, and the examples, rejected ideas and other sections accordingly.
* Since this makes it not possible to convert a legacy `license` key to the new `License-Expression` field at build time, and that's not really advisable anyway, it drastically simplifies the normative Converting Legacy Metadata section to just a single normative statement, and updates/removes other mentions of it accordingly, and the (already rather unhelpful) example
* Likewise, it simplifies and refines the guidance in the Mapping classifiers to SPDX identifiers section to be more general and less focused on build time, and also allows tools to ignore redundant parent classifiers (Note: This section will be moved to an external appendix in the next PR, but I didn't move it here for ease of review)
* The `license_files` directory was renamed to `licenses` at the request of @brettcannon and to simplify things a touch
* The specified handling of the `license.file` key was a bit confused by a (apparently quite common) misunderstanding about how the specified file is used (to inject its text directly under the `License` field in core metadata, rather than included in distribution archives or its path specified in metadata) due to it being rather underspecified in PEP 621, which this revision corrects.
* Bump the core metadata version to reflect acceptance of PEP 685 as Metadata 2.3
* Bump the SPDX license list version to be up to date
Significant non-normative/editorial changes:
* Mention implementation of drafts of this PEP in Hatch and Setuptools, and also describes previous efforts in Setuptools and Wheel that this PEP builds on more clearly, as suggested on the discussion thread
* Reference the canonical project [source] metadata PyPA spec instead of PEP 621, use clearer language surrounding that, and update a few references to other PEPs
* Revise the Motivations and Rationale to be less duplicative/redundant, more balanced and focused more specifically on their respective areas (providing some background and describing the problem, and introducing and justifying the proposed solution, respectively)
* Add a short blurb making explicit the use of RFC 2119 terminology (MUST, SHOULD, etc)
* Update PEP headers
* Various other minor revisions to correct typos and other issues, clarify and simply the text, and improve source formatting.
2022-08-02 23:43:25 -04:00
|
|
|
without informing the user and requiring unambiguous, affirmative user action
|
|
|
|
to select and confirm the desired license expression value before proceeding.
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
|
2024-04-06 14:23:15 -04:00
|
|
|
Tool authors, who need to automatically convert license classifiers to
|
|
|
|
SPDX identifiers, can use the
|
|
|
|
:ref:`recommendation <639-spec-mapping-classifiers-identifiers>` prepared by
|
|
|
|
the PEP authors.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
|
|
|
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _639-backwards-compatibility:
|
|
|
|
|
2020-09-28 03:58:34 -04:00
|
|
|
Backwards Compatibility
|
|
|
|
=======================
|
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
Adding a new ``License-Expression`` Core Metadata field and a top-level string
|
|
|
|
value for the ``license`` key in the ``pyproject.toml`` ``[project]`` table
|
|
|
|
unambiguously means support for the specification in this PEP. This avoids the
|
|
|
|
risk of new tooling misinterpreting a license expression as a free-form license
|
|
|
|
description or vice versa.
|
|
|
|
|
|
|
|
The legacy deprecated Core Metadata ``License`` field, ``license`` key table
|
|
|
|
subkeys (``text`` and ``file``) in the ``pyproject.toml`` ``[project]`` table
|
|
|
|
and license classifiers retain backwards compatibility. A removal is
|
|
|
|
left to a future PEP and a new version of the Core Metadata specification.
|
|
|
|
|
|
|
|
Specification of the new ``License-File`` Core Metadata field and adding the
|
2024-07-25 17:07:53 -04:00
|
|
|
files in the distribution is designed to be largely backwards-compatible with
|
|
|
|
the existing use of that field in many packaging tools.
|
|
|
|
The new ``license-files`` key in the ``[project]`` table of
|
2024-05-10 00:04:17 -04:00
|
|
|
``pyproject.toml`` will only have an effect once users and tools adopt it.
|
|
|
|
|
|
|
|
This PEP specifies that license files should be placed in a dedicated
|
|
|
|
``licenses`` subdir of ``.dist-info`` directory. This is new and ensures that
|
|
|
|
wheels following this PEP will have differently-located licenses relative to
|
|
|
|
those produced via the previous installer-specific behavior. This is further
|
|
|
|
supported by a new metadata version.
|
|
|
|
|
|
|
|
This also resolves current issues where license files are accidentally
|
|
|
|
replaced if they have the same names in different places, making wheels
|
|
|
|
undistributable without noticing. It also prevents conflicts with other
|
|
|
|
metadata files in the same directory.
|
|
|
|
|
|
|
|
The additions will be made to the source distribution (sdist), built
|
|
|
|
distribution (wheel) and installed project specifications. They document
|
|
|
|
behaviors allowed under their current specifications, and gate them behind the
|
|
|
|
new metadata version.
|
|
|
|
|
|
|
|
This PEP proposes PyPI implement validation of the new
|
|
|
|
``License-Expression`` and ``License-File`` fields, which has no effect on
|
|
|
|
new and existing packages uploaded unless they explicitly opt in to using
|
|
|
|
these new fields and fail to follow the specification correctly.
|
|
|
|
Therefore, this does not have a backward compatibility impact, and guarantees
|
|
|
|
forward compatibility by ensuring all distributions uploaded to PyPI with the
|
|
|
|
new fields conform to the specification.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
|
|
|
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _639-security-implications:
|
|
|
|
|
2020-09-28 03:58:34 -04:00
|
|
|
Security Implications
|
|
|
|
=====================
|
|
|
|
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
This PEP has no foreseen security implications: the ``License-Expression``
|
|
|
|
field is a plain string and the ``License-File`` fields are file paths.
|
|
|
|
Neither introduces any known new security concerns.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
|
|
|
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _639-how-to-teach-this:
|
|
|
|
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
How to Teach This
|
|
|
|
=================
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
A majority of packages use a single license which makes the case simple:
|
|
|
|
a single license identifier is a valid license expression.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
Users of packaging tools will learn the valid license expression of their
|
|
|
|
package through the messages issued by the tools when they detect invalid
|
|
|
|
ones, or when the deprecated ``License`` field or license classifiers are used.
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
|
2024-06-28 18:20:47 -04:00
|
|
|
If an invalid ``License-Expression`` is used, the users will not be able
|
|
|
|
to publish their package to PyPI and an error message will help them
|
|
|
|
understand they need to use SPDX identifiers.
|
|
|
|
It will be possible to generate a distribution with incorrect license metadata,
|
2024-07-25 17:07:53 -04:00
|
|
|
but not to publish one on PyPI or any other index server that enforces
|
|
|
|
``License-Expression`` validity.
|
2024-06-28 18:20:47 -04:00
|
|
|
For authors using the now-deprecated ``License`` field or license classifiers,
|
|
|
|
packaging tools may warn them and inform them of the replacement,
|
|
|
|
``License-Expression``.
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
|
|
|
|
Tools may also help with the conversion and suggest a license expression in
|
2024-05-10 00:04:17 -04:00
|
|
|
many common cases:
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
|
2024-04-06 14:23:15 -04:00
|
|
|
- The appendix :ref:`639-spec-mapping-classifiers-identifiers` provides
|
2024-05-10 00:04:17 -04:00
|
|
|
tool authors with recommendation on how to suggest a license expression
|
|
|
|
produced from legacy classifiers.
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
|
2024-05-10 00:04:17 -04:00
|
|
|
- Tools may be able to suggest how to update an existing ``License`` value
|
|
|
|
in project source metadata and convert that to a license expression,
|
PEP 639: Further update per discussion, w/flat license key, etc. (#2705)
Substantive content changes:
* Instead of adding a new top-level `license-expression` key for the license expression in the `[project]` table of the `pyproject.toml` source metadata, the PEP now specifies using the top-level string value of the `license` key for this purpose, which PEP 621 (PEP-621) reserved it for, and updates the `license-expression` and `license` key specs, and the examples, rejected ideas and other sections accordingly.
* Since this makes it not possible to convert a legacy `license` key to the new `License-Expression` field at build time, and that's not really advisable anyway, it drastically simplifies the normative Converting Legacy Metadata section to just a single normative statement, and updates/removes other mentions of it accordingly, and the (already rather unhelpful) example
* Likewise, it simplifies and refines the guidance in the Mapping classifiers to SPDX identifiers section to be more general and less focused on build time, and also allows tools to ignore redundant parent classifiers (Note: This section will be moved to an external appendix in the next PR, but I didn't move it here for ease of review)
* The `license_files` directory was renamed to `licenses` at the request of @brettcannon and to simplify things a touch
* The specified handling of the `license.file` key was a bit confused by a (apparently quite common) misunderstanding about how the specified file is used (to inject its text directly under the `License` field in core metadata, rather than included in distribution archives or its path specified in metadata) due to it being rather underspecified in PEP 621, which this revision corrects.
* Bump the core metadata version to reflect acceptance of PEP 685 as Metadata 2.3
* Bump the SPDX license list version to be up to date
Significant non-normative/editorial changes:
* Mention implementation of drafts of this PEP in Hatch and Setuptools, and also describes previous efforts in Setuptools and Wheel that this PEP builds on more clearly, as suggested on the discussion thread
* Reference the canonical project [source] metadata PyPA spec instead of PEP 621, use clearer language surrounding that, and update a few references to other PEPs
* Revise the Motivations and Rationale to be less duplicative/redundant, more balanced and focused more specifically on their respective areas (providing some background and describing the problem, and introducing and justifying the proposed solution, respectively)
* Add a short blurb making explicit the use of RFC 2119 terminology (MUST, SHOULD, etc)
* Update PEP headers
* Various other minor revisions to correct typos and other issues, clarify and simply the text, and improve source formatting.
2022-08-02 23:43:25 -04:00
|
|
|
as also :ref:`specified in this PEP <639-spec-converting-metadata>`.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _639-reference-implementation:
|
|
|
|
|
2020-09-28 03:58:34 -04:00
|
|
|
Reference Implementation
|
|
|
|
========================
|
|
|
|
|
2020-09-30 10:13:58 -04:00
|
|
|
Tools will need to support parsing and validating license expressions in the
|
2024-06-28 18:20:47 -04:00
|
|
|
``License-Expression`` field if they decide to implement this part of the
|
|
|
|
specification.
|
|
|
|
It's up to the tools whether they prefer to implement the validation on their
|
|
|
|
side (e.g. like `hatch <hatchparseimpl_>`__) or use one of the available
|
|
|
|
Python libraries (e.g. `license-expression <licenseexplib_>`__).
|
|
|
|
This PEP does not mandate using any specific library and leaves it to the
|
|
|
|
tools authors to choose the best implementation for their projects.
|
2022-04-19 03:26:30 -04:00
|
|
|
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _639-rejected-ideas:
|
2020-09-28 03:58:34 -04:00
|
|
|
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
Rejected Ideas
|
2020-09-28 03:58:34 -04:00
|
|
|
==============
|
|
|
|
|
2024-04-06 14:23:15 -04:00
|
|
|
Many alternative ideas were proposed and after a careful consideration,
|
|
|
|
rejected. The exhaustive list including the rationale for rejecting can be found
|
|
|
|
in a :ref:`separate page <639-rejected-ideas-details>`.
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
|
|
|
|
|
2024-04-06 14:23:15 -04:00
|
|
|
Appendices
|
|
|
|
==========
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-08-20 06:29:32 -04:00
|
|
|
A list of auxiliary documents is provided:
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2024-04-06 14:23:15 -04:00
|
|
|
- Detailed :ref:`Licensing Examples <639-examples>`,
|
|
|
|
- :ref:`User Scenarios <639-user-scenarios>`,
|
|
|
|
- :ref:`License Documentation in Python and Other Projects <639-license-doc-python>`,
|
|
|
|
- :ref:`Mapping License Classifiers to SPDX Identifiers <639-spec-mapping-classifiers-identifiers>`,
|
|
|
|
- :ref:`Rejected Ideas <639-rejected-ideas-details>` in detail.
|
2020-09-28 03:58:34 -04:00
|
|
|
|
|
|
|
|
|
|
|
References
|
|
|
|
==========
|
|
|
|
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _cc0: https://creativecommons.org/publicdomain/zero/1.0/
|
|
|
|
.. _cdstats: https://clearlydefined.io/stats
|
|
|
|
.. _choosealicense: https://choosealicense.com/
|
|
|
|
.. _classifierissue: https://github.com/pypa/trove-classifiers/issues/17
|
|
|
|
.. _classifiers: https://pypi.org/classifiers
|
|
|
|
.. _classifiersrepo: https://github.com/pypa/trove-classifiers
|
|
|
|
.. _clearlydefined: https://clearlydefined.io
|
|
|
|
.. _coremetadataspec: https://packaging.python.org/specifications/core-metadata
|
PEP 639: Further update per discussion, w/flat license key, etc. (#2705)
Substantive content changes:
* Instead of adding a new top-level `license-expression` key for the license expression in the `[project]` table of the `pyproject.toml` source metadata, the PEP now specifies using the top-level string value of the `license` key for this purpose, which PEP 621 (PEP-621) reserved it for, and updates the `license-expression` and `license` key specs, and the examples, rejected ideas and other sections accordingly.
* Since this makes it not possible to convert a legacy `license` key to the new `License-Expression` field at build time, and that's not really advisable anyway, it drastically simplifies the normative Converting Legacy Metadata section to just a single normative statement, and updates/removes other mentions of it accordingly, and the (already rather unhelpful) example
* Likewise, it simplifies and refines the guidance in the Mapping classifiers to SPDX identifiers section to be more general and less focused on build time, and also allows tools to ignore redundant parent classifiers (Note: This section will be moved to an external appendix in the next PR, but I didn't move it here for ease of review)
* The `license_files` directory was renamed to `licenses` at the request of @brettcannon and to simplify things a touch
* The specified handling of the `license.file` key was a bit confused by a (apparently quite common) misunderstanding about how the specified file is used (to inject its text directly under the `License` field in core metadata, rather than included in distribution archives or its path specified in metadata) due to it being rather underspecified in PEP 621, which this revision corrects.
* Bump the core metadata version to reflect acceptance of PEP 685 as Metadata 2.3
* Bump the SPDX license list version to be up to date
Significant non-normative/editorial changes:
* Mention implementation of drafts of this PEP in Hatch and Setuptools, and also describes previous efforts in Setuptools and Wheel that this PEP builds on more clearly, as suggested on the discussion thread
* Reference the canonical project [source] metadata PyPA spec instead of PEP 621, use clearer language surrounding that, and update a few references to other PEPs
* Revise the Motivations and Rationale to be less duplicative/redundant, more balanced and focused more specifically on their respective areas (providing some background and describing the problem, and introducing and justifying the proposed solution, respectively)
* Add a short blurb making explicit the use of RFC 2119 terminology (MUST, SHOULD, etc)
* Update PEP headers
* Various other minor revisions to correct typos and other issues, clarify and simply the text, and improve source formatting.
2022-08-02 23:43:25 -04:00
|
|
|
.. _coremetadataclassifiers: https://packaging.python.org/en/latest/specifications/core-metadata/#classifier-multiple-use
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _globmodule: https://docs.python.org/3/library/glob.html
|
PEP 639: Further update per discussion, w/flat license key, etc. (#2705)
Substantive content changes:
* Instead of adding a new top-level `license-expression` key for the license expression in the `[project]` table of the `pyproject.toml` source metadata, the PEP now specifies using the top-level string value of the `license` key for this purpose, which PEP 621 (PEP-621) reserved it for, and updates the `license-expression` and `license` key specs, and the examples, rejected ideas and other sections accordingly.
* Since this makes it not possible to convert a legacy `license` key to the new `License-Expression` field at build time, and that's not really advisable anyway, it drastically simplifies the normative Converting Legacy Metadata section to just a single normative statement, and updates/removes other mentions of it accordingly, and the (already rather unhelpful) example
* Likewise, it simplifies and refines the guidance in the Mapping classifiers to SPDX identifiers section to be more general and less focused on build time, and also allows tools to ignore redundant parent classifiers (Note: This section will be moved to an external appendix in the next PR, but I didn't move it here for ease of review)
* The `license_files` directory was renamed to `licenses` at the request of @brettcannon and to simplify things a touch
* The specified handling of the `license.file` key was a bit confused by a (apparently quite common) misunderstanding about how the specified file is used (to inject its text directly under the `License` field in core metadata, rather than included in distribution archives or its path specified in metadata) due to it being rather underspecified in PEP 621, which this revision corrects.
* Bump the core metadata version to reflect acceptance of PEP 685 as Metadata 2.3
* Bump the SPDX license list version to be up to date
Significant non-normative/editorial changes:
* Mention implementation of drafts of this PEP in Hatch and Setuptools, and also describes previous efforts in Setuptools and Wheel that this PEP builds on more clearly, as suggested on the discussion thread
* Reference the canonical project [source] metadata PyPA spec instead of PEP 621, use clearer language surrounding that, and update a few references to other PEPs
* Revise the Motivations and Rationale to be less duplicative/redundant, more balanced and focused more specifically on their respective areas (providing some background and describing the problem, and introducing and justifying the proposed solution, respectively)
* Add a short blurb making explicit the use of RFC 2119 terminology (MUST, SHOULD, etc)
* Update PEP headers
* Various other minor revisions to correct typos and other issues, clarify and simply the text, and improve source formatting.
2022-08-02 23:43:25 -04:00
|
|
|
.. _hatch: https://hatch.pypa.io/latest/
|
|
|
|
.. _hatchimplementation: https://discuss.python.org/t/12622/22
|
2024-06-28 18:20:47 -04:00
|
|
|
.. _hatchparseimpl: https://github.com/pypa/hatch/blob/hatchling-v1.24.2/backend/src/hatchling/licenses/parse.py#L8-L18
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _installedspec: https://packaging.python.org/specifications/recording-installed-packages/
|
|
|
|
.. _interopissue: https://github.com/pypa/interoperability-peps/issues/46
|
|
|
|
.. _licenseexplib: https://github.com/nexB/license-expression/
|
|
|
|
.. _osi: https://opensource.org
|
|
|
|
.. _packagingissue: https://github.com/pypa/packaging-problems/issues/41
|
2024-05-10 00:04:17 -04:00
|
|
|
.. _pyprojecttoml: https://packaging.python.org/en/latest/specifications/pyproject-toml/
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _pepissue: https://github.com/pombredanne/spdx-pypi-pep/issues/1
|
|
|
|
.. _pypi: https://pypi.org/
|
|
|
|
.. _pypugdistributionpackage: https://packaging.python.org/en/latest/glossary/#term-Distribution-Package
|
|
|
|
.. _pypugglossary: https://packaging.python.org/glossary/
|
|
|
|
.. _pypugproject: https://packaging.python.org/en/latest/glossary/#term-Project
|
|
|
|
.. _sdistspec: https://packaging.python.org/specifications/source-distribution-format/
|
|
|
|
.. _setuptoolsfiles: https://github.com/pypa/setuptools/issues/2739
|
|
|
|
.. _setuptoolspep639: https://github.com/pypa/setuptools/pull/2645
|
|
|
|
.. _spdx: https://spdx.dev/
|
2024-06-28 18:20:47 -04:00
|
|
|
.. _spdxcustom: https://spdx.github.io/spdx-spec/v2.2.2/other-licensing-information-detected/
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _spdxid: https://spdx.dev/ids/
|
|
|
|
.. _spdxlist: https://spdx.org/licenses/
|
2023-07-31 13:01:59 -04:00
|
|
|
.. _spdxpression: https://spdx.github.io/spdx-spec/v2.2.2/SPDX-license-expressions/
|
2022-04-19 03:26:30 -04:00
|
|
|
.. _spdxversion: https://github.com/pombredanne/spdx-pypi-pep/issues/6
|
|
|
|
.. _wheelfiles: https://github.com/pypa/wheel/issues/138
|
|
|
|
.. _wheelproject: https://wheel.readthedocs.io/en/stable/
|
|
|
|
.. _wheelspec: https://packaging.python.org/specifications/binary-distribution-format/
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
|
|
|
|
|
|
|
|
Acknowledgments
|
|
|
|
===============
|
2020-09-28 03:58:34 -04:00
|
|
|
|
2023-10-11 08:05:51 -04:00
|
|
|
- Alyssa Coghlan
|
2020-09-28 03:58:34 -04:00
|
|
|
- Kevin P. Fleming
|
|
|
|
- Pradyun Gedam
|
|
|
|
- Oleg Grenrus
|
|
|
|
- Dustin Ingram
|
|
|
|
- Chris Jerdonek
|
|
|
|
- Cyril Roelandt
|
|
|
|
- Luis Villa
|
2024-05-10 03:52:08 -04:00
|
|
|
- Seth M. Larson
|
|
|
|
- Ofek Lev
|
2020-09-28 03:58:34 -04:00
|
|
|
|
|
|
|
|
PEP 639: Make requested additions and changes, add additional helpful info, reformat, update and copyedit (#2164)
* PEP 639: Reframe core metadata update as discrete proposal per PEP 643
* PEP 639: Clean up formatting, syntax, spelling, headers and lists
* PEP 639: Rewrite to reflect License-Expression field and depr process
* PEP 639: Update examples, current tools survey, links and more
* PEP 639: Add PEP 621, expand/move examples & reorganize/shorten headings
* PEP 639: Further specify and clarify license file handling
* PEP 639: Add additional ambigous classifiers and tool recommendations
* PEP 639: Rework PEP 621 keys, refine dynamic/globs & add rejected ideas
* PEP 639: Specify license path root & subdirs, & expand examples
* PEP 639: Add license_files dir, rejected ideas & sdist/wheel/installed
* PEP 639: Add PyPI validation of new fields for newly-uploaded files
* PEP 639: Add open isssue for back-filling & reject per-dist licenses
* PEP 639: Add User Scenarios to provide guidance for common use cases
* PEP 639: Update Abstract, Goals, Rationale, Compat. & other sections
* PEP 639: Add terminology section & use consistant, clear & correct terms
* PEP 639: Make refs inline per #2130, add links, fix others & refine text
* PEP 639: Copyedit and proofread for grammar, phrasing, clarity & tone
* PEP 639: Address reviewer and community feedback
* PEP 639: Add custom IDs issue & clarify rejected license key str value
2021-12-17 18:20:01 -05:00
|
|
|
Copyright
|
|
|
|
=========
|
|
|
|
|
|
|
|
This document is placed in the public domain or under the
|
2022-04-19 03:26:30 -04:00
|
|
|
`CC0-1.0-Universal license <cc0_>`__, whichever is more permissive.
|