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

Python Enhancement Proposals

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

Inhaltsverzeichnis

Wichtig

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

×

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

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:

  1. Das ursprüngliche Schlüssel-Wert-Format sollte mit email.parser.HeaderParser gelesen werden;
  2. Alle transformierten Schlüssel sollten auf Kleinbuchstaben reduziert werden. Bindestriche sollten durch Unterstriche ersetzt werden, aber ansonsten alle anderen Zeichen beibehalten werden;
  3. 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;
  4. Das Feld Keywords sollte in eine Liste umgewandelt werden, indem der ursprüngliche Wert nach Kommas getrennt wird;
  5. Der Nachrichtenkörper, falls vorhanden, sollte auf den Wert des Schlüssels description gesetzt werden.
  6. 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-Type und Provides-Extra
  • Akzeptable Werte für das Feld Name werden 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.

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