PEP 459 – Standard-Metadatenerweiterungen für Python-Softwarepakete
- Autor:
- Alyssa Coghlan <ncoghlan at gmail.com>
- BDFL-Delegate:
- Alyssa Coghlan <ncoghlan at gmail.com>
- Discussions-To:
- Distutils-SIG Liste
- Status:
- Zurückgezogen
- Typ:
- Standards Track
- Thema:
- Packaging
- Benötigt:
- 426
- Erstellt:
- 11-Nov-2013
- Post-History:
- 21-Dez-2013
Rücknahme eines PEP
Diese PEP basiert auf PEP 426, die selbst zurückgezogen wurde. Details finden Sie im Abschnitt "PEP Withdrawal" dieser PEP.
Bis dahin werden Metadatenerweiterungen weiterhin so behandelt, wie es bei früheren Beispielen wie entry_points.txt der Fall war: als zusätzliche Dateien, die neben der Hauptdatei METADATA in Metadatenverzeichnissen installiert werden.
Zusammenfassung
Diese PEP beschreibt mehrere Standarderweiterungen für die Python-Metadaten.
Wie alle Metadatenerweiterungen ist jedes Standarderweiterungsformat unabhängig versioniert. Änderungen an einem der Formate erfordern ein Update dieser PEP, aber kein Update der Kern-Packaging-Metadaten.
Standard-Erweiterungs-Namespace
Das python-Projekt im Python Package Index bezieht sich auf den CPython-Referenzinterpreter. Dieser Namespace wird als Namespace für die Standard-Metadatenerweiterungen verwendet.
Die derzeit definierten Standarderweiterungen sind
python.detailspython.projectpython.integratorpython.exportspython.commandspython.constraints
Alle Standarderweiterungen sind derzeit auf Version 1.0, und daher kann das Feld extension_metadata weggelassen werden, ohne den Zugriff auf Funktionen zu verlieren.
Die python.details-Erweiterung
Die python.details-Erweiterung ermöglicht die Bereitstellung weiterer Informationen zur Softwareverteilung.
Die python.details-Erweiterung enthält vier benutzerdefinierte Unterfelder
license: die Urheberrechtslizenz für die Distributionkeywords: Paketindex-Schlüsselwörter für die Distributionclassifiers: Trove-Klassifizierer des Paketindex für die Distributiondocument_names: die Namen zusätzlicher Metadatendateien
Alle diese Felder sind optional. Automatisierte Werkzeuge MÜSSEN korrekt funktionieren, wenn eine Distribution sie nicht bereitstellt, einschließlich eines sauberen Fehlers, wenn eine auf einem dieser Felder basierende Operation angefordert wird.
Lizenz
Eine kurze Zeichenkette, die die für diese Distribution verwendete Lizenz zusammenfasst.
Beachten Sie, dass Distributionen, die dieses Feld bereitstellen, weiterhin alle zutreffenden Lizenz-Trove-Klassifizierer im Feld Klassifizierer angeben sollten. Auch wenn ein geeigneter Trove-Klassifizierer verfügbar ist, kann die Lizenzzusammenfassung eine gute Möglichkeit sein, eine bestimmte Version dieser Lizenz anzugeben oder Variationen oder Ausnahmen von der Lizenz zu kennzeichnen.
Dieses Feld SOLLTE weniger als 512 Zeichen und MUSS weniger als 2048 Zeichen enthalten.
Dieses Feld SOLLTE keine Zeilenumbrüche enthalten.
Der vollständige Lizenztext SOLLTE als separate Datei im Quellarchiv der Distribution enthalten sein. Details finden Sie unter Dokumentennamen.
Beispiel
"license": "GPL version 3, excluding DRM provisions"
Schlüsselwörter
Eine Liste zusätzlicher Schlüsselwörter, die zur Unterstützung der Suche nach der Distribution in einem größeren Katalog verwendet werden.
Beispiel
"keywords": ["comfy", "chair", "cushions", "too silly", "monty python"]
Klassifizierer
Eine Liste von Zeichenketten, wobei jede einen einzelnen Klassifizierungswert für die Distribution angibt. Klassifizierer werden in PEP 301 [2] beschrieben.
Beispiel
"classifiers": [
"Development Status :: 4 - Beta",
"Environment :: Console (Text Based)",
"License :: OSI Approved :: GNU General Public License v3 (GPLv3)"
]
Dokumentennamen
Dateinamen für unterstützende Dokumente, die im Metadatenverzeichnis dist-info der Distribution enthalten sind.
Die folgenden unterstützenden Dokumente können benannt werden
description: eine Datei, die eine lange Beschreibung der Distribution enthältlicense: eine Datei mit dem vollständigen Text der Lizenz der Distributionchangelog: eine Datei, die Änderungen an der Distribution beschreibt
Unterstützende Dokumente MÜSSEN direkt im Verzeichnis dist-info enthalten sein. Verzeichnistrennzeichen sind in Dokumentennamen NICHT gestattet.
Das Markup-Format (falls vorhanden) der Datei wird durch die Dateierweiterung angegeben. Dies ermöglicht es Indexservern und anderen automatisierten Tools, enthaltene Textdokumente korrekt darzustellen und Feedback zu Rendering-Fehlern zu geben, anstatt das beabsichtigte Format erraten zu müssen.
Wenn die Dateierweiterung fehlt oder die Erweiterung nicht erkannt wird, MUSS das Standard-Rendering-Format reiner Text sein.
Die folgenden Markup-Renderer SOLLTEN für die angegebenen Dateierweiterungen verwendet werden
- Reiner Text:
.txt, keine Erweiterung, unbekannte Erweiterung - reStructured Text:
.rst - Markdown:
.md - AsciiDoc:
.adoc,.asc,.asciidoc - HTML:
.html,.htm
Automatisierte Tools KÖNNEN eines oder mehrere der angegebenen Formate als reinen Text rendern und KÖNNEN andere Markup-Formate über die aufgeführten hinaus rendern.
Automatisierte Tools SOLLTEN keine Annahmen hinsichtlich der maximalen Länge von unterstützenden Dokumentinhalten treffen, außer soweit es zum Schutz der Integrität eines Dienstes erforderlich ist.
Beispiel
"document_names": {
"description": "README.rst",
"license": "LICENSE.rst",
"changelog": "NEWS"
}
Die python.project-Erweiterung
Die python.project-Erweiterung ermöglicht die Bereitstellung weiterer Informationen zur Erstellung und Wartung der Distribution.
Die python.project-Erweiterung enthält drei benutzerdefinierte Unterfelder
contacts: wichtige Kontaktpunkte für die Distributioncontributors: weitere Mitwirkende an der Distributionproject_urls: relevante URLs für die Distribution
Kontaktinformationen
Details zu Einzelpersonen und Organisationen werden als Mappings mit den folgenden Unterfeldern aufgezeichnet
name: der Name einer Einzelperson oder Gruppeemail: eine E-Mail-Adresse (dies kann eine Mailingliste sein)url: eine URL (z. B. eine Profilseite auf einem Quellcode-Hosting-Dienst)role: einer von"author","maintainer"oder"contributor"
Das Unterfeld name ist erforderlich, die anderen Unterfelder sind optional.
Wenn keine spezifische Rolle angegeben ist, ist der Standard contributor.
E-Mail-Adressen müssen im Format local-part@domain vorliegen, wobei der lokale Teil bis zu 64 Zeichen lang sein darf und die gesamte E-Mail-Adresse nicht mehr als 254 Zeichen enthält. Die formale Spezifikation des Formats ist in RFC 5322 (Abschnitte 3.2.3 und 3.4.1) und RFC 5321 enthalten, mit einer lesbareren Form in der informativen RFC 3696 und den zugehörigen Errata.
Die definierten Mitwirkenden-Rollen sind wie folgt
author: der ursprüngliche Ersteller einer Distributionmaintainer: der aktuelle Hauptmitwirkende für eine Distribution, wenn er nicht der ursprüngliche Ersteller istcontributor: alle anderen Einzelpersonen oder Organisationen, die an der Erstellung der Distribution beteiligt waren
Kontakt- und Mitwirkenden-Metadaten sind optional. Automatisierte Werkzeuge MÜSSEN korrekt funktionieren, wenn eine Distribution sie nicht bereitstellt, einschließlich eines sauberen Fehlers, wenn eine auf einem dieser Felder basierende Operation angefordert wird.
Kontakte
Eine Liste von Mitwirkenden-Einträgen, die die empfohlenen Kontaktpunkte für weitere Informationen über das Projekt angeben.
Das folgende Beispiel wäre für ein Projekt geeignet, das gerade vom ursprünglichen Autor an einen neuen Hauptwart übergeben wird und als Teil einer größeren Entwicklungsgruppe fungiert.
Beispiel
"contacts": [
{
"name": "Python Packaging Authority/Distutils-SIG",
"email": "distutils-sig@python.org",
"url": "https://bitbucket.org/pypa/"
},
{
"name": "Samantha C.",
"role": "maintainer",
"email": "dontblameme@example.org"
},
{
"name": "Charlotte C.",
"role": "author",
"email": "iambecomingasketchcomedian@example.com"
}
]
Mitwirkende
Eine Liste von Mitwirkenden-Einträgen für andere Mitwirkende, die nicht bereits als aktuelle Projektkontaktpunkte aufgeführt sind. Die Unterfelder innerhalb der Listenelemente sind dieselben wie die für das Hauptkontaktfeld.
Beispiel
"contributors": [
{"name": "John C."},
{"name": "Erik I."},
{"name": "Terry G."},
{"name": "Mike P."},
{"name": "Graeme C."},
{"name": "Terry J."}
]
Projekt-URLs
Ein Mapping von beliebigen Textlabels zu zusätzlichen URLs, die für das Projekt relevant sind.
Während Projekte frei sind, ihre eigenen Labels und spezifischen URLs zu wählen, wird EMPFOHLEN, Links zur Homepage, zur Quellcodeverwaltung, zum Issue Tracker und zur Dokumentation mit den im folgenden Beispiel genannten Labels bereitzustellen.
URL-Labels MÜSSEN von automatisierten Tools als nicht case-sensitiv behandelt werden, sie müssen aber keine gültigen Python-Bezeichner sein. Jede legale JSON-Zeichenkette ist als URL-Label zulässig.
Beispiel
"project_urls": {
"Documentation": "https://distlib.readthedocs.org",
"Home": "https://bitbucket.org/pypa/distlib",
"Repository": "https://bitbucket.org/pypa/distlib/src",
"Tracker": "https://bitbucket.org/pypa/distlib/issues"
}
Die python.integrator-Erweiterung
Strukturell ist diese Erweiterung weitgehend identisch mit der python.project-Erweiterung (der Erweiterungsname ist der einzige Unterschied).
Während sich die Metadaten von project auf die Upstream-Ersteller der Software beziehen, beziehen sich die Metadaten von integrator auf den Downstream-Weiterverteiler einer modifizierten Version.
Wenn die Software unverändert weiterverteilt wird, wird diese Erweiterung typischerweise nicht verwendet. Wenn die Software jedoch gepatcht wurde (z. B. durch Zurückportierung kompatibler Korrekturen aus einer späteren Version oder durch Behebung eines plattformspezifischen Kompatibilitätsproblems), SOLLTE diese Erweiterung verwendet werden und ein lokales Versionslabel zur Versionskennung der Distribution hinzugefügt werden.
Wenn es mehrere Weiterverteiler in der Kette gibt, überschreibt jeder diese Erweiterung mit seinen spezifischen Metadaten.
Die python.exports-Erweiterung
Die meisten Python-Distributionen stellen Pakete und Module für den Import über den Python-Modul-Namespace bereit. Distributionen können beim Installieren auch andere Schnittstellen bereitstellen.
Die python.exports-Erweiterung enthält drei benutzerdefinierte Unterfelder
modules: Module, die von der Distribution exportiert werdennamespaces: Namespace-Pakete, zu denen die Distribution beiträgtexports: andere Python-Schnittstellen, die von der Distribution exportiert werden
Export-Spezifizierer
Ein Export-Spezifizierer ist eine Zeichenkette, die aus einem vollqualifizierten Namen sowie einem optionalen zusätzlichen Namen in eckigen Klammern besteht. Dies ergibt die folgenden vier möglichen Formen für einen Export-Spezifizierer
module
module:name
module[requires_extra]
module:name[requires_extra]
Hinweis
Die jsonschema-Datei beschränkt derzeit qualifizierte Namen nach den Regeln für Python 2-ASCII-Bezeichner. Dies muss möglicherweise überdacht werden, angesichts der lockereren Regeln für Bezeichner in Python 3.
Die Bedeutung der Unterfelder ist wie folgt
module: das Modul, das den Export bereitstelltname: falls zutreffend, der qualifizierte Name des Exports innerhalb des Modulsrequires_extra: gibt an, dass der Export nur korrekt funktioniert, wenn die zusätzlichen Abhängigkeiten, die im angegebenen Extra genannt sind, in der installierten Umgebung verfügbar sind
Hinweis
Ich habe dies als Mapping mit Unterfeldern versucht, und das machte die unten stehenden Beispiele unleserlich. Obwohl diese PEP hauptsächlich für die Werkzeugnutzung gedacht ist, ist Lesbarkeit auch für Debugging-Zwecke bis zu einem gewissen Grad wichtig, und da ich erwarte, dass Snippets des Formats anderswo wiederverwendet werden.
Module
Eine Liste von qualifizierten Namen von Modulen und Paketen, die die Distribution zum Import bereitstellt.
Hinweis
Die jsonschema-Datei beschränkt derzeit qualifizierte Namen nach den Regeln für Python 2-ASCII-Bezeichner. Dies muss möglicherweise überdacht werden, angesichts der lockereren Regeln für Bezeichner in Python 3.
Bei Namen, die Punkte enthalten, MUSS der Teil des Namens vor dem letzten Punkt entweder in der Liste der installierten Module oder in der Liste der Namespace-Pakete enthalten sein.
Um Namenskonflikte zu vermeiden, wird EMPFOHLEN, dass Distributionen ein einzelnes Top-Level-Modul oder -Paket bereitstellen, das dem Distributionsnamen (oder einer Kleinbuchstaben-Entsprechung) entspricht. Dies erfordert, dass der Distributionsname auch die Anforderungen eines Python-Bezeichners erfüllt, die strenger sind als die für Distributionsnamen). Diese Praxis erleichtert auch das Auffinden autoritativer Quellen für Module.
Indexserver SOLLTEN es mehreren Distributionen erlauben, dieselben Module zu veröffentlichen, KÖNNEN aber die Autoren der Distributionen über potenzielle Konflikte informieren.
Installationstools SOLLTEN einen Fehler melden, wenn sie aufgefordert werden, eine Distribution zu installieren, die ein Modul bereitstellt, das auch von einer anderen, bereits installierten, Distribution bereitgestellt wird.
Beachten Sie, dass der Versuch, einige deklarierte Module zu importieren, zu einer Ausnahme führen kann, wenn die entsprechenden Extras nicht installiert sind.
Beispiel
"modules": ["chair", "chair.cushions", "python_sketches.nobody_expects"]
Hinweis
Wenn dies stattdessen eine Liste von Export-Spezifizierern wäre, könnte eine Distribution deklarieren, wann ein bestimmtes Modul ein bestimmtes Extra zum korrekten Ausführen benötigt. Andererseits lässt sich argumentieren, dass es dann sinnvoll ist, eine separate Distribution zu erstellen, anstatt Extras zu verwenden.
Namespaces
Eine Liste von qualifizierten Namen von Namespace-Paketen, zu denen die Distribution Module beiträgt.
Hinweis
Die jsonschema-Datei beschränkt derzeit qualifizierte Namen nach den Regeln für Python 2-ASCII-Bezeichner. Dies muss möglicherweise überdacht werden, angesichts der lockereren Regeln für Bezeichner in Python 3.
Bei Python-Versionen vor Python 3.3 (das native Namespace-Paket-Unterstützung bietet) SOLLTEN Installationstools eine geeignete __init__.py-Datei ausgeben, um den Namespace ordnungsgemäß zu initialisieren, anstatt eine von der Distribution bereitgestellte Datei zu verwenden.
Installationstools SOLLTEN eine Warnung ausgeben und KÖNNEN einen Fehler ausgeben, wenn eine Distribution ein Namespace-Paket deklariert, das mit dem Namen eines bereits installierten Moduls kollidiert oder umgekehrt.
Beispiel
"namespaces": ["python_sketches"]
Exporte
Das Feld exports ist ein Mapping, das vorangestellte Namen als Schlüssel enthält. Jeder Schlüssel identifiziert eine Exportgruppe, die einen oder mehrere von der Distribution veröffentlichte Exporte enthält.
Exportgruppen-Namen werden von Distributionen definiert, die dann die veröffentlichten Exportinformationen auf irgendeine Weise nutzen werden. Der primäre Anwendungsfall sind Distributionen, die ein Plugin-Modell unterstützen: die Definition einer Exportgruppe ermöglicht es anderen Distributionen, anzugeben, welche Plugins sie bereitstellen, wie sie importiert und darauf zugegriffen werden können und welche zusätzlichen Abhängigkeiten (falls vorhanden) für das korrekte Funktionieren des Plugins erforderlich sind.
Um die Wahrscheinlichkeit von Namenskonflikten zu verringern, SOLLTEN Exportgruppen-Namen ein Präfix verwenden, das einem Modulnamen in der Distribution entspricht, der die Bedeutung der Exportgruppe definiert. Diese Praxis erleichtert auch das Auffinden autoritativer Dokumentation für Exportgruppen.
Jeder einzelne Export ist dann ein Mapping von beliebigen nicht-leeren Zeichenketten-Schlüsseln zu Export-Spezifizierern. Die Bedeutung der Exportnamen innerhalb einer Exportgruppe liegt beim der Exportgruppe definierenden Distribution. Die Erstellung einer geeigneten Definition für das Exportnamenformat kann es der importierenden Distribution ermöglichen, festzustellen, ob ein Export relevant ist oder nicht, ohne jedes exportierende Modul importieren zu müssen.
Beispiel
"exports": {
"nose.plugins.0.10": {
"chairtest": "chair:NosePlugin"
}
}
Die python.commands-Erweiterung
Die python.commands-Erweiterung enthält drei benutzerdefinierte Unterfelder
wrap_console: Konsolen-Wrapper-Skripte, die vom Installer generiert werden sollenwrap_gui: GUI-Wrapper-Skripte, die vom Installer generiert werden sollenprebuilt: Skripte, die vom Build-Prozess der Distribution erstellt und direkt im konfigurierten Skriptverzeichnis installiert werden
wrap_console und wrap_gui sind beides Mappings von Skriptnamen zu Export-Spezifizierern. Die Skriptnamen müssen denselben Namensregeln wie Distributionsnamen folgen.
Die Export-Spezifizierer für Wrapper-Skripte müssen sich entweder auf ein Paket mit einem __main__-Untermodul beziehen (wenn kein Unterfeld name im Export-Spezifizierer angegeben ist) oder auf einen Aufrufbaren innerhalb des benannten Moduls.
Installationstools sollten im Rahmen des Installationsprozesses geeignete Wrapper generieren.
Hinweis
Benötigt noch mehr Details dazu, was "geeignete Wrapper" bedeutet. Bis auf Weiteres verweisen Sie auf die Wrapper-Skripte, die von setuptools und zc.buildout generiert werden.
prebuilt ist eine Liste von Skriptpfaden, relativ zum Skriptverzeichnis in einer Wheel-Datei oder nach der Installation. Sie dienen nur zu Informationszwecken – ihre Installation wird über die normalen Prozesse für Dateien abgewickelt, die beim Erstellen einer Distribution erstellt werden.
Build-Tools SOLLTEN diese Erweiterung als erfordern, dass sie von Installern behandelt wird, kennzeichnen.
Indexserver SOLLTEN es mehreren Distributionen erlauben, dieselben Befehle zu veröffentlichen, KÖNNEN aber die Autoren der Distributionen über potenzielle Konflikte informieren.
Installationstools SOLLTEN einen Fehler melden, wenn sie aufgefordert werden, eine Distribution zu installieren, die einen Befehl bereitstellt, der auch von einer anderen, bereits installierten, Distribution bereitgestellt wird.
Beispiel
"python.commands": {
"installer_must_handle": true,
"wrap_console": [{"chair": "chair:run_cli"}],
"wrap_gui": [{"chair-gui": "chair:run_gui"}],
"prebuilt": ["reduniforms"]
}
Die python.constraints-Erweiterung
Die python.constraints-Erweiterung enthält zwei benutzerdefinierte Unterfelder
environments: unterstützte Installationsumgebungenextension_metadata: erforderliche exakte Übereinstimmungen in Metadatenfeldern von Erweiterungen, die von anderen installierten Komponenten veröffentlicht werden
Build-Tools SOLLTEN diese Erweiterung als erfordern, dass sie von Installern behandelt wird, kennzeichnen.
Indexserver SOLLTEN es Distributionen erlauben, mit Constraints hochgeladen zu werden, die mit diesem Index nicht erfüllt werden können, KÖNNEN aber die Autoren der Distributionen über solche potenziellen Kompatibilitätsprobleme informieren.
Installationstools SOLLTEN einen Fehler melden, wenn Constraints von der Distribution angegeben werden und die Zielinstallationsumgebung diese nicht erfüllt, MÜSSEN aber zumindest eine Warnung ausgeben und KÖNNEN dem Benutzer erlauben, die Installation trotzdem zu erzwingen.
Beispiel
"python.constraints": {
"installer_must_handle": true,
"environments": ["python_version >= 2.6"],
"extension_metadata": {
"fortranlib": {
"fortranlib.compatibility": {
"fortran_abi": "openblas-g77"
}
}
}
}
Unterstützte Umgebungen
Das Unterfeld environments ist eine Liste von Zeichenketten, die die Umgebungen angeben, die die Distribution explizit unterstützt. Eine Umgebung gilt als unterstützt, wenn sie mit mindestens einem der angegebenen Umgebungsmarker übereinstimmt.
Wenn dieses Feld nicht in den Metadaten angegeben ist, wird angenommen, dass die Distribution jede von Python unterstützte Plattform unterstützt.
Einzelne Einträge sind Umgebungsmarker, wie in PEP 426 beschrieben.
Die beiden Hauptanwendungen dieses Feldes sind die Deklaration, welche Python-Versionen und welche zugrundeliegenden Betriebssysteme unterstützt werden.
Beispiele für unterstützte Python-Versionen
# Supports Python 2.6+
"environments": ["python_version >= '2.6'"]
# Supports Python 2.6+ (for 2.x) or 3.3+ (for 3.x)
"environments": ["python_version >= '3.3'",
"'3.0' > python_version >= '2.6'"]
Beispiele für unterstützte Betriebssysteme
# Windows only
"environments": ["sys_platform == 'win32'"]
# Anything except Windows
"environments": ["sys_platform != 'win32'"]
# Linux or BSD only
"environments": ["'linux' in sys_platform",
"'bsd' in sys_platform"]
Beispiel, bei dem die unterstützte Python-Version je nach Plattform variiert
# The standard library's os module has long supported atomic renaming
# on POSIX systems, but only gained atomic renaming on Windows in Python
# 3.3. A distribution that needs atomic renaming support for reliable
# operation might declare the following supported environments.
"environment": ["python_version >= '2.6' and sys_platform != 'win32'",
"python_version >= '3.3' and sys_platform == 'win32'"]
Metadatenerweiterungs-Constraints
Das Unterfeld extension_metadata ist ein Mapping von Distributionsnamen zu Metadatenschnipseln von Erweiterungen, die exakt mit den Metadaten der benannten Distribution in der Zielinstallationsumgebung übereinstimmen müssen.
Jedes Unter-Mapping besteht dann aus einem Mapping von Metadatenerweiterungsnamen zu den exakten erwarteten Werten einer Teilmenge von Feldern.
Zum Beispiel kann eine Distribution namens fortranlib je nach Build-Art eine andere FORTRAN ABI veröffentlichen, und alle verwandten Projekte, die in dieselbe Laufzeitumgebung installiert werden, sollten übereinstimmende Build-Optionen verwenden. Dies kann dadurch erreicht werden, dass die Basisdistribution eine benutzerdefinierte Erweiterung veröffentlicht, die die für die Erstellung der Binärerweiterungen verwendete Build-Option angibt
"extensions": {
"fortranlib.compatibility": {
"fortran_abi": "openblas-g77"
}
}
Andere Distributionen, die Binärerweiterungen enthalten, die mit der Basisdistribution kompatibel sein müssen, würden dann eine entsprechende Einschränkung in ihren eigenen Metadaten definieren
"python.constraints": {
"installer_must_handle": true,
"extension_metadata": {
"fortranlib": {
"fortranlib.compatibility": {
"fortran_abi": "openblas-g77"
}
}
}
}
Diese Einschränkung gibt an, dass
fortranlibinstalliert sein muss (dies sollte auch als normale Abhängigkeit ausgedrückt werden, damit Installer sicherstellen, dass sie erfüllt ist)- Die installierte Version von
fortranlibmuss die benutzerdefinierte Erweiterungfortranlib.compatibilityin ihren veröffentlichten Metadaten enthalten - Das Unterfeld
fortan_abidieser Erweiterung muss den *exakten* Wertopenblas-g77haben.
Wenn all diese Bedingungen erfüllt sind (die Distribution ist installiert, die angegebene Erweiterung ist in den Metadaten enthalten, die angegebenen Unterfelder haben den exakten angegebenen Wert), dann gilt die Einschränkung als erfüllt.
Hinweis
Der primäre beabsichtigte Anwendungsfall hier ist die Ermöglichung von C-Erweiterungen mit zusätzlichen ABI-Kompatibilitätsanforderungen, diese so zu deklarieren, dass jedes Installationstool sie durchsetzen kann, ohne die Details verstehen zu müssen. Insbesondere müssen viele NumPy-basierte wissenschaftliche Bibliotheken mit einem konsistenten Satz von FORTRAN-Bibliotheken erstellt werden, daher das "fortranlib"-Beispiel.
Aus diesem Grund gibt es keine Unterstützung für Mustervergleich oder boolesche Logik: Selbst die "einfache" Version dieser Erweiterung ist relativ komplex, und es gibt derzeit keine zwingende Begründung, sie komplizierter zu machen, als sie bereits ist.
Urheberrecht
Dieses Dokument wurde gemeinfrei erklärt.
Quelle: https://github.com/python/peps/blob/main/peps/pep-0459.rst
Zuletzt geändert: 2025-02-01 08:59:27 GMT