PEP 566 – Metadaten für Python-Softwarepakete 2.1
- Autor:
- Dustin Ingram <di at python.org>
- BDFL-Delegate:
- Daniel Holth
- Discussions-To:
- Distutils-SIG Liste
- Status:
- Final
- Typ:
- Standards Track
- Thema:
- Packaging
- Erstellt:
- 01-Dez-2017
- Python-Version:
- 3.x
- Post-History:
- Ersetzt:
- 345
- Resolution:
- Distutils-SIG Nachricht
Zusammenfassung
Dieses PEP beschreibt die Änderungen zwischen den Versionen 1.2 und 2.1 der Kernmetadatenspezifikation für Python-Pakete. Version 1.2 ist in PEP 345 spezifiziert.
Es ändert auch die kanonische Quelle für Feldspezifikationen zum Referenzdokument Core Metadata Specification, das Einzelheiten zu Feldnamen, deren Semantik und Verwendung enthält.
Felder
Die kanonische Quelle für die Namen und die Semantik jedes der unterstützten Metadatenfelder ist das Dokument Core Metadata Specification.
Felder, die mit „(Mehrfachverwendung)“ gekennzeichnet sind, können in einer einzelnen PKG-INFO-Datei mehrmals angegeben werden. Andere Felder dürfen nur einmal in einer PKG-INFO-Datei vorkommen. Felder, die mit „(optional)“ gekennzeichnet sind, müssen nicht in einer gültigen PKG-INFO-Datei enthalten sein; alle anderen Felder müssen vorhanden sein.
Neu in Version 2.1
Description-Content-Type (optional)
Eine Zeichenkette, die die Markup-Syntax (falls vorhanden) angibt, die in der Beschreibung der Distribution verwendet wird, sodass Werkzeuge die Beschreibung intelligent rendern können.
Historisch gesehen gehen Werkzeuge wie PyPI davon aus, dass die Beschreibung eines Pakets in reStructuredText (reST) formatiert ist, und greifen auf reinen Text zurück, wenn die Beschreibung kein gültiges reST ist.
Die Einführung dieses Feldes ermöglicht es PyPI, zusätzliche Arten von Markup-Syntax zu unterstützen und diese Annahme nicht treffen zu müssen.
Die vollständige Spezifikation für dieses Feld ist in der Core Metadata Specification definiert.
Provides-Extra (optional, mehrfach verwendbar)
Eine Zeichenkette, die den Namen einer optionalen Funktion enthält. Muss ein gültiger Python-Identifikator sein. Kann verwendet werden, um eine Abhängigkeit davon abhängig zu machen, ob die optionale Funktion angefordert wurde.
Diese Einführung dieses Feldes ermöglicht es Paketinstallationswerkzeugen (wie z. B. pip), zu ermitteln, welche Extras ein bestimmtes Paket bereitstellt, und damit Paketveröffentlichungswerkzeugen (wie z. B. twine), Probleme mit Umgebungskennzeichnungen, die Extras verwenden, zu überprüfen.
Die vollständige Spezifikation für dieses Feld ist in der Core Metadata Specification definiert.
Geändert in Version 2.1
Name
Die Spezifikation für das Format dieses Feldes ist nun identisch mit der Spezifikation für Distributionsnamen, die in PEP 508 definiert ist.
Description
Zusätzlich zum Header-Feld Description kann die Beschreibung der Distribution stattdessen im Nachrichtenkörper bereitgestellt werden (d. h. nach einer vollständig leeren Zeile nach den Headern, ohne Einrückung oder sonstige spezielle Formatierung erforderlich).
Versionsspezifizierer
Anforderungen an die Versionsnummerierung und die Semantik für die Angabe von Vergleichen zwischen Versionen sind in PEP 440 definiert. Direkte Verweise, wie in PEP 440 definiert, sind ebenfalls als Alternative zu Versionsspezifizierern zulässig.
Gemäß PEP 508 müssen Versionsspezifizierer in den Feldern Requires-Dist, Provides-Dist, Obsoletes-Dist oder Requires-External nicht mehr von Klammern umschlossen sein. So ist z. B. requests >= 2.8.1 nun ein gültiger Wert. Das empfohlene Format ist ohne Klammern, aber Werkzeuge, die Metadaten parsen, sollten auch Versionsspezifizierer in Klammern verarbeiten können. Des Weiteren dürfen öffentliche Indexserver strenge Versionsabgleichklauseln oder direkte Verweise in diesen Feldern verbieten.
Die Verwendung von Versionsspezifizierern ist ansonsten unverändert gegenüber PEP 345.
Umgebungsmarkierer
Ein **Umgebungskennzeichen** ist ein Kennzeichen, das am Ende eines Feldes nach einem Semikolon („;“) hinzugefügt werden kann, um eine Bedingung für die Ausführungsumgebung hinzuzufügen.
Das Format für Umgebungskennzeichen, das zur Deklaration einer solchen Bedingung verwendet wird, ist im Abschnitt Umgebungskennzeichen von PEP 508 definiert.
Die Verwendung von Umgebungskennzeichen ist ansonsten unverändert gegenüber PEP 345.
JSON-kompatible Metadaten
Es kann notwendig sein, Metadaten in einer Datenstruktur zu speichern, die keine mehrfach wiederholten Schlüssel zulässt, wie z. B. JSON.
Die kanonische Methode zur Umwandlung von Metadatenfeldern in eine solche Datenstruktur ist wie folgt:
- Das ursprüngliche Schlüssel-Wert-Format sollte mit
email.parser.HeaderParsergelesen werden; - Alle transformierten Schlüssel sollten auf Kleinbuchstaben reduziert werden. Bindestriche sollten durch Unterstriche ersetzt werden, aber ansonsten alle anderen Zeichen beibehalten werden;
- Der transformierte Wert für jedes Feld, das mit „(Mehrfachverwendung)“ gekennzeichnet ist, sollte eine einzelne Liste sein, die alle ursprünglichen Werte für den gegebenen Schlüssel enthält;
- Das Feld
Keywordssollte in eine Liste umgewandelt werden, indem der ursprüngliche Wert nach Kommas getrennt wird; - Der Nachrichtenkörper, falls vorhanden, sollte auf den Wert des Schlüssels
descriptiongesetzt werden. - Das Ergebnis sollte als string-schlüssel-gesteuertes Dictionary gespeichert werden.
Zusammenfassung der Unterschiede zu PEP 345
- Metadata-Version ist jetzt 2.1.
- Felder werden jetzt über die Core Metadata Specification spezifiziert.
- Zwei neue Felder hinzugefügt:
Description-Content-TypeundProvides-Extra - Akzeptable Werte für das Feld
Namewerden nun gemäß PEP 508 spezifiziert. - Kanonische Methode zur Umwandlung in eine JSON-kompatible Datenstruktur hinzugefügt.
Referenzen
Dieses Dokument spezifiziert Version 2.1 des Metadatenformats. Version 1.0 ist in PEP 241 spezifiziert. Version 1.1 ist in PEP 314 spezifiziert. Version 1.2 ist in PEP 345 spezifiziert. Version 2.0, obwohl nicht formell angenommen, wurde in PEP 426 spezifiziert.
Urheberrecht
Dieses Dokument wurde gemeinfrei erklärt.
Danksagungen
Danke an Alyssa Coghlan und Thomas Kluyver für ihre Beiträge zu diesem PEP.
Quelle: https://github.com/python/peps/blob/main/peps/pep-0566.rst
Zuletzt geändert: 2025-02-01 08:55:40 GMT