PEP 291 – Abwärtskompatibilität für die Python 2 Standardbibliothek
- Autor:
- Neal Norwitz <nnorwitz at gmail.com>
- Status:
- Abgelöst
- Typ:
- Informational
- Erstellt:
- 06-Jun-2002
- Python-Version:
- 2.3
- Post-History:
- Ersetzt-Durch:
- 387
Zusammenfassung
Dieser PEP beschreibt die Pakete und Module in der Python 2 Standardbibliothek, die abwärtskompatibel zu früheren Versionen von Python bleiben sollten. Wenn ein Paket hier nicht aufgeführt ist, muss es nur mit der Version von Python kompatibel bleiben, mit der es verteilt wird.
Dieser PEP hat keinen Einfluss auf die Python 3 Standardbibliothek.
Begründung
Autoren haben verschiedene Gründe, warum Pakete und Module weiterhin mit früheren Versionen von Python funktionieren sollten. Um die Abwärtskompatibilität dieser Module zu gewährleisten, während der Rest der Standardbibliothek weiterentwickelt wird, ist es notwendig zu wissen, welche Module geändert werden können und welche alte und möglicherweise veraltete Funktionen verwenden sollten.
Generell sollten Autoren versuchen, Änderungen abwärtskompatibel zur vorherigen veröffentlichten Version von Python zu halten, um Fehlerkorrekturen leichter zurückportieren zu können.
Zusätzlich zur Auflistung eines Pakets oder Moduls in diesem PEP müssen Autoren am Anfang jeder Datei einen Kommentar hinzufügen, der die Kompatibilitätsanforderung dokumentiert.
Wenn eine Hauptversion von Python veröffentlicht wird, wird ein Subversion-Zweig für kontinuierliche Wartung und Fehlerkorrektur-Releases erstellt. Eine Paketversion auf einem Branch kann eine andere Kompatibilitätsanforderung haben als dasselbe Paket auf dem Trunk (d. h. die aktuelle Bleeding-Edge-Entwicklung). Wo angemessen, werden diese Branch-Kompatibilitäten unten aufgeführt.
Zu vermeidende Features
Die folgende Liste enthält gängige Features, die zur Aufrechterhaltung der Abwärtskompatibilität mit jeder Python-Version vermieden werden sollten. Diese Liste ist nicht vollständig! Sie dient nur als allgemeine Richtlinie.
Beachten Sie, dass die unten aufgeführten Funktionen in der Version nach der aufgeführten implementiert wurden. Zum Beispiel wurden die neben 1.5.2 aufgeführten Funktionen in 2.0 implementiert.
| Version | Zu vermeidende Features |
|---|---|
| 1.5.2 | String-Methoden, Unicode, List Comprehensions, erweiterte Zuweisungen (z. B. +=), zip(), import x as y, dict.setdefault(), print >> f, Aufruf von f(*args, **kw), plus alle unten aufgeführten Funktionen |
| 2.0 | verschachtelte Geltungsbereiche, Rich Comparisons, Funktionsattribute, plus alle unten aufgeführten Funktionen |
| 2.1 | Verwendung von Objekt- oder neuen Klassen, Iteratoren, Generatoren, verschachtelte Geltungsbereiche oder // ohne from __future__ import … Anweisung, isinstance(X, TYP), wobei TYP ein Tupel von Typen ist, plus alle unten aufgeführten Funktionen |
| 2.2 | bool, True, False, basestring, enumerate(), {}.pop(), PendingDeprecationWarning, Universal Newlines, plus alle unten aufgeführten Funktionen plus alle unten aufgeführten Funktionen |
| 2.3 | Generatorausdrücke, Multi-Line-Imports, Decorators, Int/Long-Vereinigung, set/frozenset, reversed(), sorted(), „“.rsplit(), plus alle unten aufgeführten Funktionen |
| 2.4 | with-Anweisung, bedingte Ausdrücke, kombinierte try/except/finally, relative Imports, yield-Ausdrücke oder generator.throw/send/close(), plus alle unten aufgeführten Funktionen |
| 2.5 | with-Anweisung ohne from __future__ import, io-Modul, str.format(), except as, bytes, b’’ Literale, property.setter/deleter |
Abwärtskompatible Pakete, Module und Werkzeuge
| Paket/Modul | Betreuer | Python-Version | Anmerkungen |
|---|---|---|---|
| 2to3 | Benjamin Peterson | 2.5 | |
| bsddb |
|
2.1 | |
| compiler | Jeremy Hylton | 2.1 | |
| decimal | Raymond Hettinger | 2.3 | [2] |
| distutils | Tarek Ziade | 2.3 | |
| Barry Warsaw | 2.1 / 2.3 | [1] | |
| pkgutil | Phillip Eby | 2.3 | |
| platform | Marc-Andre Lemburg | 1.5.2 | |
| pybench | Marc-Andre Lemburg | 1.5.2 | [3] |
| sre | Fredrik Lundh | 2.1 | |
| subprocess | Peter Astrand | 2.2 | |
| wsgiref | Phillip J. Eby | 2.1 | |
| xml (PyXML) | Martin v. Loewis | 2.0 | |
| xmlrpclib | Fredrik Lundh | 2.1 |
| Werkzeug | Betreuer | Python-Version |
|---|---|---|
| Keine |
Anmerkungen
- Die E-Mail-Paketversion 2 wurde mit Python bis Python 2.3 verteilt, und diese muss mit Python 2.1 kompatibel bleiben. Die E-Mail-Paketversion 3 wird mit Python 2.4 verteilt und muss nur mit Python 2.3 kompatibel bleiben.
- Spezifikationsaktualisierungen werden als Fehlerkorrekturen behandelt und zurückportiert. Die Kompatibilität mit Python 2.3 wird mindestens für Python 2.4 beibehalten. Die Entscheidung wird für Python 2.5 überprüft und nicht geändert, es sei denn, es ergeben sich zwingende Vorteile.
- pybench befindet sich im Verzeichnis Tools/. Die Kompatibilität mit älteren Python-Versionen ist erforderlich, um die Leistung zwischen Python-Versionen vergleichen zu können. Neue Funktionen können immer noch in neuen Tests verwendet werden, die dann so konfiguriert werden können, dass sie bei der Installation in älteren Python-Versionen ordnungsgemäß fehlschlagen.
Urheberrecht
Dieses Dokument wurde gemeinfrei erklärt.
Quelle: https://github.com/python/peps/blob/main/peps/pep-0291.rst
Zuletzt geändert: 2024-10-10 20:00:57 GMT