Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python Enhancement Proposals

Wichtig

Dieses PEP ist ein historisches Dokument. Die aktuelle, kanonische Spezifikation, Lizenzbeispiele und Benutzerszenarien, wird auf der PyPA Specs-Seite gepflegt.

×

Siehe den PyPA-Spezifikations-Update-Prozess, um Änderungen vorzuschlagen.

Anhang: Lizenzbeispiele

Zusammenfassung

Dieses Dokument enthält Anleitungen zur Anwendung von PEP 639 in realen Beispielen.

Beispiele

Grundlegendes Beispiel

Das Setuptools-Projekt selbst verwendet ab Version 59.1.1 nicht das Feld License in seinen eigenen Metadaten. Des Weiteren gibt es nicht mehr explizit license_file/license_files an, wie es zuvor der Fall war, da Setuptools auf seine eigene automatische Einbeziehung von lizenzbezogenen Dateien mit üblichen Mustern, wie der von ihm verwendeten Datei LICENSE, setzt.

Es enthält die folgenden lizenzbezogenen Metadaten in seiner setup.cfg

[metadata]
classifiers =
    License :: OSI Approved :: MIT License

Die einfachste Migration zu PEP 639 würde darin bestehen, stattdessen Folgendes zu verwenden:

[metadata]
license_expression = MIT

Oder in der [project]-Tabelle von pyproject.toml

[project]
license = "MIT"

Die ausgegebenen Kernmetadaten für die Distributionspakete wären dann:

License-Expression: MIT
License-File: LICENSE

Die Datei LICENSE würde im sdist unter /setuptools-${VERSION}/LICENSE und im Wheel unter /setuptools-${VERSION}.dist-info/licenses/LICENSE gespeichert und von dort bei der Installation in das Site-Verzeichnis (z. B. site-packages) entpackt werden; / ist die Wurzel des jeweiligen Archivs und ${VERSION} die Version des Setuptools-Releases in den Kernmetadaten.

Fortgeschrittenes Beispiel

Angenommen, Setuptools würde die Lizenzen von Drittanbieterprojekten einbeziehen, die in den Verzeichnissen setuptools/_vendor/ und pkg_resources/_vendor gebündelt sind; insbesondere:

packaging==21.2
pyparsing==2.2.1
ordered-set==3.1.1
more_itertools==8.8.0

Die Lizenzangaben für diese Projekte sind:

packaging: Apache-2.0 OR BSD-2-Clause
pyparsing: MIT
ordered-set: MIT
more_itertools: MIT

Eine umfassende Lizenzangabe, die sowohl Setuptools selbst als auch seine gebündelten Abhängigkeiten abdeckt, würde diese Metadaten enthalten und alle Lizenzangaben kombinieren. Eine solche Angabe könnte lauten:

MIT AND (Apache-2.0 OR BSD-2-Clause)

Darüber hinaus müssen gemäß den Anforderungen der Lizenzen die entsprechenden Lizenzdateien in das Paket aufgenommen werden. Angenommen, die Datei LICENSE enthält den Text der MIT-Lizenz und die von Setuptools, pyparsing, more_itertools und ordered-set verwendeten Urheberrechtshinweise; und die Dateien LICENSE* im Verzeichnis setuptools/_vendor/packaging/ enthalten den Apache 2.0 und die 2-Klausel-BSD-Lizenztexte sowie die Urheberrechtserklärung für Packaging und den Hinweis zur Lizenzauswahl.

Insbesondere gehen wir davon aus, dass sich die Lizenzdateien an den folgenden Pfaden im Projektquellbaum befinden (relativ zum Projektstammverzeichnis und pyproject.toml)

LICENSE
setuptools/_vendor/packaging/LICENSE
setuptools/_vendor/packaging/LICENSE.APACHE
setuptools/_vendor/packaging/LICENSE.BSD

Zusammengenommen wäre unsere setup.cfg:

[metadata]
license_expression = MIT AND (Apache-2.0 OR BSD-2-Clause)
license_files =
    LICENSE
    setuptools/_vendor/packaging/LICENSE
    setuptools/_vendor/packaging/LICENSE.APACHE
    setuptools/_vendor/packaging/LICENSE.BSD

In der [project]-Tabelle von pyproject.toml können Lizenzdateien über Glob-Muster angegeben werden:

[project]
license = "MIT AND (Apache-2.0 OR BSD-2-Clause)"
license-files = [
    "LICENSE*",
    "setuptools/_vendor/LICENSE*",
]

Alternativ können sie explizit angegeben werden (Pfade werden als Glob-Muster interpretiert):

[project]
license = "MIT AND (Apache-2.0 OR BSD-2-Clause)"
license-files = [
    "LICENSE",
    "setuptools/_vendor/LICENSE",
    "setuptools/_vendor/LICENSE.APACHE",
    "setuptools/_vendor/LICENSE.BSD",
]

Mit beiden Ansätzen wären die ausgegebenen Kernmetadaten in der Distribution:

License-Expression: MIT AND (Apache-2.0 OR BSD-2-Clause)
License-File: LICENSE
License-File: setuptools/_vendor/packaging/LICENSE
License-File: setuptools/_vendor/packaging/LICENSE.APACHE
License-File: setuptools/_vendor/packaging/LICENSE.BSD

Im resultierenden sdist, wobei / die Wurzel des Archivs und ${VERSION} die Version des in den Kernmetadaten angegebenen Setuptools-Releases ist, würden sich die Lizenzdateien an folgenden Pfaden befinden:

/setuptools-${VERSION}/LICENSE
/setuptools-${VERSION}/setuptools/_vendor/packaging/LICENSE
/setuptools-${VERSION}/setuptools/_vendor/packaging/LICENSE.APACHE
/setuptools-${VERSION}/setuptools/_vendor/packaging/LICENSE.BSD

Im erstellten Wheel, wobei / die Wurzel des Archivs und ${VERSION} wie zuvor ist, würden die Lizenzdateien wie folgt gespeichert:

/setuptools-${VERSION}.dist-info/licenses/LICENSE
/setuptools-${VERSION}.dist-info/licenses/setuptools/_vendor/packaging/LICENSE
/setuptools-${VERSION}.dist-info/licenses/setuptools/_vendor/packaging/LICENSE.APACHE
/setuptools-${VERSION}.dist-info/licenses/setuptools/_vendor/packaging/LICENSE.BSD

Schließlich würden im installierten Projekt, wobei site-packages das Site-Verzeichnis und ${VERSION} wie zuvor ist, die Lizenzdateien hierhin installiert:

site-packages/setuptools-${VERSION}.dist-info/licenses/LICENSE
site-packages/setuptools-${VERSION}.dist-info/licenses/setuptools/_vendor/packaging/LICENSE
site-packages/setuptools-${VERSION}.dist-info/licenses/setuptools/_vendor/packaging/LICENSE.APACHE
site-packages/setuptools-${VERSION}.dist-info/licenses/setuptools/_vendor/packaging/LICENSE.BSD

Beispiele für Ausdrücke

Einige zusätzliche Beispiele für gültige Werte für License-Expression

License-Expression: MIT
License-Expression: BSD-3-Clause
License-Expression: MIT AND (Apache-2.0 OR BSD-2-clause)
License-Expression: MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause)
License-Expression: GPL-3.0-only WITH Classpath-Exception-2.0 OR BSD-3-Clause
License-Expression: LicenseRef-Public-Domain OR CC0-1.0 OR Unlicense
License-Expression: LicenseRef-Proprietary
License-Expression: LicenseRef-Custom-License