python / python/cpython

Add structured version info for modules wrapping external libraries

Offen
#157,472 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

3.16 extension-modules type-feature
Vorherrschende Sprache
Python
Sterne
77.2k
Forks
35.9k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

Feature or enhancement

Several modules wrap an external library, but expose its version inconsistently: only a string, only a plain tuple, only the runtime or only the build-time version, or under a private name. gh-117404 established a pattern for zlib, bz2, lzma and compression.zstd: a string and a named tuple for the version the module was built against (XXX_VERSION, XXX_VERSION_INFO), and the same pair for the library actually loaded (xxx_version, xxx_version_info).

Other modules (existing names, with their types):

  • sqlite3 — runtime: sqlite_version (str), sqlite_version_info (plain tuple, computed in Python from the string). No build-time version.
  • pyexpat — runtime: EXPAT_VERSION (str, e.g. 'expat_2.8.4'), version_info (plain tuple). No build-time version.
  • decimal — runtime: __libmpdec_version__ (str). No tuple, no build-time version. Matters more now that only the system libmpdec is used.
  • readline — build-time: _READLINE_VERSION (int, 0x0803). Runtime: _READLINE_RUNTIME_VERSION (int), _READLINE_LIBRARY_VERSION (str). All private; backend (str) tells readline from libedit.
  • dbm.gnu — build-time: private _GDBM_VERSION (plain tuple). No runtime version (gdbm_version is not exposed).
  • dbm.ndbm — only library (str, the implementation name). No version.
  • ctypes — nothing about libffi.
  • uuid — nothing about libuuid.
  • ssl — runtime: OPENSSL_VERSION (str), OPENSSL_VERSION_INFO (plain 5-tuple), OPENSSL_VERSION_NUMBER (int). Build-time: only private _OPENSSL_API_VERSION (plain 5-tuple). The existing names conflict with the scheme above (uppercase names for the runtime version).
  • curses — runtime: ncurses_version (named tuple). No string, no build-time version. It is fine to keep only the named tuple.
  • tkinter — build-time: _tkinter.TCL_VERSION, TK_VERSION (str, only major.minor, e.g. '8.6'), and tkinter.TclVersion, TkVersion (float, 8.6, derived from them). The runtime version cannot be obtained at import time without creating a Tcl interpreter; it is available as Tcl().eval('info patchlevel').

Not all items need to be changed, and not all libraries provide both the compile-time and the runtime version. Sub-issues are opened for those that do.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit dem Lesen von gh-117404 und vergleiche dessen Versions-API-Muster für zlib, bz2, lzma und compression.zstd mit dem Modulverzeichnis in diesem Issue. Prüfe die relevanten Unter-Issues und bestimme, welche Module konsistente Versionsinformationen zur Build-Zeit und zur Laufzeit bereitstellen können; als erledigt gilt die Aufgabe, wenn jedes ausgewählte Modul über eine abgestimmte öffentliche Schnittstelle verfügt, ohne bestehende Namen zu brechen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
backend
Issue-Typ
Feature
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Aktiv
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
38/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.