@@ -451,22 +451,18 @@ in the ``Classifier`` :term:`Core Metadata field`
451
451
(`described in the Core Metadata specification <coremetadataclassifiers _>`__)
452
452
is deprecated and replaced by the more precise ``License-Expression `` field.
453
453
454
- If the ``License-Expression `` field is present, build tools SHOULD and
455
- publishing tools MUST raise an error if one or more license classifiers
454
+ If the ``License-Expression `` field is present, build tools MAY raise an error
455
+ if one or more license classifiers
456
456
is included in a ``Classifier `` field, and MUST NOT add
457
457
such classifiers themselves.
458
458
459
- Otherwise, if this field contains a license classifier, build tools MAY
460
- and publishing tools SHOULD issue a warning informing users such classifiers
459
+ Otherwise, if this field contains a license classifier,
460
+ tools MAY issue a warning informing users such classifiers
461
461
are deprecated, and recommending ``License-Expression `` instead.
462
462
For compatibility with existing publishing and installation processes,
463
463
the presence of license classifiers SHOULD NOT raise an error unless
464
464
``License-Expression `` is also provided.
465
465
466
- For all newly-uploaded distributions that include a
467
- ``License-Expression `` field, the `Python Package Index (PyPI) <pypi _>`__ MUST
468
- reject any that also specify any license classifiers.
469
-
470
466
New license classifiers MUST NOT be `added to PyPI <classifiersrepo _>`__;
471
467
users needing them SHOULD use the ``License-Expression `` field instead.
472
468
License classifiers may be removed from a new version of the specification
@@ -524,104 +520,62 @@ paths in the project source tree relative to ``pyproject.toml`` to file(s)
524
520
containing licenses and other legal notices to be distributed with the package.
525
521
It corresponds to the ``License-File `` fields in the Core Metadata.
526
522
527
- Its value is a table, which if present MUST contain one of two optional,
528
- mutually exclusive subkeys, ``paths `` and ``globs ``; if both are specified,
529
- tools MUST raise an error. Both are arrays of strings; the ``paths `` subkey
530
- contains verbatim file paths, and the ``globs `` subkey valid glob patterns,
531
- which MUST be parsable by the ``glob `` `module <globmodule _>`__ in the
532
- Python standard library.
533
-
523
+ Its value is an array of strings which MUST contain valid glob patterns,
524
+ as specified below.
525
+ The glob patterns MAY contain special glob characters: ``* ``, ``? ``, ``** ``
526
+ and character ranges: ``[] ``, and tools MUST support them.
534
527
Path delimiters MUST be the forward slash character (``/ ``),
535
528
and parent directory indicators (``.. ``) MUST NOT be used.
536
529
Tools MUST assume that license file content is valid UTF-8 encoded text,
537
530
and SHOULD validate this and raise an error if it is not.
538
531
539
- If the ``paths `` subkey is a non-empty array, build tools:
540
-
541
- - MUST treat each value as a verbatim, literal file path, and
542
- MUST NOT treat them as glob patterns.
543
-
544
- - MUST include each listed file in all distribution archives.
545
-
546
- - MUST NOT match any additional license files beyond those explicitly
547
- statically specified by the user under the ``paths `` subkey.
532
+ Literal paths (e.g. ``LICENSE ``) are treated as valid globs which means they
533
+ can also be defined.
548
534
549
- - MUST list each file path under a ``License-File `` field in the Core Metadata.
535
+ To achieve better portability, the filenames to match should only contain
536
+ the alphanumeric characters, underscores (``_ ``), hyphens (``- ``)
537
+ and dots (``. ``).
550
538
551
- - MUST raise an error if one or more paths do not correspond to a valid file
552
- in the project source that can be copied into the distribution archive.
553
-
554
- If the ``globs `` subkey is a non-empty array, build tools:
539
+ Build tools:
555
540
556
541
- MUST treat each value as a glob pattern, and MUST raise an error if the
557
542
pattern contains invalid glob syntax.
558
543
559
- - MUST include all files matched by at least one listed pattern in all
544
+ - MUST include all files matched by a listed pattern in all
560
545
distribution archives.
561
546
562
- - MAY exclude files matched by glob patterns that can be unambiguously
563
- determined to be backup, temporary, hidden, OS-generated or VCS-ignored.
564
-
565
547
- MUST list each matched file path under a ``License-File `` field in the
566
548
Core Metadata.
567
549
568
- - SHOULD issue a warning and MAY raise an error if no files are matched.
569
-
570
- - MAY issue a warning if any individual user-specified pattern
550
+ - MUST raise an error if any individual user-specified pattern
571
551
does not match at least one file.
572
552
573
- If the ``license-files `` key is present, and the `` paths `` or `` globs `` subkey
553
+ If the ``license-files `` key is present and
574
554
is set to a value of an empty array, then tools MUST NOT include any
575
555
license files and MUST NOT raise an error.
576
556
577
- .. _639-default-patterns :
578
-
579
- If the ``license-files `` key is not present and not explicitly marked as
580
- ``dynamic ``, tools MUST assume a default value of the following:
581
-
582
- .. code-block :: toml
583
-
584
- license-files.globs = ["LICEN[CS]E*", "COPYING*", "NOTICE*", "AUTHORS*"]
585
-
586
- In this case, tools MAY issue a warning if no license files are matched,
587
- but MUST NOT raise an error.
588
-
589
- If the ``license-files `` key is marked as ``dynamic `` (and not present),
590
- to preserve consistent behavior with current tools and help ensure the packages
591
- they create are legally distributable, build tools SHOULD default to
592
- including at least the license files matching the above patterns, unless the
593
- user has explicitly specified their own.
594
-
595
557
Examples of valid license files declaration:
596
558
597
559
.. code-block :: toml
598
560
599
561
[project]
600
- license-files = { globs = ["LICEN[CS]E*", "AUTHORS*"] }
562
+ license-files = ["LICEN[CS]E*", "AUTHORS*"]
601
563
602
564
[project]
603
- license-files.paths = ["licenses/LICENSE.MIT", "licenses/LICENSE.CC0"]
565
+ license-files = ["licenses/LICENSE.MIT", "licenses/LICENSE.CC0"]
604
566
605
567
[project]
606
- license-files = { paths = [] }
568
+ license-files = ["LICENSE.txt", "licenses/*"]
607
569
608
570
[project]
609
- license-files.globs = []
571
+ license-files = []
610
572
611
573
Examples of invalid license files declaration:
612
574
613
575
.. code-block :: toml
614
576
615
577
[project]
616
- license-files.globs = ["LICEN[CS]E*", "AUTHORS*"]
617
- license-files.paths = ["LICENSE.MIT"]
618
-
619
- Reason: license-files.paths and license-files.globs are mutually exclusive.
620
-
621
- .. code-block :: toml
622
-
623
- [project]
624
- license-files = { paths = ["..\LICENSE.MIT"] }
578
+ license-files = ["..\LICENSE.MIT"]
625
579
626
580
Reason: ``.. `` must not be used.
627
581
``\ `` is an invalid path delimiter, ``/ `` must be used.
@@ -630,7 +584,7 @@ Reason: ``..`` must not be used.
630
584
.. code-block :: toml
631
585
632
586
[project]
633
- license-files = { globs = ["LICEN{CSE*"] }
587
+ license-files = ["LICEN{CSE*"]
634
588
635
589
Reason: "LICEN{CSE*" is not a valid glob.
636
590
@@ -659,14 +613,9 @@ the ``license-files`` key instead.
659
613
If the specified license ``file `` is present in the source tree,
660
614
build tools SHOULD use it to fill the ``License-File `` field
661
615
in the core metadata, and MUST include the specified file
662
- as if it were specified in a ``license-file.paths `` field.
616
+ as if it were specified in a ``license-file `` field.
663
617
If the file does not exist at the specified path,
664
618
tools MUST raise an informative error as previously specified.
665
- However, tools MUST also still assume the
666
- :ref: `specified default value <639-default-patterns >`
667
- for the ``license-files `` key and also include,
668
- in addition to a license file specified under the ``license.file `` subkey,
669
- any license files that match the specified list of patterns.
670
619
671
620
Table values for the ``license `` key MAY be removed
672
621
from a new version of the specification in a future PEP.
@@ -751,9 +700,9 @@ and license classifiers retain backwards compatibility. A removal is
751
700
left to a future PEP and a new version of the Core Metadata specification.
752
701
753
702
Specification of the new ``License-File `` Core Metadata field and adding the
754
- files in the distribution codifies the existing practices of many packaging
755
- tools. It is designed to be largely backwards-compatible with their existing
756
- use of that field. The new ``license-files `` key in the ``[project] `` table of
703
+ files in the distribution is designed to be largely backwards-compatible with
704
+ the existing use of that field in many packaging tools.
705
+ The new ``license-files `` key in the ``[project] `` table of
757
706
``pyproject.toml `` will only have an effect once users and tools adopt it.
758
707
759
708
This PEP specifies that license files should be placed in a dedicated
@@ -807,7 +756,8 @@ If an invalid ``License-Expression`` is used, the users will not be able
807
756
to publish their package to PyPI and an error message will help them
808
757
understand they need to use SPDX identifiers.
809
758
It will be possible to generate a distribution with incorrect license metadata,
810
- but not to publish one on PyPI or any other index server that enforces ``License-Expression `` validity.
759
+ but not to publish one on PyPI or any other index server that enforces
760
+ ``License-Expression `` validity.
811
761
For authors using the now-deprecated ``License `` field or license classifiers,
812
762
packaging tools may warn them and inform them of the replacement,
813
763
``License-Expression ``.
0 commit comments