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

Python Enhancement Proposals

PEP 739 – build-details.json 1.0 — eine statische Beschreibungsdatei für Python-Build-Details

Autor:
Filipe Laíns <lains at python.org>
PEP-Delegate:
Paul Moore <p.f.moore at gmail.com>
Discussions-To:
Discourse thread
Status:
Akzeptiert
Typ:
Standards Track
Thema:
Packaging
Erstellt:
19-Dez-2023
Python-Version:
3.14
Resolution:
Discourse-Nachricht

Inhaltsverzeichnis

Zusammenfassung

Dieser PEP führt build-details.json ein, eine statische Beschreibungsdatei, die Build-Details von Python-Installationen enthält.

Sie enthält die Definition von Version 1.0 des Dateiformats und definiert den Standardpfad für diese Datei.

Begründung

Bei der Introspektion einer Python-Installation ist die Ausführung von Code oft unerwünscht oder unmöglich. Eine statische Beschreibungsdatei macht verschiedene Build-Details der Python-Installation verfügbar, ohne den Interpreter ausführen zu müssen.

Dies ist hilfreich für Anwendungsfälle wie Kreuzkompilierung, Python-Launcher usw.

Umfang

build-details.json ist eine installationsweite Datei, was bedeutet, dass sie nur Informationen enthalten darf, die über alle Umgebungen der Python-Installation hinweg konstant sind.

Umgebungsspezifische Informationen, wie der site-packages-Pfad, liegen außerhalb des Geltungsbereichs dieser Datei. Die PEP-Autoren gehen davon aus, dass über einen zukünftigen PEP eine statische Umgebungsbeschreibungsdatei eingeführt wird.

Spezifikation

Ab Python 3.14 muss eine Datei namens build-details.json, die dem in diesem PEP oder einer zukünftigen Version spezifizierten Format folgt, im plattformunabhängigen Verzeichnis der Standardbibliothek (stdlib, z.B. /usr/lib/python3.14/build-details.json) installiert werden, ES SEI DENN, dies ist aufgrund technischer Einschränkungen nicht möglich.

Achtung

Zusätzlich zum von diesem PEP spezifizierten Standardspeicherort kann die Datei build-details.json auch an zusätzlichen Speicherorten und unter einem anderen Namen installiert werden. Ungeachtet dessen sollte die Datei immer noch am Standardspeicherort verfügbar sein.

Tatsächlich gehen die PEP-Autoren davon aus, dass zukünftige PEPs zusätzliche Installationsspeicherorte mit besserer Auffindbarkeit definieren werden.

Format

Die Spezifikation des Formats wird durch die unten bereitgestellte JSON-Schema-Definition definiert, die hier in einem menschenlesbaren Format gerendert wird.

$schema https://json-schema.org/draft/2020-12/schema
$id https://github.com/python/peps/blob/main/peps/pep-0739/python-build-info-v1.0.schema.json
Titel build-details.json — eine statische Beschreibungsdatei mit Build-Details von Python-Installationen
Typ object
Zusätzliche Eigenschaften Nicht erlaubt

schema_version

Typ string (konstant — 1.0)
Description Schema-Version.

Dies ist ein String im Format <MAJOR>.<MINOR>, wobei <MAJOR> und <MINOR> nicht-auffüllende Zahlen sind und die Haupt- und Nebenkomponenten der Version darstellen. Versionen können arithmetisch verglichen werden, indem die Versionszeichenfolge als Dezimalzahl interpretiert wird.

Für diese Spezifikationsversion ist dieser Wert konstant und muss 1.0 sein.

Zukünftige Versionen dieses Schemas müssen eine höhere Versionsnummer verwenden. Zukünftige Versionen dieses Schemas dürfen nicht dieselbe Hauptversionskomponente wie andere Schemaversionen verwenden, es sei denn, ihre Spezifikation wird als abwärtskompatibel mit ihnen betrachtet – sie kann keine Teile der aktuellen Spezifikation so ändern oder erweitern, dass sich die Semantik der interpretierten Daten unterscheidet oder dass Daten, die unter der neuen Spezifikation gültig sind, unter der älteren Spezifikation ungültig sind, mit Ausnahme von zusätzlichen Eigenschaften (Fehler, die durch additionalProperties verursacht werden).

Erforderlich True

base_prefix

Typ string
Description Basispräfix der Python-Installation.

Entweder ein absoluter Pfad oder ein Pfad relativ zum Verzeichnis, in dem sich diese Datei befindet.

Beispiele /usr, ../.. usw.
Erforderlich True

base_interpreter

Typ string
Description Der Pfad zum Python-Interpreter der Basisinstallation.

Entweder ein absoluter Pfad oder ein Pfad relativ zu base_prefix.

Dieses Feld muss vorhanden sein, wenn die Installation eine Interpreter-ausführbare Datei bereitstellt.

Beispiele
  • /usr/bin/python
  • bin/python
  • usw.
Erforderlich False

platform

Typ string
Description Systemplattform-String.

Dieses Feld sollte äquivalent zu sysconfig.get_platform() sein.

Beispiele
  • linux-x86_64
  • usw.
Erforderlich True

language

Typ object
Description Objekt mit Details zur Python-Sprachspezifikation.
Erforderlich True
Zusätzliche Eigenschaften Nicht erlaubt

language.version

Typ string
Description String-Darstellung der Python-Sprachversion — eine Versionszeichenfolge, die nur aus den Haupt- und Nebenkomponenten besteht.

Dieses Feld sollte äquivalent zu sysconfig.get_python_version() sein.

Beispiele 3.14 usw.
Erforderlich True

language.version_info

Typ object
Description Objekt im Format von sys.version_info.

Dieser Abschnitt sollte äquivalent zu sys.version_info sein.

Beispiele
  • {'major': 3, 'minor': 14, 'micro': 1, 'releaselevel': 'final', 'serial': 0}
  • usw.
Erforderlich False
Zusätzliche Eigenschaften Nicht erlaubt
language.version_info.major
Typ number
Erforderlich True
language.version_info.minor
Typ number
Erforderlich True
language.version_info.micro
Typ number
Erforderlich True
language.version_info.releaselevel
Typ string (enum — alpha, beta, candidate, final)
Erforderlich True
language.version_info.serial
Typ number
Erforderlich True

implementation

Typ object
Description Objekt mit Details zur Python-Implementierung.

Dieser Abschnitt sollte äquivalent zu sys.implementation sein. Er folgt der in PEP 421 definierten Spezifikation, was bedeutet, dass zusätzlich zu den erforderlichen Schlüsseln auch implementierungsspezifische Schlüssel vorhanden sein können, diese aber mit einem Unterstrich präfixiert sein müssen.

Erforderlich True
Zusätzliche Eigenschaften Erlaubt

implementation.name

Typ string
Description Klein geschriebener Name der Python-Implementierung.
Beispiele cpython, pypy usw.
Erforderlich True

implementation.version

Typ object
Description Objekt im Format von sys.version_info, das die Implementierungsversion enthält.
Beispiele
  • {'major': 3, 'minor': 14, 'micro': 1, 'releaselevel': 'final', 'serial': 0}
  • {'major': 7, 'minor': 3, 'micro': 16, 'releaselevel': 'final', 'serial': 0}
  • usw.
Erforderlich True
Zusätzliche Eigenschaften Nicht erlaubt
implementation.version.major
Typ number
Erforderlich True
implementation.version.minor
Typ number
Erforderlich True
implementation.version.micro
Typ number
Erforderlich True
implementation.version.releaselevel
Typ string (enum — alpha, beta, candidate, final)
Erforderlich True
implementation.version.serial
Typ number
Erforderlich True

abi

Typ object
Description Objekt mit Details zu ABI.
Erforderlich False
Zusätzliche Eigenschaften Nicht erlaubt

abi.flags

Typ array
Description Build-Konfigurationsflags, die zur Berechnung des Erweiterungs-Suffixes verwendet werden.

Die Flags müssen in der Reihenfolge definiert sein, in der sie im Erweiterungs-Suffix erscheinen.

Beispiele ['t', 'd'] usw.
Erforderlich True

abi.extension_suffix

Typ string
Description Suffix, der für Erweiterungen verwendet wird, die gegen die aktuelle Implementierungsversion erstellt wurden.

Dieses Feld muss vorhanden sein, wenn die Python-Implementierung Erweiterungen unterstützt, andernfalls fehlt dieser Eintrag.

Beispiele
  • .cpython-314-x86_64-linux-gnu.so
  • usw.
Erforderlich False

abi.stable_abi_suffix

Typ string
Description Suffix, der für Erweiterungen verwendet wird, die gegen die stabile ABI erstellt wurden.

Dieses Feld muss vorhanden sein, wenn die Python-Implementierung einen stabilen ABI-Erweiterungs-Suffix hat, andernfalls fehlt dieser Eintrag.

Beispiele .abi3.so usw.
Erforderlich False

suffixes

Typ object
Description Gültige Modul-Suffixe, gruppiert nach Typ.

Dieser Abschnitt muss vorhanden sein, wenn die Python-Installation das Importieren externer Dateien unterstützt, und er sollte äquivalent zu den Attributen importlib.machinery.*_SUFFIXES sein.

Zusätzlich, wenn eine Python-Implementierung andere Erweiterungsarten als die im Modul importlib.machinery aufgeführten bereitstellt, kann sie einen Unterabschnitt dafür hinzufügen.

Beispiele
  • {'source': ['.py'], 'bytecode': ['.pyc'], 'optimized_bytecode': ['.pyc'], 'debug_bytecode': ['.pyc'], 'extensions': ['.cpython-313-x86_64-linux-gnu.so', '.abi3.so', '.so']}
  • usw.
Erforderlich False
Zusätzliche Eigenschaften Erlaubt

libpython

Typ object
Description Objekt mit Details zur libpython-Bibliothek.

Dieser Abschnitt muss vorhanden sein, wenn die Python-Installation eine libpython-Bibliothek bereitstellt, andernfalls fehlt dieser Abschnitt.

Erforderlich False
Zusätzliche Eigenschaften Nicht erlaubt

libpython.dynamic

Typ string
Description Der Pfad zur dynamischen libpython-Bibliothek.

Entweder ein absoluter Pfad oder ein Pfad relativ zu base_prefix.

Dieses Feld muss vorhanden sein, wenn die Python-Installation eine dynamische libpython-Bibliothek bereitstellt, andernfalls fehlt dieser Eintrag.

Beispiele
  • /usr/lib/libpython3.14.so.1.0
  • lib/libpython3.14.so.1.0
  • usw.
Erforderlich False

libpython.dynamic_stableabi

Typ string
Description Der Pfad zur dynamischen libpython-Bibliothek für die stabile ABI.

Entweder ein absoluter Pfad oder ein Pfad relativ zu base_prefix.

Dieses Feld muss vorhanden sein, wenn die Python-Installation eine dynamische libpython-Bibliothek für die stabile ABI bereitstellt, andernfalls fehlt dieser Eintrag.

Wenn dieser Schlüssel vorhanden ist, muss auch dynamic gesetzt sein.

Beispiele
  • /usr/lib/libpython3.so
  • lib/libpython3.so
  • usw.
Erforderlich False

libpython.static

Typ string
Description Der Pfad zur statischen libpython-Bibliothek.

Entweder ein absoluter Pfad oder ein Pfad relativ zu base_prefix.

Dieses Feld muss vorhanden sein, wenn die Python-Installation eine statische libpython-Bibliothek bereitstellt, andernfalls fehlt dieser Eintrag.

Beispiele
  • /usr/lib/python3.14/config-3.14-x86_64-linux-gnu/libpython3.14.a
  • lib/python3.14/config-3.14-x86_64-linux-gnu/libpython3.14.a
  • usw.
Erforderlich False

c_api

Typ object
Description Objekt mit Details zur Python C API.

Dieser Abschnitt muss vorhanden sein, wenn die Python-Implementierung eine C API bereitstellt, andernfalls fehlt dieser Abschnitt.

Erforderlich False
Zusätzliche Eigenschaften Nicht erlaubt

c_api.headers

Typ string
Description Der Pfad zu den C API-Headern.

Entweder ein absoluter Pfad oder ein Pfad relativ zu base_prefix.

Beispiele
  • /usr/include/python3.14
  • include/python3.14
  • usw.
Erforderlich True

c_api.pkgconfig_path

Typ string
Description Der Pfad zu den pkg-config-Definitionsdateien.

Entweder ein absoluter Pfad oder ein Pfad relativ zu base_prefix.

Dieses Feld muss vorhanden sein, wenn die Python-Implementierung pkg-config-Definitionsdateien bereitstellt, andernfalls fehlt dieser Abschnitt.

Beispiele
  • /usr/lib/pkgconfig
  • lib/pkgconfig
  • usw.
Erforderlich False

arbitrary_data

Typ object
Description Objekt mit zusätzlichen beliebigen Daten.

Dies ist als Notausgang gedacht, um relevante Daten einzuschließen, die nicht von dieser Spezifikation abgedeckt werden. Implementierungen können wählen, welche Daten in diesem Abschnitt bereitgestellt werden.

Erforderlich False
Zusätzliche Eigenschaften Erlaubt

Beispiel

 1{
 2  "schema_version": "1.0",
 3  "base_prefix": "/usr",
 4  "base_interpreter": "/usr/bin/python",
 5  "platform": "linux-x86_64",
 6  "language": {
 7    "version": "3.14",
 8    "version_info": {
 9      "major": 3,
10      "minor": 14,
11      "micro": 0,
12      "releaselevel": "alpha",
13      "serial": 0
14    }
15  },
16  "implementation": {
17    "name": "cpython",
18    "version": {
19      "major": 3,
20      "minor": 14,
21      "micro": 0,
22      "releaselevel": "alpha",
23      "serial": 0
24    },
25    "hexversion": 51249312,
26    "cache_tag": "cpython-314",
27    "_multiarch": "x86_64-linux-gnu"
28  },
29  "abi": {
30    "flags": ["t", "d"],
31    "extension_suffix": ".cpython-314-x86_64-linux-gnu.so",
32    "stable_abi_suffix": ".abi3.so"
33  },
34  "suffixes": {
35    "source": [".py"],
36    "bytecode": [".pyc"],
37    "optimized_bytecode": [".pyc"],
38    "debug_bytecode": [".pyc"],
39    "extensions": [".cpython-314-x86_64-linux-gnu.so", ".abi3.so", ".so"]
40  },
41  "libpython": {
42    "dynamic": "/usr/lib/libpython3.14.so.1.0",
43    "dynamic_stableabi": "/usr/lib/libpython3.so",
44    "static": "/usr/lib/python3.14/config-3.14-x86_64-linux-gnu/libpython3.14.a",
45    "link_extensions": true
46  },
47  "c_api": {
48    "headers": "/usr/include/python3.14",
49    "pkgconfig_path": "/usr/lib/pkgconfig"
50  }
51}

JSON-Schema

  1{
  2  "$schema": "https://json-schema.org/draft/2020-12/schema",
  3  "$id": "https://github.com/python/peps/blob/main/peps/pep-0739/python-build-info-v1.0.schema.json",
  4  "type": "object",
  5  "title": "build-details.json — a static description file with build details of Python installations",
  6  "required": [
  7    "schema_version",
  8    "base_prefix",
  9    "platform",
 10    "language",
 11    "implementation"
 12  ],
 13  "additionalProperties": false,
 14  "properties": {
 15    "schema_version": {
 16      "type": "string",
 17      "description": "Schema version.\n\nThis is a string following the format ``<MAJOR>.<MINOR>``, where ``<MAJOR>`` and ``<MINOR>`` are unpaded numbers and represent the **major** and **minor** components of the version. Versions may be arithmetically compared by intrepreting the version string as a decimal number.\n\nFor this specification version, this value is constant and **MUST** be ``1.0``.\n\nFuture versions of this schema **MUST** use a higher version number. Future versions of this schema **MUST NOT** use the same **major** version component as other schema version unless its specification is deemed backwards-compatible with them — it can't change, or extend, any parts of the current specification in such a way as the semantics of the interpreted data differ, or that data valid under the new specification is invalid under the older specification, with the exception of additional properties (errors caused by ``additionalProperties``).",
 18      "const": "1.0"
 19    },
 20    "base_prefix": {
 21      "type": "string",
 22      "description": "Base prefix of the Python installation.\n\nEither an absolute path, or a path relative to directory where this file is contained.",
 23      "examples": [
 24        "/usr",
 25        "../.."
 26      ]
 27    },
 28    "base_interpreter": {
 29        "type": "string",
 30        "description": "The path to the Python interprer of the base installation.\n\nEither an absolute path, or a path relative to ``base_prefix``.\n\nThis field **MUST** be present if the installation provides an interpreter executable.",
 31        "examples": [
 32          "/usr/bin/python",
 33          "bin/python"
 34        ]
 35    },
 36    "platform": {
 37      "type": "string",
 38      "description": "System platform string.\n\nThis field **SHOULD** be equivalent to ``sysconfig.get_platform()``.",
 39      "examples": [
 40        "linux-x86_64"
 41      ]
 42    },
 43    "language": {
 44      "type": "object",
 45      "description": "Object containing details related to the Python language specification.",
 46      "required": [
 47        "version"
 48      ],
 49      "additionalProperties": false,
 50      "properties": {
 51        "version": {
 52          "type": "string",
 53          "description": "String representation the Python language version — a version string consisting only of the *major* and *minor* components.\n\nThis field **SHOULD** be equivalent to ``sysconfig.get_python_version()``.",
 54          "examples": ["3.14"]
 55        },
 56        "version_info": {
 57          "type": "object",
 58          "description": "Object in the format of :py:data:`sys.version_info`.\n\nThis section **SHOULD** be equivalent to :py:data:`sys.version_info`.",
 59          "required": ["major", "minor", "micro", "releaselevel", "serial"],
 60          "additionalProperties": false,
 61          "examples": [
 62            {
 63              "major": 3,
 64              "minor": 14,
 65              "micro": 1,
 66              "releaselevel": "final",
 67              "serial": 0
 68            }
 69          ],
 70          "properties": {
 71            "major": {
 72              "type": "number"
 73            },
 74            "minor": {
 75              "type": "number"
 76            },
 77            "micro": {
 78              "type": "number"
 79            },
 80            "releaselevel": {
 81              "type": "string",
 82              "enum": ["alpha", "beta", "candidate", "final"]
 83            },
 84            "serial": {
 85              "type": "number"
 86            }
 87          }
 88        }
 89      }
 90    },
 91    "implementation": {
 92      "type": "object",
 93      "description": "Object containing details related to Python implementation.\n\nThis section **SHOULD** be equivalent to :py:data:`sys.implementation`. It follows specification defined in PEP 421, meaning that on top of the required keys, implementation-specific keys can also exist, but must be prefixed with an underscore.",
 94      "required": [
 95        "name",
 96        "version",
 97        "hexversion",
 98        "cache_tag"
 99      ],
100      "additionalProperties": true,
101      "properties": {
102        "name": {
103          "type": "string",
104          "description": "Lower-case name of the Python implementation.",
105          "examples": ["cpython", "pypy"]
106        },
107        "version": {
108          "type": "object",
109          "description": "Object in the format of :py:data:`sys.version_info`, containing the implementation version.",
110          "required": ["major", "minor", "micro", "releaselevel", "serial"],
111          "additionalProperties": false,
112          "examples": [
113            {
114              "major": 3,
115              "minor": 14,
116              "micro": 1,
117              "releaselevel": "final",
118              "serial": 0
119            },
120            {
121              "major": 7,
122              "minor": 3,
123              "micro": 16,
124              "releaselevel": "final",
125              "serial": 0
126            }
127          ],
128          "properties": {
129            "major": {
130              "type": "number"
131            },
132            "minor": {
133              "type": "number"
134            },
135            "micro": {
136              "type": "number"
137            },
138            "releaselevel": {
139              "type": "string",
140              "enum": ["alpha", "beta", "candidate", "final"]
141            },
142            "serial": {
143              "type": "number"
144            }
145          }
146        }
147      }
148    },
149    "abi": {
150      "type": "object",
151      "description": "Object containing details related to ABI.",
152      "required": [
153        "flags"
154      ],
155      "additionalProperties": false,
156      "properties": {
157        "flags": {
158          "type": "array",
159          "description": "Build configuration flags, used to calculate the extension suffix.\n\nThe flags **MUST** be defined in the order they appear on the extension suffix.",
160          "additionalProperties": true,
161          "examples": [
162            ["t", "d"]
163          ]
164        },
165        "extension_suffix": {
166          "type": "string",
167          "description": "Suffix used for extensions built against the current implementation version.\n\nThis field **MUST** be present if the Python implementation supports extensions, otherwise this entry will be missing.",
168          "examples": [
169            ".cpython-314-x86_64-linux-gnu.so"
170          ]
171        },
172        "stable_abi_suffix": {
173          "type": "string",
174          "description": "Suffix used for extensions built against the stable ABI.\n\nThis field **MUST** be present if the Python implementation has a stable ABI extension suffix, otherwise this entry will be missing.",
175          "examples": [
176            ".abi3.so"
177          ]
178        }
179      }
180    },
181    "suffixes": {
182      "type": "object",
183      "description": "Valid module suffixes grouped by type.\n\nThis section **MUST** be present if the Python installation supports importing external files, and it **SHOULD** be equivalent to the ``importlib.machinery.*_SUFFIXES`` attributes.\n\nAdditionally, if a Python implementation provides extension kinds other than the ones listed on ``importlib.machinery`` module, they **MAY** add a sub-section for them.",
184      "examples": [
185        {
186          "source": [".py"],
187          "bytecode": [".pyc"],
188          "optimized_bytecode": [".pyc"],
189          "debug_bytecode": [".pyc"],
190          "extensions": [".cpython-313-x86_64-linux-gnu.so", ".abi3.so", ".so"]
191        }
192      ]
193    },
194    "libpython": {
195      "type": "object",
196      "description": "Object containing details related to the ``libpython`` library.\n\nThis section **MUST** by present if Python installation provides a ``libpython`` library, otherwise this section will be missing.",
197      "additionalProperties": false,
198      "properties": {
199        "dynamic": {
200          "type": "string",
201          "description": "The path to the dynamic ``libpython`` library.\n\nEither an absolute path, or a path relative to ``base_prefix``.\n\nThis field **MUST** be present if the Python installation provides a dynamic ``libpython`` library, otherwise this entry will be missing.",
202          "examples": [
203            "/usr/lib/libpython3.14.so.1.0",
204            "lib/libpython3.14.so.1.0"
205          ]
206        },
207        "dynamic_stableabi": {
208          "type": "string",
209          "description": "The path to the dynamic ``libpython`` library for the stable ABI.\n\nEither an absolute path, or a path relative to ``base_prefix``.\n\nThis field **MUST** be present if the Python installation provides a dynamic ``libpython`` library targetting the Stable ABI, otherwise this entry will be missing.\n\nIf this key is present ``dynamic`` **MUST** also be set.",
210          "examples": [
211            "/usr/lib/libpython3.so",
212            "lib/libpython3.so"
213          ]
214        },
215        "static": {
216          "type": "string",
217          "description": "The path to the static ``libpython`` library.\n\nEither an absolute path, or a path relative to ``base_prefix``.\n\nThis field **MUST** be present if the Python installation provides a static ``libpython`` library, otherwise this entry will be missing.",
218          "examples": [
219            "/usr/lib/python3.14/config-3.14-x86_64-linux-gnu/libpython3.14.a",
220            "lib/python3.14/config-3.14-x86_64-linux-gnu/libpython3.14.a"
221          ]
222        },
223        "link_extensions": {
224          "type": "boolean",
225          "description": "Should extensions built against a dynamic ``libpython`` link to it?\n\nThis field **MUST** be present if the Python installation provides a dynamic ``libpython`` library, otherwise this entry will be missing."
226        }
227      }
228    },
229    "c_api": {
230      "type": "object",
231      "description": "Object containing details related to the Python C API.\n\nThis section **MUST** be present if the Python implementation provides a C API, otherwise this section will be missing.",
232      "required": [
233        "headers"
234      ],
235      "additionalProperties": false,
236      "properties": {
237        "headers": {
238          "type": "string",
239          "description": "The path to the C API headers.\n\nEither an absolute path, or a path relative to ``base_prefix``.",
240          "examples": [
241            "/usr/include/python3.14",
242            "include/python3.14"
243          ]
244        },
245        "pkgconfig_path": {
246          "type": "string",
247          "description": "The path to the pkg-config definition files.\n\nEither an absolute path, or a path relative to ``base_prefix``.\n\nThis field **MUST** be present if the Python implementation provides pkg-config definition files, otherwise this section will be missing.",
248          "examples": [
249            "/usr/lib/pkgconfig",
250            "lib/pkgconfig"
251          ]
252        }
253      }
254    },
255    "arbitrary_data": {
256      "type": "object",
257      "description": "Object containing extra arbitrary data.\n\nThis is meant to be used as an escape-hatch, to include any relevant data that is not covered by this specification. Implementations may choose what data to provide in this section.",
258      "additionalProperties": true
259    }
260  }
261}

Abgelehnte Ideen

Einbeziehung umgebungsspezifischer Daten

Eine der Hauptanfragen in der Diskussion dieses PEP war die Aufnahme anderer Arten von Informationen, wie z.B. des site-packages-Pfades. Nach Meinung der PEP-Autoren sollten Informationen, die sich auf die Python-Umgebung beziehen, von einer separaten Datei bereitgestellt werden.

Die Aufnahme von umgebungsspezifischen Daten in die Konfigurationsdatei bedeutet, dass sie umgebungsspezifisch wäre, so dass virtuelle Umgebungen ihre eigenen Konfigurationsdateien benötigen würden. Dies ist problematisch, da virtuelle Umgebungen Updates der Basis-Python-Installation überleben, was die Möglichkeit schafft, dass die statische Konfigurationsdatei veraltet ist und ihre Daten unzuverlässig macht, was ihren Zweck vereitelt.

Die vorgeschlagene Lösung, die teilweise in diesem PEP umgesetzt wird, ist die Bereitstellung einer build-details.json-Datei, die sich auf die Basis-Python-Installation bezieht, und einer environment.json-Datei, die sich auf die spezifische Umgebung bezieht.

Da build-details.json Teil der Python-Distribution ist, wird auch build-details.json aktualisiert, wenn die Basis-Python-Installation aktualisiert wird, wodurch sichergestellt wird, dass die statischen Beschreibungsdateien niemals veraltet sind.


Quelle: https://github.com/python/peps/blob/main/peps/pep-0739.rst

Zuletzt geändert: 2025-02-07 01:10:57 GMT