Was ist neu in Python 3.13¶
- Herausgeber:
Adam Turner und Thomas Wouters
Dieser Artikel erklärt die neuen Features in Python 3.13 im Vergleich zu 3.12. Python 3.13 wurde am 7. Oktober 2024 veröffentlicht. Alle Einzelheiten stehen im Änderungsprotokoll.
Siehe auch
PEP 719 – Zeitplan für die Veröffentlichung von Python 3.13
Zusammenfassung – Highlights des Releases¶
Python 3.13 ist eine stabile Ausgabe der Programmiersprache Python, mit einer Mischung aus Änderungen an der Sprache, an der Implementierung und an der Standardbibliothek. Zu den größten Änderungen gehören eine neue interaktive Shell, die versuchsweise Unterstützung für den Betrieb in einem Free-Threaded-Modus (PEP 703) und ein Just-in-time-Compiler (PEP 744).
Die Fehlermeldungen werden weiter besser: Rückverfolgungen werden jetzt standardmäßig farbig hervorgehoben. Die eingebaute Funktion locals() hat jetzt eine festgelegte Semantik für Änderungen am zurückgegebenen Mapping, und Typparameter unterstützen jetzt Standardwerte.
Zu den Änderungen an der Bibliothek gehört die Entfernung als veraltet markierter APIs und Module sowie die üblichen Verbesserungen bei Benutzerfreundlichkeit und Korrektheit. Mehrere alte Module der Standardbibliothek sind jetzt entfernt worden, nachdem sie in Python 3.11 als veraltet markiert wurden (PEP 594).
Dieser Artikel versucht nicht, eine vollständige Spezifikation aller neuen Features zu liefern, sondern gibt einen handlichen Überblick. Alle Einzelheiten stehen in der Dokumentation, etwa in der Bibliotheksreferenz und der Sprachreferenz. Um die vollständige Implementierung und die Entwurfsgründe einer Änderung zu verstehen, sieh im PEP zum jeweiligen neuen Feature nach. Beachte aber, dass PEPs in der Regel nicht mehr aktualisiert werden, sobald ein Feature vollständig umgesetzt ist. Hinweise zum Umstieg von früheren Python-Versionen findest du unter Portierung auf Python 3.13.
Verbesserungen am Interpreter:
Eine deutlich verbesserte interaktive Shell und verbesserte Fehlermeldungen.
PEP 667: Die eingebaute Funktion
locals()hat jetzt eine festgelegte Semantik, wenn das zurückgegebene Mapping verändert wird. Python-Debugger und ähnliche Werkzeuge können lokale Variablen in optimierten Geltungsbereichen jetzt verlässlicher aktualisieren, auch während Code nebenläufig ausgeführt wird.PEP 703: CPython 3.13 unterstützt versuchsweise den Betrieb mit abgeschaltetem Global Interpreter Lock. Näheres unter Free-Threaded CPython.
PEP 744: Ein einfacher JIT-Compiler ist hinzugekommen. Derzeit ist er standardmäßig abgeschaltet (wir schalten ihn vielleicht später ein). Die Geschwindigkeitsgewinne sind bescheiden – wir rechnen damit, das in den nächsten Veröffentlichungen zu verbessern.
Farbunterstützung in der neuen interaktiven Shell sowie in Rückverfolgungen und in der Ausgabe von doctest. Abschalten lässt sich das über die Umgebungsvariablen
PYTHON_COLORSundNO_COLOR.
Verbesserungen am Python-Datenmodell:
__static_attributes__enthält die Namen der Attribute, auf die in einer Funktion im Körper einer Klasse überself.Xzugegriffen wird.__firstlineno__hält die erste Zeilennummer einer Klassendefinition fest.
Wesentliche Verbesserungen in der Standardbibliothek:
Eine neue Ausnahme
PythonFinalizationErrorist hinzugekommen. Sie wird ausgelöst, wenn eine Operation während der Finalisierung blockiert wird.Das Modul
argparseunterstützt jetzt, Befehlszeilenoptionen, positionsbezogene Argumente und Unterbefehle als veraltet zu markieren.Die neuen Funktionen
base64.z85encode()undbase64.z85decode()unterstützen das Kodieren und Dekodieren von Z85 data.Das Modul
copyhat jetzt eine Funktioncopy.replace(), die viele eingebaute Typen und jede Klasse unterstützt, die die Methode__replace__()definiert.Das neue Modul
dbm.sqlite3ist jetzt das voreingestellte Backend vondbm.Das Modul
oshat eine Reihe neuer Funktionen, um mit den Dateideskriptoren für Timer-Benachrichtigungen von Linux zu arbeiten.Das Modul
randomhat jetzt eine Befehlszeilenschnittstelle.
Verbesserungen bei der Sicherheit:
ssl.create_default_context()setztssl.VERIFY_X509_PARTIAL_CHAINundssl.VERIFY_X509_STRICTals voreingestellte Schalter.
Verbesserungen der C-API:
Der Slot
Py_mod_gilwird jetzt verwendet, um anzuzeigen, dass ein Erweiterungsmodul den Betrieb mit abgeschaltetem GIL unterstützt.Die PyTime-C-API ist hinzugekommen. Sie gibt Zugriff auf die Uhren des Systems.
PyMutexist ein neuer, leichtgewichtiger Mutex, der ein einzelnes Byte belegt.Es gibt eine neue Reihe von Funktionen, um in der C-API Überwachungsereignisse nach PEP 669 zu erzeugen.
Neue Typisierungsfunktionen:
PEP 696: Typparameter (
typing.TypeVar,typing.ParamSpecundtyping.TypeVarTuple) unterstützen jetzt Standardwerte.PEP 702: Der neue Dekorator
warnings.deprecated()unterstützt es, Abkündigungen im Typsystem und zur Laufzeit zu kennzeichnen.PEP 705: Mit
typing.ReadOnlylässt sich ein Element einestyping.TypedDictfür Typprüfer als nur lesbar kennzeichnen.PEP 742:
typing.TypeIsbietet als Alternative zutyping.TypeGuardein eingängigeres Verhalten beim Einengen von Typen.
Unterstützte Plattformen:
PEP 730: Apples iOS ist jetzt eine offiziell unterstützte Plattform, auf Stufe 3.
PEP 738: Android ist jetzt eine offiziell unterstützte Plattform, auf Stufe 3.
wasm32-wasiwird jetzt als Plattform der Stufe 2 unterstützt.wasm32-emscriptenist keine offiziell unterstützte Plattform mehr.
Wichtige Entfernungen:
PEP 594: Die restlichen 19 „leeren Batterien“ (alte Module der Standardbibliothek) sind aus der Standardbibliothek entfernt:
aifc,audioop,cgi,cgitb,chunk,crypt,imghdr,mailcap,msilib,nis,nntplib,ossaudiodev,pipes,sndhdr,spwd,sunau,telnetlib,uuundxdrlib.Das Werkzeug 2to3 und das Modul
lib2to3sind entfernt (in Python 3.11 als veraltet markiert).Das Modul
tkinter.tixist entfernt (in Python 3.6 als veraltet markiert).Die Funktion
locale.resetlocale()ist entfernt.Die Namensräume
typing.ioundtyping.resind entfernt.Verkettete
classmethod-Deskriptoren sind entfernt.
Änderungen am Veröffentlichungszeitplan:
PEP 602 („Annual Release Cycle for Python“) ist dahin geändert, dass der Zeitraum der vollen Unterstützung („bugfix“) für neue Veröffentlichungen auf zwei Jahre verlängert wird. Diese geänderte Richtlinie bedeutet:
Python 3.9 bis 3.12 haben eineinhalb Jahre volle Unterstützung, danach dreieinhalb Jahre Sicherheitskorrekturen.
Python 3.13 und später haben zwei Jahre volle Unterstützung, danach drei Jahre Sicherheitskorrekturen.
Neue Funktionen¶
Eine bessere interaktive Shell¶
Python verwendet jetzt standardmäßig eine neue interaktive Shell, die auf Code aus dem PyPy project aufbaut. Startet man die REPL von einem interaktiven Terminal aus, werden jetzt die folgenden neuen Features unterstützt:
Mehrzeiliges Bearbeiten mit erhaltener Chronik.
Unmittelbare Unterstützung für REPL-eigene Befehle wie help, exit und quit, ohne sie als Funktionen aufrufen zu müssen.
Eingabeaufforderungen und Rückverfolgungen mit standardmäßig eingeschalteter Farbe.
Interaktives Blättern in der Hilfe über F1, mit eigener Befehlschronik.
Blättern in der Chronik über F2, das die Ausgabe sowie die Eingabeaufforderungen >>> und … überspringt.
Ein „Einfügemodus“ über F3, der das Einfügen größerer Codeblöcke erleichtert (F3 erneut drücken, um zur gewöhnlichen Eingabeaufforderung zurückzukehren).
Um die neue interaktive Shell abzuschalten, setze die Umgebungsvariable PYTHON_BASIC_REPL. Mehr zum interaktiven Modus unter Interaktiver Modus.
(Beigetragen von Pablo Galindo Salgado, Łukasz Langa und Lysandros Nikolaou in gh-111201, auf der Grundlage von Code aus dem PyPy-Projekt. Die Unterstützung für Windows wurde von Dino Viehland und Anthony Shaw beigetragen.)
Verbesserte Fehlermeldungen¶
Der Interpreter verwendet jetzt standardmäßig Farbe, wenn er Rückverfolgungen im Terminal anzeigt. Dieses Feature lässt sich steuern, über die neue Umgebungsvariable
PYTHON_COLORSsowie über die gängigen UmgebungsvariablenNO_COLORundFORCE_COLOR. (Beigetragen von Pablo Galindo Salgado in gh-112730.)Ein häufiger Fehler ist, ein Skript so zu benennen wie ein Modul der Standardbibliothek. Führt das zu Fehlern, zeigen wir jetzt eine hilfreichere Fehlermeldung an:
$ python random.py Traceback (most recent call last): File "/home/me/random.py", line 1, in <module> import random File "/home/me/random.py", line 3, in <module> print(random.randint(5)) ^^^^^^^^^^^^^^ AttributeError: module 'random' has no attribute 'randint' (consider renaming '/home/me/random.py' since it has the same name as the standard library module named 'random' and prevents importing that standard library module)
Ebenso zeigen wir eine hilfreichere Fehlermeldung an, wenn ein Skript so heißt wie ein Modul eines Dritten, das es zu importieren versucht, und das zu Fehlern führt:
$ python numpy.py Traceback (most recent call last): File "/home/me/numpy.py", line 1, in <module> import numpy as np File "/home/me/numpy.py", line 3, in <module> np.array([1, 2, 3]) ^^^^^^^^ AttributeError: module 'numpy' has no attribute 'array' (consider renaming '/home/me/numpy.py' if it has the same name as a library you intended to import)
(Beigetragen von Shantanu Jain in gh-95754.)
Die Fehlermeldung versucht jetzt, das richtige Schlüsselwortargument vorzuschlagen, wenn einer Funktion ein falsches Schlüsselwortargument übergeben wird.
>>> "Better error messages!".split(max_split=1) Traceback (most recent call last): File "<python-input-0>", line 1, in <module> "Better error messages!".split(max_split=1) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^ TypeError: split() got an unexpected keyword argument 'max_split'. Did you mean 'maxsplit'?
(Beigetragen von Pablo Galindo Salgado und Shantanu Jain in gh-107944.)
Free-Threaded CPython¶
CPython unterstützt jetzt versuchsweise den Betrieb in einem Free-Threaded-Modus, mit abgeschaltetem Global Interpreter Lock (GIL). Das ist ein Feature im Versuchsstadium und daher nicht standardmäßig eingeschaltet. Der Free-Threaded-Modus braucht eine andere ausführbare Datei, üblicherweise python3.13t oder python3.13t.exe. Vorgefertigte Binärpakete, die als free-threaded gekennzeichnet sind, lassen sich als Teil der offiziellen Installationsprogramme für Windows und macOS installieren. Alternativ lässt sich CPython mit der Option --disable-gil aus dem Quellcode bauen.
Free-Threaded-Ausführung erlaubt es, die verfügbare Rechenleistung voll auszuschöpfen, indem Threads parallel auf den vorhandenen CPU-Kernen laufen. Nicht jede Software profitiert davon von sich aus, aber Programme, die von Anfang an auf Threads ausgelegt sind, laufen auf Mehrkern-Hardware schneller. Der Free-Threaded-Modus ist ein Versuch, und die Arbeit an seiner Verbesserung läuft weiter: Rechne mit einigen Fehlern und einem erheblichen Geschwindigkeitsverlust bei einem einzelnen Thread. Free-Threaded-Builds von CPython erlauben wahlweise den Betrieb mit zur Laufzeit eingeschaltetem GIL, über die Umgebungsvariable PYTHON_GIL oder die Befehlszeilenoption -X gil=1.
Um zu prüfen, ob der laufende Interpreter Free-Threading unterstützt, enthalten python -VV und sys.version den Text „experimental free-threading build“. Mit der neuen Funktion sys._is_gil_enabled() lässt sich prüfen, ob das GIL im laufenden Prozess tatsächlich abgeschaltet ist.
Erweiterungsmodule der C-API müssen eigens für den Free-Threaded-Build gebaut werden. Erweiterungen, die den Betrieb mit abgeschaltetem GIL unterstützen, sollten den Slot Py_mod_gil verwenden. Erweiterungen mit einphasiger Initialisierung sollten PyUnstable_Module_SetGIL() verwenden, um anzuzeigen, ob sie den Betrieb mit abgeschaltetem GIL unterstützen. Importiert man C-Erweiterungen, die diese Mechanismen nicht verwenden, wird das GIL eingeschaltet, sofern es nicht ausdrücklich über die Umgebungsvariable PYTHON_GIL oder die Option -X gil=0 abgeschaltet wurde. Um Pakete mit C-Erweiterungen im Free-Threaded-Build zu installieren, wird pip 24.1 oder neuer benötigt.
Möglich wurde diese Arbeit durch viele Einzelpersonen und Organisationen, darunter die große Gemeinschaft derer, die zu Python und zu Projekten Dritter beigetragen haben, um die Unterstützung für Free-Threading zu testen und zu ermöglichen. Zu den wichtigsten Beitragenden gehören Sam Gross, Ken Jin, Donghee Na, Itamar Oren, Matt Page, Brett Simmers, Dino Viehland, Carl Meyer, Nathan Goldbaum, Ralf Gommers, Lysandros Nikolaou und viele weitere. Viele von ihnen sind bei Meta angestellt, das erhebliche Entwicklungsressourcen zur Unterstützung dieses Projekts bereitgestellt hat.
Siehe auch
PEP 703 „Making the Global Interpreter Lock Optional in CPython“ enthält die Begründung und weitere Informationen zu dieser Arbeit.
Erweiterungsmodule auf Free-Threading portieren: ein von der Gemeinschaft gepflegter Portierungsleitfaden für Autoren von Erweiterungen.
Ein versuchsweiser Just-in-time-Compiler (JIT)¶
Wird CPython mit der Option --enable-experimental-jit konfiguriert und gebaut, kommt ein Just-in-time-Compiler (JIT) hinzu, der manche Python-Programme beschleunigen kann. Unter Windows schaltet PCbuild/build.bat --experimental-jit den JIT ein und --experimental-jit-interpreter den Tier-2-Interpreter. Die Voraussetzungen für den Build und weitere Hinweise dazu stehen in Tools/jit/README.md.
Die Option --enable-experimental-jit nimmt die folgenden (optionalen) Werte an. Ohne den optionalen Wert gilt yes, wenn --enable-experimental-jit angegeben ist.
no: schaltet die gesamte Tier-2- und JIT-Verarbeitung ab.yes: schaltet den JIT ein. Um den JIT zur Laufzeit abzuschalten, übergib die UmgebungsvariablePYTHON_JIT=0.yes-off: baut den JIT, schaltet ihn aber standardmäßig ab. Um den JIT zur Laufzeit einzuschalten, übergib die UmgebungsvariablePYTHON_JIT=1.interpreter: schaltet den Tier-2-Interpreter ein, aber den JIT ab. Der Interpreter lässt sich abschalten, indem man mitPYTHON_JIT=0arbeitet.
Die innere Architektur sieht grob so aus:
Wir beginnen mit spezialisiertem Tier-1-Bytecode. Einzelheiten unter Was ist neu in 3.11.
Wird der Tier-1-Bytecode heiß genug, wird er in eine neue, rein interne Zwischendarstellung (IR) übersetzt, die Tier-2-IR, manchmal auch Micro-Ops („Uops“) genannt.
Die Tier-2-IR verwendet dieselbe stapelbasierte virtuelle Maschine wie Tier 1, das Anweisungsformat eignet sich aber besser für die Übersetzung in Maschinencode.
Für die Tier-2-IR gibt es mehrere Optimierungsdurchläufe, die angewendet werden, bevor sie interpretiert oder in Maschinencode übersetzt wird.
Es gibt einen Tier-2-Interpreter, er ist aber vor allem dazu gedacht, die früheren Stufen der Optimierung zu untersuchen. Einschalten lässt sich der Tier-2-Interpreter, indem man Python mit
--enable-experimental-jit=interpreterkonfiguriert.Ist der JIT eingeschaltet, wird die optimierte Tier-2-IR in Maschinencode übersetzt, der dann ausgeführt wird.
Die Übersetzung in Maschinencode arbeitet mit einem Verfahren namens copy-and-patch. Zur Laufzeit bringt es keine Abhängigkeiten mit, zur Build-Zeit kommt aber eine neue Abhängigkeit von LLVM hinzu.
Siehe auch
(JIT von Brandt Bucher, angeregt durch eine Arbeit von Haoran Xu und Fredrik Kjolstad. Tier-2-IR von Mark Shannon und Guido van Rossum. Tier-2-Optimierer von Ken Jin.)
Festgelegte Semantik für Änderungen an locals()¶
Bisher war es den einzelnen Python-Implementierungen überlassen, festzulegen, was zu erwarten ist, wenn der Rückgabewert von locals() verändert wird. Ab Python 3.13 vereinheitlicht PEP 667 das bisherige Verhalten von CPython für die meisten Geltungsbereiche, in denen Code ausgeführt wird, ändert aber optimierte Geltungsbereiche (Funktionen, Generatoren, Coroutinen, Comprehensions und Generatorausdrücke) dahin, dass sie ausdrücklich eigenständige Momentaufnahmen der derzeit zugewiesenen lokalen Variablen zurückgeben, einschließlich lokal referenzierter nichtlokaler Variablen, die in Closures eingefangen sind.
Diese Änderung an der Semantik von locals() in optimierten Geltungsbereichen wirkt sich auch auf das voreingestellte Verhalten jener Funktionen aus, die Code ausführen und dabei stillschweigend auf locals() zielen, wenn kein Namensraum ausdrücklich angegeben ist (etwa exec() und eval()). In früheren Versionen war es von der Implementierung abhängig, ob auf Änderungen zugegriffen werden konnte, indem man locals() nach dem Aufruf der Code ausführenden Funktion aufrief. In CPython schien solcher Code üblicherweise wie gewünscht zu arbeiten, konnte aber in optimierten Geltungsbereichen manchmal fehlschlagen, weil anderer Code (darunter Debugger und Werkzeuge zur Ablaufverfolgung) die gemeinsam genutzte Momentaufnahme in diesem Geltungsbereich zurücksetzen konnte. Jetzt arbeitet der Code in optimierten Geltungsbereichen immer gegen eine eigenständige Momentaufnahme der lokalen Variablen, und die Änderungen sind daher in späteren Aufrufen von locals() nie sichtbar. Um in diesen Fällen auf die vorgenommenen Änderungen zuzugreifen, muss der betreffenden Funktion jetzt ausdrücklich ein Namensraum übergeben werden. Es kann auch sinnvoll sein, betroffenen Code auf eine höher gelegene API zum Ausführen von Code umzustellen, die den entstandenen Namensraum zurückgibt (etwa runpy.run_path(), um Python-Dateien von der Festplatte auszuführen).
Damit Debugger und ähnliche Werkzeuge lokale Variablen in den von dieser Änderung betroffenen Geltungsbereichen verlässlich aktualisieren können, gibt FrameType.f_locals in diesen Geltungsbereichen jetzt einen durchschreibenden Stellvertreter auf die lokalen und die lokal referenzierten nichtlokalen Variablen des Rahmens zurück, statt eine ungleichmäßig aktualisierte, gemeinsam genutzte dict-Instanz mit unbestimmter Semantik zur Laufzeit.
Näheres unter PEP 667, einschließlich der zugehörigen Änderungen und Abkündigungen in der C-API. Hinweise zur Portierung stehen außerdem weiter unten bei den betroffenen Python-APIs und C-APIs.
(PEP und Umsetzung beigetragen von Mark Shannon und Tian Gao in gh-74929. Aktualisierungen der Dokumentation von Guido van Rossum und Alyssa Coghlan.)
Unterstützung für mobile Plattformen¶
PEP 730: iOS ist jetzt eine nach PEP 11 unterstützte Plattform, mit den Zielen arm64-apple-ios und arm64-apple-ios-simulator auf Stufe 3 (iPhone- und iPad-Geräte, die nach 2013 erschienen sind, beziehungsweise der iOS-Simulator von Xcode auf Apple-Silicon-Hardware). x86_64-apple-ios-simulator (der iOS-Simulator von Xcode auf älterer x86_64-Hardware) ist keine auf Stufe 3 unterstützte Plattform, wird aber nach Kräften unterstützt. (PEP verfasst und Umsetzung beigetragen von Russell Keith-Magee in gh-114099.)
PEP 738: Android ist jetzt eine nach PEP 11 unterstützte Plattform, mit den Zielen aarch64-linux-android und x86_64-linux-android auf Stufe 3. Die 32-Bit-Ziele arm-linux-androideabi und i686-linux-android sind keine auf Stufe 3 unterstützten Plattformen, werden aber nach Kräften unterstützt. (PEP verfasst und Umsetzung beigetragen von Malcolm Smith in gh-116622.)
Andere sprachliche Änderungen¶
Der Compiler entfernt jetzt den gemeinsamen führenden Leerraum aus jeder Zeile eines Docstrings. Das verkleinert den Bytecode-Zwischenspeicher (etwa
.pyc-Dateien) um etwa 5 % an Dateigröße, zum Beispiel beisqlalchemy.orm.sessionaus SQLAlchemy 2.0. Diese Änderung betrifft Werkzeuge, die Docstrings verwenden, etwadoctest.>>> def spam(): ... """ ... This is a docstring with ... leading whitespace. ... ... It even has multiple paragraphs! ... """ ... >>> spam.__doc__ '\nThis is a docstring with\n leading whitespace.\n\nIt even has multiple paragraphs!\n'
(Beigetragen von Inada Naoki in gh-81283.)
Annotationsgeltungsbereiche innerhalb von Klassengeltungsbereichen dürfen jetzt Lambdas und Comprehensions enthalten. Comprehensions, die in einem Klassengeltungsbereich liegen, werden nicht in den übergeordneten Geltungsbereich eingebettet.
class C[T]: type Alias = lambda: T
(Beigetragen von Jelle Zijlstra in gh-109118 und gh-118160.)
Future-Anweisungen werden nicht mehr durch relative Importe des Moduls
__future__ausgelöst, das heißt, Anweisungen der Formfrom .__future__ import ...sind jetzt einfach gewöhnliche relative Importe, bei denen keine besonderen Features eingeschaltet werden. (Beigetragen von Jeremiah Gabriel Pascual in gh-118216.)global-Deklarationen sind jetzt inexcept-Blöcken erlaubt, wenn diese globale Variable imelse-Block verwendet wird. Vorher löste das irrtümlich einenSyntaxErroraus. (Beigetragen von Irit Katriel in gh-111123.)PYTHON_FROZEN_MODULESist hinzugekommen, eine neue Umgebungsvariable, die bestimmt, ob eingefrorene Module von der Importmaschinerie übergangen werden. Sie entspricht der Befehlszeilenoption-X frozen_modules. (Beigetragen von Yilei Yang in gh-111374.)Unterstützung für den perf-Profiler ohne Frame-Pointer ist hinzugekommen, über die neue Umgebungsvariable
PYTHON_PERF_JIT_SUPPORTund die Befehlszeilenoption-X perf_jit. (Beigetragen von Pablo Galindo in gh-118518.)Der Ort einer
.python_history-Datei lässt sich über die neue UmgebungsvariablePYTHON_HISTORYändern. (Beigetragen von Levi Sabah, Zackery Spytz und Hugo van Kemenade in gh-73965.)Klassen haben ein neues Attribut
__static_attributes__. Der Compiler füllt es mit einem Tupel der Attributnamen der Klasse, die in einer Funktion in ihrem Körper überself.<name>zugewiesen werden. (Beigetragen von Irit Katriel in gh-115775.)Der Compiler erzeugt an Klassen jetzt ein Attribut
__firstlineno__mit der Zeilennummer der ersten Zeile der Klassendefinition. (Beigetragen von Serhiy Storchaka in gh-118465.)Die eingebauten Funktionen
exec()undeval()nehmen die Argumente globals und locals jetzt auch als Schlüsselwortargumente an. (Beigetragen von Raphael Gaschignard in gh-105879)Die eingebaute Funktion
compile()nimmt jetzt einen neuen Schalterast.PyCF_OPTIMIZED_ASTan, derast.PyCF_ONLY_ASTgleicht, außer dass der zurückgegebene AST entsprechend dem Wert des Arguments optimize optimiert wird. (Beigetragen von Irit Katriel in gh-108113).An
property-Objekten ist ein Attribut__name__hinzugekommen. (Beigetragen von Eugene Toder in gh-101860.)PythonFinalizationErrorist hinzugekommen, eine neue vonRuntimeErrorabgeleitete Ausnahme, die anzeigt, dass Operationen während der Finalisierung blockiert sind. Die folgenden aufrufbaren Objekte lösen jetztPythonFinalizationErroraus stattRuntimeError:(Beigetragen von Victor Stinner in gh-114570.)
Das Argument count von
str.replace()darf jetzt ein Schlüsselwortargument sein. (Beigetragen von Hugo van Kemenade in gh-106487.)Viele Funktionen geben jetzt eine Warnung aus, wenn ein boolescher Wert als Argument für einen Dateideskriptor übergeben wird. Damit lassen sich manche Fehler früher erkennen. (Beigetragen von Serhiy Storchaka in gh-82626.)
Die Attribute
nameundmodesind für komprimierte und archivierte dateiähnliche Objekte in den Modulenbz2,lzma,tarfileundzipfilehinzugekommen. (Beigetragen von Serhiy Storchaka in gh-115961.)
Neue Module¶
dbm.sqlite3: ein SQLite-Backend fürdbm. (Beigetragen von Raymond Hettinger und Erlend E. Aasland in gh-100414.)
Verbesserte Module¶
argparse¶
Der Parameter deprecated ist zu den Methoden
add_argument()undadd_parser()hinzugekommen, um Befehlszeilenoptionen, positionsbezogene Argumente und Unterbefehle als veraltet markieren zu können. (Beigetragen von Serhiy Storchaka in gh-83648.)
Array¶
Der Typcode
'w'(Py_UCS4) für Unicode-Zeichen ist hinzugekommen. Er sollte an der Stelle des als veraltet markierten Typcodes'u'verwendet werden. (Beigetragen von Inada Naoki in gh-80480.)array.arrayist alsMutableSequenceangemeldet, indem die Methodeclear()umgesetzt wurde. (Beigetragen von Mike Zimin in gh-114894.)
ast¶
Die Konstruktoren der Knotentypen im Modul
astsind jetzt strenger bei den Argumenten, die sie annehmen, und verhalten sich eingängiger, wenn Argumente weggelassen werden.Wird ein optionales Feld eines AST-Knotens beim Erzeugen einer Instanz nicht als Argument angegeben, wird das Feld jetzt auf
Nonegesetzt. Ebenso wird ein weggelassenes Listenfeld jetzt auf eine leere Liste gesetzt, und ein weggelassenesexpr_context-Feld aufLoad(). (Vorher fehlte das Attribut in allen diesen Fällen an der neu erzeugten AST-Knoteninstanz.)In allen anderen Fällen, in denen ein benötigtes Argument weggelassen wird, gibt der Knotenkonstruktor eine
DeprecationWarningaus. In Python 3.15 wird daraus eine Ausnahme. Ebenso ist es jetzt als veraltet markiert, dem Konstruktor ein Schlüsselwortargument zu übergeben, das keinem Feld des AST-Knotens entspricht. In Python 3.15 wird daraus eine Ausnahme.Diese Änderungen gelten nicht für selbst definierte Unterklassen von
ast.AST, es sei denn, die Klasse entscheidet sich für das neue Verhalten, indem sie das MappingAST._field_typesdefiniert.(Beigetragen von Jelle Zijlstra in gh-105858, gh-117486 und gh-118851.)
ast.parse()nimmt jetzt ein optionales Argument optimize an, das ancompile()weitergegeben wird. Damit lässt sich ein optimierter AST gewinnen. (Beigetragen von Irit Katriel in gh-108113.)
asyncio¶
asyncio.as_completed()gibt jetzt ein Objekt zurück, das sowohl ein asynchroner Iterator als auch ein gewöhnlicher Iterator über Awaitables ist. Zu den Awaitables, die die asynchrone Iteration liefert, gehören die ursprünglich übergebenen Auftrags- oder Future-Objekte, wodurch sich Ergebnisse leichter den jeweils abgeschlossenen Aufträgen zuordnen lassen. (Beigetragen von Justin Arthur in gh-77714.)asyncio.loop.create_unix_server()entfernt den Unix-Socket jetzt selbsttätig, wenn der Server geschlossen wird. (Beigetragen von Pierre Ossman in gh-111246.)DatagramTransport.sendto()sendet jetzt Datagramme der Länge null, wenn es mit einem leeren bytes-Objekt aufgerufen wird. Die Flusssteuerung des Transports berücksichtigt bei der Berechnung der Puffergröße jetzt außerdem den Datagramm-Kopf. (Beigetragen von Jamie Phan in gh-115199.)Queue.shutdownundQueueShutDownsind hinzugekommen, um das Beenden einer Warteschlange zu steuern. (Beigetragen von Laurie Opperman und Yves Duprat in gh-104228.)Die Methoden
Server.close_clients()undServer.abort_clients()sind hinzugekommen. Sie schließen einen asyncio-Server nachdrücklicher. (Beigetragen von Pierre Ossman in gh-113538.)StreamReader.readuntil()nimmt jetzt ein Tupel von Trennzeichen an und hält an, sobald eines von ihnen auftritt. (Beigetragen von Bruce Merry in gh-81322.)Das Verhalten von
TaskGroupist verbessert, wenn ein Abbruch von außen mit einem internen Abbruch zusammentrifft. Waren zum Beispiel zwei Auftragsgruppen verschachtelt und trat in beiden gleichzeitig eine Ausnahme in einem Kindauftrag auf, konnte die äußere Auftragsgruppe hängen bleiben, weil ihr interner Abbruch von der inneren Auftragsgruppe verschluckt wurde.Wird eine Auftragsgruppe von außen abgebrochen und muss zugleich eine
ExceptionGroupauslösen, ruft sie jetzt die Methodecancel()des übergeordneten Auftrags auf. Damit ist sichergestellt, dass beim nächstenawaiteinCancelledErrorausgelöst wird und der Abbruch nicht verloren geht.Ein weiterer Vorteil dieser Änderungen ist, dass Auftragsgruppen jetzt den Abbruchzähler (
cancelling()) erhalten.Um einige Randfälle zu behandeln, darf
uncancel()den nicht dokumentierten Schalter_must_canceljetzt zurücksetzen, wenn der Abbruchzähler null erreicht.(Angeregt durch ein von Arthur Tacca in gh-116720 gemeldetes Problem.)
Wird
TaskGroup.create_task()auf einer nicht aktivenTaskGroupaufgerufen, wird die übergebene Coroutine geschlossen (was eineRuntimeWarningdarüber verhindert, dass die übergebene Coroutine nie erwartet wurde). (Beigetragen von Arthur Tacca und Jason Zhang in gh-115957.)Die Funktion und die Methoden namens
create_taskhaben ein neues Argument**kwargserhalten, das an den Auftragskonstruktor weitergegeben wird. Diese Änderung kam in 3.13.3 versehentlich hinzu und brach den API-Vertrag für eigene Auftrags-Factorys. Mehrere Auftrags-Factorys von Dritten haben Umgehungen dafür umgesetzt. In 3.13.4 und späteren Veröffentlichungen gilt der alte Vertrag der Factorys wieder (bis 3.14). Damit die Umgehungen weiter funktionieren, erlaubt das zusätzliche Argument**kwargsweiterhin, zusätzliche Schlüsselwortargumente anTaskund an eigene Auftrags-Factorys zu übergeben.Betroffen sind die folgende Funktion und die folgenden Methoden:
asyncio.create_task(),asyncio.loop.create_task(),asyncio.TaskGroup.create_task(). (Beigetragen von Thomas Grainger in gh-128307.)
base64¶
Die Funktionen
z85encode()undz85decode()sind hinzugekommen, umbytesals Z85 data zu kodieren und Z85-kodierte Daten nachbyteszu dekodieren. (Beigetragen von Matan Perelman in gh-75299.)
compileall¶
Die voreingestellte Anzahl der Arbeits-Threads und -Prozesse wird jetzt mit
os.process_cpu_count()statt mitos.cpu_count()bestimmt. (Beigetragen von Victor Stinner in gh-109649.)
concurrent.futures¶
Die voreingestellte Anzahl der Arbeits-Threads und -Prozesse wird jetzt mit
os.process_cpu_count()statt mitos.cpu_count()bestimmt. (Beigetragen von Victor Stinner in gh-109649.)
configparser¶
ConfigParserunterstützt jetzt unbenannte Abschnitte, womit Schlüssel-Wert-Paare auf oberster Ebene möglich sind. Einschalten lässt sich das über den neuen Parameter allow_unnamed_section. (Beigetragen von Pedro Sousa Lacerda in gh-66449.)
copy¶
Die neue Funktion
replace()und dasReplace-Protokollmachen es viel einfacher, geänderte Kopien von Objekten zu erzeugen. Besonders nützlich ist das bei unveränderlichen Objekten. Die folgenden Typen unterstützen die Funktionreplace()und setzen das Replace-Protokoll um:Jede selbst definierte Klasse kann
copy.replace()ebenfalls unterstützen, indem sie die Methode__replace__()definiert. (Beigetragen von Serhiy Storchaka in gh-108751.)
ctypes¶
Als Folge eines nötigen internen Umbaus geschieht die Initialisierung interner Metaklassen jetzt in
__init__statt in__new__. Das betrifft Projekte, die von diesen internen Metaklassen ableiten, um eigene Initialisierung bereitzustellen. Allgemein gilt:Eigene Logik, die in
__new__nach dem Aufruf vonsuper().__new__ausgeführt wurde, sollte nach__init__wandern.Um eine Klasse zu erzeugen, rufe die Metaklasse auf, nicht nur die Methode
__new__der Metaklasse.
Zur Diskussion und zu Verweisen auf Änderungen in einigen betroffenen Projekten siehe gh-124520.
ctypes.Structure-Objekte haben ein neues Attribut_align_, mit dem sich die Ausrichtung der Struktur beim Packen in den und aus dem Speicher ausdrücklich angeben lässt. (Beigetragen von Matt Sanderson in gh-112433)
dbm¶
dbm.sqlite3ist hinzugekommen, ein neues Modul, das ein SQLite-Backend umsetzt und jetzt das voreingestellte Backend vondbmist. (Beigetragen von Raymond Hettinger und Erlend E. Aasland in gh-100414.)Über die neuen
clear()-Methoden der GDBM- und NDBM-Datenbankobjekte lassen sich jetzt alle Einträge aus der Datenbank entfernen. (Beigetragen von Donghee Na in gh-107122.)
dis¶
Die Ausgabe der Funktionen des Moduls
diszeigt für Sprungziele und Ausnahmebehandler jetzt logische Marken statt Offsets. Die Offsets lassen sich über die neue Befehlszeilenoption-Ooder das Argument show_offsets hinzufügen. (Beigetragen von Irit Katriel in gh-112137.)get_instructions()stellt Einträge des Zwischenspeichers nicht mehr als eigene Anweisungen dar. Stattdessen gibt es sie als Teil derInstructionim neuen Feld cache_info zurück. Das Argument show_caches vonget_instructions()ist als veraltet markiert und hat keine Wirkung mehr. (Beigetragen von Irit Katriel in gh-112962.)
doctest¶
Die Ausgabe von
doctestist jetzt standardmäßig farbig. Steuern lässt sich das über die neue UmgebungsvariablePYTHON_COLORSsowie über die gängigen UmgebungsvariablenNO_COLORundFORCE_COLOR. Siehe auch Farbsteuerung. (Beigetragen von Hugo van Kemenade in gh-117225.)Die Methode
DocTestRunner.run()zählt jetzt die Anzahl der übersprungenen Tests. Die AttributeDocTestRunner.skipsundTestResults.skippedsind hinzugekommen. (Beigetragen von Victor Stinner in gh-108794.)
email¶
Kopfzeilen mit eingebetteten Zeilenumbrüchen werden bei der Ausgabe jetzt in Anführungszeichen gesetzt. Der
generatorweigert sich jetzt, Kopfzeilen zu serialisieren (zu schreiben), die unsauber umbrochen oder begrenzt sind, sodass sie als mehrere Kopfzeilen ausgewertet oder mit angrenzenden Daten verbunden würden. Wenn du dieses Sicherheitsfeature abschalten musst, setzeverify_generated_headers. (Beigetragen von Bas Bloemsaat und Petr Viktorin in gh-121650.)getaddresses()undparseaddr()geben jetzt in mehr Fällen, in denen ungültige E-Mail-Adressen auftreten, Paare('', '')zurück statt möglicherweise unzutreffender Werte. Die beiden Funktionen haben einen neuen optionalen Parameter strict (VoreinstellungTrue). Um das alte Verhalten zu bekommen (unsaubere Eingaben werden angenommen), verwendestrict=False. Mitgetattr(email.utils, 'supports_strict_parsing', False)lässt sich prüfen, ob der Parameter strict verfügbar ist. (Beigetragen von Thomas Dwyer und Victor Stinner für gh-102988, um die Korrektur zu CVE 2023-27043 zu verbessern.)
enum¶
fractions¶
Fraction-Objekte unterstützen jetzt die gewöhnlichen Regeln der Mini-Sprache für Formatangaben für Füllzeichen, Ausrichtung, Vorzeichenbehandlung, Mindestbreite und Gruppierung. (Beigetragen von Mark Dickinson in gh-111320.)
glob¶
translate()ist hinzugekommen, eine Funktion, die eine Pfadangabe mit Jokerzeichen im Shell-Stil in einen regulären Ausdruck umwandelt. (Beigetragen von Barney Gale in gh-72904.)
importlib¶
Die folgenden Funktionen in
importlib.resourceserlauben jetzt den Zugriff auf ein Verzeichnis (oder einen Baum) von Ressourcen, über mehrere positionsbezogene Argumente (die Argumente encoding und errors der Funktionen zum Lesen von Text sind jetzt nur noch als Schlüsselwortargumente möglich):Diese Funktionen sind nicht mehr als veraltet markiert, und ihre Entfernung ist nicht geplant. (Beigetragen von Petr Viktorin in gh-116608.)
contents()bleibt als veraltet markiert, zugunsten der vollwertigen APITraversable. Es ist jetzt allerdings nicht geplant, sie zu entfernen. (Beigetragen von Petr Viktorin in gh-116608.)
io¶
Der Finalizer von
IOBaseprotokolliert Fehler, die die Methodeclose()auslöst, jetzt übersys.unraisablehook. Vorher wurden Fehler standardmäßig stillschweigend übergangen und nur im Python-Entwicklungsmodus oder in einem Debug-Build von Python protokolliert. (Beigetragen von Victor Stinner in gh-62948.)
ipaddress¶
Die Eigenschaft
IPv4Address.ipv6_mappedist hinzugekommen. Sie gibt die als IPv6 abgebildete IPv4-Adresse zurück. (Beigetragen von Charles Machalow in gh-109466.)Das Verhalten von
is_globalundis_privateinIPv4Address,IPv6Address,IPv4NetworkundIPv6Networkist ausgebessert. (Beigetragen von Jakub Stasiak in gh-113171.)
itertools¶
batched()hat einen neuen Parameter strict, der einenValueErrorauslöst, wenn die letzte Teilmenge kürzer ist als die angegebene Größe. (Beigetragen von Raymond Hettinger in gh-113202.)
marshal¶
Der Parameter allow_code ist in den Modulfunktionen hinzugekommen.
allow_code=Falsezu übergeben verhindert das Serialisieren und Deserialisieren von Code-Objekten, die zwischen Python-Versionen unverträglich sind. (Beigetragen von Serhiy Storchaka in gh-113626.)
math¶
Die neue Funktion
fma()führt verschmolzene Multiplikations-Additionen aus. Sie berechnetx * y + zmit nur einer einzigen Rundung und vermeidet damit jeden Genauigkeitsverlust im Zwischenergebnis. Sie hüllt die von C99 bereitgestellte Funktionfma()ein und folgt bei Sonderfällen der Spezifikation der IEEE-754-Operation „fusedMultiplyAdd“. (Beigetragen von Mark Dickinson und Victor Stinner in gh-73468.)
mimetypes¶
Die Funktion
guess_file_type()ist hinzugekommen, um einen MIME-Typ aus einem Dateisystempfad zu erraten. Pfade mitguess_type()zu verwenden ist jetzt sanft abgekündigt. (Beigetragen von Serhiy Storchaka in gh-66543.)
mmap¶
mmapist jetzt davor geschützt, unter Windows abzustürzen, wenn der abgebildete Speicher wegen Dateisystemfehlern oder Zugriffsverletzungen nicht erreichbar ist. (Beigetragen von Jannis Weigend in gh-118209.)mmaphat eine neue Methodeseekable(), die sich verwenden lässt, wenn ein dateiähnliches Objekt mit Positionierung benötigt wird. Die Methodeseek()gibt jetzt die neue absolute Position zurück. (Beigetragen von Donghee Na und Sylvie Liberman in gh-111835.)Der neue, nur unter UNIX verfügbare Parameter trackfd von
mmapsteuert das Vervielfachen des Dateideskriptors. Ist er falsch, wird der mit fileno angegebene Dateideskriptor nicht vervielfacht. (Beigetragen von Zackery Spytz und Petr Viktorin in gh-78502.)
multiprocessing¶
Die voreingestellte Anzahl der Arbeits-Threads und -Prozesse wird jetzt mit
os.process_cpu_count()statt mitos.cpu_count()bestimmt. (Beigetragen von Victor Stinner in gh-109649.)
os¶
Die Funktion
process_cpu_count()ist hinzugekommen, um die Anzahl der logischen CPU-Kerne zu ermitteln, die der aufrufende Thread des aktuellen Prozesses nutzen kann. (Beigetragen von Victor Stinner in gh-109649.)cpu_count()undprocess_cpu_count()lassen sich über die neue UmgebungsvariablePYTHON_CPU_COUNToder die neue Befehlszeilenoption-X cpu_countüberschreiben. Diese Option ist nützlich, wenn man die CPU-Ressourcen eines Container-Systems begrenzen muss, ohne den Anwendungscode oder den Container selbst zu ändern. (Beigetragen von Donghee Na in gh-109595.)Eine tief liegende Schnittstelle zu den Timer-Dateideskriptoren von Linux ist hinzugekommen, über
timerfd_create(),timerfd_settime(),timerfd_settime_ns(),timerfd_gettime(),timerfd_gettime_ns(),TFD_NONBLOCK,TFD_CLOEXEC,TFD_TIMER_ABSTIMEundTFD_TIMER_CANCEL_ON_SET(Beigetragen von Masaru Tsuchiyama in gh-108277.)lchmod()und das Argument follow_symlinks vonchmod()sind jetzt beide auch unter Windows verfügbar. Beachte, dass der voreingestellte Wert von follow_symlinks inlchmod()unter WindowsFalseist. (Beigetragen von Serhiy Storchaka in gh-59616.)fchmod()und die Unterstützung für Dateideskriptoren inchmod()sind jetzt beide auch unter Windows verfügbar. (Beigetragen von Serhiy Storchaka in gh-113191.)Unter Windows unterstützen
mkdir()undmakedirs()jetzt einen mode-Wert von0o700, um Zugriffsrechte auf das neue Verzeichnis anzuwenden. Das wirkt sich stillschweigend auftempfile.mkdtemp()aus und entschärft CVE 2024-4030. Andere Werte für mode werden weiterhin übergangen. (Beigetragen von Steve Dower in gh-118486.)posix_spawn()nimmt für das Argument env jetztNonean, wodurch der neu gestartete Prozess die Umgebung des aktuellen Prozesses verwendet. (Beigetragen von Jakub Kulik in gh-113119.)posix_spawn()darf im Parameter file_actions jetzt das AttributPOSIX_SPAWN_CLOSEFROMverwenden, auf Plattformen, dieposix_spawn_file_actions_addclosefrom_np()unterstützen. (Beigetragen von Jakub Kulik in gh-113117.)
os.path¶
isreserved()ist hinzugekommen, um zu prüfen, ob ein Pfad auf dem aktuellen System vorbehalten ist. Diese Funktion ist nur unter Windows verfügbar. (Beigetragen von Barney Gale in gh-88569.)Unter Windows gelten Pfade, die mit genau einem Schrägstrich (
\oder/) beginnen, fürisabs()nicht mehr als absolut. (Beigetragen von Barney Gale und Jon Foster in gh-44626.)realpath()löst Dateinamen im MS-DOS-Stil jetzt auch dann auf, wenn die Datei nicht erreichbar ist. (Beigetragen von Moonsik Park in gh-82367.)
pathlib¶
UnsupportedOperationist hinzugekommen. Sie wird an der Stelle vonNotImplementedErrorausgelöst, wenn eine Pfadoperation nicht unterstützt wird. (Beigetragen von Barney Gale in gh-89812.)Ein neuer Konstruktor ist hinzugekommen, um
Path-Objekte aus „file“-URIs (file:///) zu erzeugen:Path.from_uri(). (Beigetragen von Barney Gale in gh-107465.)PurePath.full_match()ist hinzugekommen, um Pfade mit Jokerzeichen im Shell-Stil abzugleichen, einschließlich des rekursiven Jokerzeichens „**“. (Beigetragen von Barney Gale in gh-73435.)Das Klassenattribut
PurePath.parserist hinzugekommen. Es hält die Umsetzung vonos.pathfest, die für das tief liegende Auswerten und Zusammensetzen von Pfaden verwendet wird. Das ist entwederposixpathoderntpath.Das nur über Schlüsselwort angebbare Argument recurse_symlinks ist zu
Path.glob()undrglob()hinzugekommen. (Beigetragen von Barney Gale in gh-77609.)Path.glob()undrglob()geben jetzt Dateien und Verzeichnisse zurück, wenn ihnen ein Muster übergeben wird, das auf „**“ endet. Vorher wurden nur Verzeichnisse zurückgegeben. (Beigetragen von Barney Gale in gh-70303.)Das nur über Schlüsselwort angebbare Argument follow_symlinks ist zu
Path.is_file,Path.is_dir,Path.owner()undPath.group()hinzugekommen. (Beigetragen von Barney Gale in gh-105793 und Kamil Turek in gh-107962.)
pdb¶
breakpoint()undset_trace()gehen jetzt unmittelbar in den Debugger, nicht erst bei der nächsten auszuführenden Codezeile. Diese Änderung verhindert, dass der Debugger außerhalb des Kontexts anhält, wennbreakpoint()am Ende des Kontexts steht. (Beigetragen von Tian Gao in gh-118579.)sys.path[0]wird nicht mehr durch das Verzeichnis des untersuchten Skripts ersetzt, wennsys.flags.safe_pathgesetzt ist. (Beigetragen von Tian Gao und Christian Walther in gh-111762.)zipappwird jetzt als Ziel der Fehlersuche unterstützt. (Beigetragen von Tian Gao in gh-118501.)Bei der Fehlersuche nach dem Absturz mit
pm()lässt sich jetzt zwischen verketteten Ausnahmen wechseln, über den neuen Pdb-Befehlexceptions [exc_number]. (Beigetragen von Matthias Bussonnier in gh-106676.)Ausdrücke und Anweisungen, deren Anfang ein pdb-Befehl ist, werden jetzt richtig erkannt und ausgeführt. (Beigetragen von Tian Gao in gh-108464.)
queue¶
Queue.shutdownundShutDownsind hinzugekommen, um das Beenden einer Warteschlange zu steuern. (Beigetragen von Laurie Opperman und Yves Duprat in gh-104750.)
random¶
Eine Befehlszeilenschnittstelle ist hinzugekommen. (Beigetragen von Hugo van Kemenade in gh-118131.)
re¶
re.errorist zur besseren Verständlichkeit inPatternErrorumbenannt.re.errorbleibt aus Gründen der Rückwärtsverträglichkeit erhalten.
shutil¶
site¶
.pth-Dateien werden jetzt zuerst mit UTF-8 dekodiert und, wenn das fehlschlägt, mit der Locale-Kodierung. (Beigetragen von Inada Naoki in gh-117802.)
sqlite3¶
Eine
ResourceWarningwird jetzt ausgegeben, wenn einConnection-Objekt nicht ausdrücklichgeschlossenwird. (Beigetragen von Erlend E. Aasland in gh-105539.)Der nur über Schlüsselwort angebbare Parameter filter ist zu
Connection.iterdump()hinzugekommen, um die auszugebenden Datenbankobjekte zu filtern. (Beigetragen von Mariusz Felisiak in gh-91602.)
ssl¶
Die API
create_default_context()enthält jetztVERIFY_X509_PARTIAL_CHAINundVERIFY_X509_STRICTin ihren voreingestellten Schaltern.Bemerkung
VERIFY_X509_STRICTkann Zertifikate zurückweisen, die älter als RFC 5280 oder unsauber sind und die die darunterliegende OpenSSL-Umsetzung sonst annehmen würde. Das abzuschalten ist nicht empfohlen, möglich ist es aber so:import ssl ctx = ssl.create_default_context() ctx.verify_flags &= ~ssl.VERIFY_X509_STRICT
(Beigetragen von William Woodruff in gh-112389.)
statistics¶
kde()ist für die Kerndichteschätzung hinzugekommen. Damit lässt sich aus einer festen Anzahl diskreter Stichproben eine stetige Wahrscheinlichkeitsdichtefunktion schätzen. (Beigetragen von Raymond Hettinger in gh-115863.)kde_random()ist hinzugekommen, um aus einer geschätzten Wahrscheinlichkeitsdichtefunktion zu ziehen, diekde()erzeugt hat. (Beigetragen von Raymond Hettinger in gh-115863.)
subprocess¶
Das Modul
subprocessverwendet die Funktionposix_spawn()jetzt in mehr Fällen.Insbesondere wird
posix_spawn()verwendet, wenn close_fdsTrueist (die Voreinstellung) und die C-Bibliothekposix_spawn_file_actions_addclosefrom_np()bereitstellt, was auf neuere Versionen von Linux, FreeBSD und Solaris zutrifft. Unter Linux sollte das ähnlich schnell sein wie der bisherige Code auf der Grundlage vonvfork().Ein privater Schalter
subprocess._USE_POSIX_SPAWNlässt sich aufFalsesetzen, wennsubprocessdazu gezwungen werden muss,posix_spawn()nie zu verwenden. Bitte melde deinen Grund und die Einzelheiten zu deiner Plattform im Fehlerverfolgungssystem, wenn du das setzt, damit wir die Auswahllogik für alle verbessern können. (Beigetragen von Jakub Kulik in gh-113117.)
sys¶
Die Funktion
_is_interned()ist hinzugekommen, um zu prüfen, ob eine Zeichenkette interniert wurde. Es ist nicht zugesagt, dass diese Funktion in allen Implementierungen von Python vorhanden ist. (Beigetragen von Serhiy Storchaka in gh-78573.)
tempfile¶
Unter Windows begrenzt der von
tempfile.mkdtemp()verwendete voreingestellte Modus0o700wegen der Änderungen anos.mkdir()jetzt den Zugriff auf das neue Verzeichnis. Das entschärft CVE 2024-4030. (Beigetragen von Steve Dower in gh-118486.)
time¶
Unter Windows verwendet
monotonic()jetzt die UhrQueryPerformanceCounter()mit einer Auflösung von 1 Mikrosekunde statt der UhrGetTickCount64(), die eine Auflösung von 15,6 Millisekunden hat. (Beigetragen von Victor Stinner in gh-88494.)Unter Windows verwendet
time()jetzt die UhrGetSystemTimePreciseAsFileTime()mit einer Auflösung von 1 Mikrosekunde statt der UhrGetSystemTimeAsFileTime(), die eine Auflösung von 15,6 Millisekunden hat. (Beigetragen von Victor Stinner in gh-63207.)
tkinter¶
tkinter-Widget-Methoden sind hinzugekommen:tk_busy_hold(),tk_busy_configure(),tk_busy_cget(),tk_busy_forget(),tk_busy_current()undtk_busy_status(). (Beigetragen von Miguel, klappnase und Serhiy Storchaka in gh-72684.)Die
tkinter-Widget-Methodewm_attributes()nimmt jetzt den Attributnamen ohne vorangestelltes Minus an, um Fensterattribute abzufragen, etwaw.wm_attributes('alpha'), und erlaubt es, zu setzende Attribute und Werte als Schlüsselwortargumente anzugeben, etwaw.wm_attributes(alpha=0.5). (Beigetragen von Serhiy Storchaka in gh-43457.)wm_attributes()darf Attribute jetzt alsdictzurückgeben, über den neuen optionalen, nur über Schlüsselwort angebbaren Parameter return_python_dict. (Beigetragen von Serhiy Storchaka in gh-43457.)Text.count()darf jetzt ein einfachesintzurückgeben, wenn der neue optionale, nur über Schlüsselwort angebbare Parameter return_ints verwendet wird. Andernfalls wird der einzelne Zählwert als Ein-Element-Tupel oder alsNonezurückgegeben. (Beigetragen von Serhiy Storchaka in gh-97928.)Der Elementtyp „vsapi“ wird in der Methode
element_create()vontkinter.ttk.Styleunterstützt. (Beigetragen von Serhiy Storchaka in gh-68166.)Die Methode
after_info()für Tkinter-Widgets ist hinzugekommen. (Beigetragen von Cheryl Sabella in gh-77020.)Eine neue Methode
copy_replace()ist zuPhotoImagehinzugekommen, um einen Bereich von einem Bild in ein anderes zu kopieren, wahlweise mit Pixelvergrößerung, Unterabtastung oder beidem. (Beigetragen von Serhiy Storchaka in gh-118225.)Der Parameter from_coords ist zu den
PhotoImage-Methodencopy(),zoom()undsubsample()hinzugekommen. Die Parameter zoom und subsample sind zurPhotoImage-Methodecopy()hinzugekommen. (Beigetragen von Serhiy Storchaka in gh-118225.)Die
PhotoImage-Methodenread(), um ein Bild aus einer Datei zu lesen, unddata(), um die Bilddaten zu holen, sind hinzugekommen. Die Parameter background und grayscale sind zur Methodewrite()hinzugekommen. (Beigetragen von Serhiy Storchaka in gh-118271.)
Traceback¶
Das Attribut
exc_type_strist zuTracebackExceptionhinzugekommen. Es enthält eine Zeichenkettendarstellung des exc_type. Das Attributexc_type, das das Typobjekt selbst enthält, ist als veraltet markiert. Der Parameter save_exc_type (VoreinstellungTrue) ist hinzugekommen, um anzugeben, obexc_typegespeichert werden soll. (Beigetragen von Irit Katriel in gh-112332.)Ein neuer, nur über Schlüsselwort angebbarer Parameter show_group ist zu
TracebackException.format_exception_only()hinzugekommen, um die verschachtelten Ausnahmen einerBaseExceptionGroup-Instanz (rekursiv) zu formatieren. (Beigetragen von Irit Katriel in gh-105292.)
types¶
SimpleNamespacedarf jetzt ein einzelnes positionsbezogenes Argument annehmen, um die Argumente des Namensraums vorzubelegen. Dieses Argument muss entweder ein Mapping oder ein Iterable von Schlüssel-Wert-Paaren sein. (Beigetragen von Serhiy Storchaka in gh-108191.)
typing¶
PEP 705:
ReadOnlyist hinzugekommen, ein besonderes Typing-Konstrukt, um ein Element einesTypedDictfür Typprüfer als nur lesbar zu kennzeichnen.PEP 742:
TypeIsist hinzugekommen, ein Typing-Konstrukt, mit dem sich einem Typprüfer mitteilen lässt, wie er einen Typ einengen soll.NoDefaultist hinzugekommen, ein Wächterobjekt, das die Voreinstellungen einiger Parameter im Modultypingdarstellt. (Beigetragen von Jelle Zijlstra in gh-116126.)get_protocol_members()ist hinzugekommen, um die Menge der Mitglieder zurückzugeben, die eintyping.Protocoldefinieren. (Beigetragen von Jelle Zijlstra in gh-104873.)is_protocol()ist hinzugekommen, um zu prüfen, ob eine Klasse einProtocolist. (Beigetragen von Jelle Zijlstra in gh-104873.)ClassVardarf jetzt inFinalverschachtelt werden und umgekehrt. (Beigetragen von Mehdi Drissi in gh-89547.)
unicodedata¶
Die Unicode-Datenbank ist auf Version 15.1.0 aktualisiert. (Beigetragen von James Gerity in gh-109559.)
venv¶
Unterstützung dafür, im Verzeichnis einer virtuellen Umgebung Ignorier-Dateien für die Versionsverwaltung (SCM) zu erzeugen, ist hinzugekommen. Standardmäßig wird Git unterstützt. Über die API ist es ausdrücklich einzuschalten, und sie lässt sich für weitere Versionsverwaltungen erweitern (
EnvBuilderundcreate()). Über die Befehlszeile lässt es sich mit--without-scm-ignore-filesabschalten. (Beigetragen von Brett Cannon in gh-108125.)
warnings¶
PEP 702: Der neue Dekorator
warnings.deprecated()bietet einen Weg, Abkündigungen an einen statischen Typprüfer zu melden und bei der Verwendung als veraltet markierter Klassen und Funktionen zu warnen. Zur Laufzeit kann außerdem eineDeprecationWarningausgegeben werden, wenn eine dekorierte Funktion oder Klasse verwendet wird. (Beigetragen von Jelle Zijlstra in gh-104003.)
xml¶
Das aufgeschobene erneute Auswerten in Expat ab 2.6.0 (CVE 2023-52425) lässt sich jetzt steuern. Dazu sind fünf neue Methoden hinzugekommen:
xml.sax.expatreader.ExpatParser.flush()
(Beigetragen von Sebastian Pipping in gh-115623.)
Die Methode
close()ist für den Iterator hinzugekommen, deniterparse()zurückgibt, um ausdrücklich aufzuräumen. (Beigetragen von Serhiy Storchaka in gh-69893.)
zipimport¶
Optimierungen¶
Bei mehreren Modulen der Standardbibliothek ist die Importzeit deutlich besser geworden. Die Importzeit des Moduls
typingist zum Beispiel um etwa ein Drittel gesunken, weil die Abhängigkeiten vonreundcontextlibentfallen sind. Weitere Module, die schneller importiert werden, sindemail.utils,enum,functools,importlib.metadataundthreading. (Beigetragen von Alex Waygood, Shantanu Jain, Adam Turner, Daniel Hollas und anderen in gh-109653.)textwrap.indent()ist bei großen Eingaben jetzt etwa 30 % schneller als vorher. (Beigetragen von Inada Naoki in gh-107369.)Das Modul
subprocessverwendet die Funktionposix_spawn()jetzt in mehr Fällen, darunter auf vielen neueren Plattformen auch dann, wenn close_fdsTrueist (die Voreinstellung). Das sollte beim Starten von Prozessen unter FreeBSD und Solaris einen merklichen Geschwindigkeitsgewinn bringen. Einzelheiten im Abschnitt subprocess weiter oben. (Beigetragen von Jakub Kulik in gh-113117.)
Entfernte Module und APIs¶
PEP 594: „leere Batterien“ aus der Standardbibliothek entfernt¶
PEP 594 hat vorgeschlagen, 19 Module aus der Standardbibliothek zu entfernen, die wegen ihres überholten, veralteten oder unsicheren Zustands umgangssprachlich „leere Batterien“ genannt werden. Alle folgenden Module waren in Python 3.11 als veraltet markiert und sind jetzt entfernt:
aifcstandard-aifc: Verwende die Weiterverteilung der Bibliothek
aifcvon PyPI.
audioopaudioop-lts: Verwende die Bibliothek
audioop-ltsvon PyPI.
chunkstandard-chunk: Verwende die Weiterverteilung der Bibliothek
chunkvon PyPI.
cgiundcgitbcgi.FieldStoragelässt sich beiGET- undHEAD-Anfragen üblicherweise durchurllib.parse.parse_qsl()ersetzen und beiPOST- undPUT-Anfragen durch das Modulemail.messageoder die Bibliothek multipart.cgi.parse()lässt sich ersetzen, indem manurllib.parse.parse_qs()unmittelbar auf die gewünschte Abfragezeichenkette anwendet – außer wenn die Eingabemultipart/form-dataist. Dann ist zu ersetzen, wie es weiter unten fürcgi.parse_multipart()beschrieben ist.cgi.parse_header()lässt sich durch die Funktionalität des Paketsemailersetzen, das dieselben MIME-RFCs umsetzt. Zum Beispiel mitemail.message.EmailMessage:from email.message import EmailMessage msg = EmailMessage() msg['content-type'] = 'application/json; charset="utf8"' main, params = msg.get_content_type(), msg['content-type'].params
cgi.parse_multipart()lässt sich durch die Funktionalität des Paketsemailersetzen, das dieselben MIME-RFCs umsetzt, oder durch die Bibliothek multipart. Zum Beispiel durch die Klassenemail.message.EmailMessageundemail.message.Message.standard-cgi: und standard-cgitb: Verwende die Weiterverteilung der Bibliotheken
cgiundcgitbvon PyPI.
cryptund die private Erweiterung_crypt. Das Modulhashlibkann ein passender Ersatz sein, wenn es nur darum geht, einen Wert zu hashen. Andernfalls stehen auf PyPI verschiedene Bibliotheken von Dritten bereit:bcrypt: modernes Hashen von Passwörtern für deine Software und deine Server.
argon2-cffi: der sichere Passwort-Hash-Algorithmus Argon2.
legacycrypt:
ctypes-Hülle um den POSIX-Bibliotheksaufruf crypt und die zugehörige Funktionalität.crypt_r: Abspaltung des Moduls
crypt, Hülle um den Bibliotheksaufruf crypt_r(3) und die zugehörige Funktionalität.standard-crypt und deprecated-crypt-alternative: Verwende die Weiterverteilung von
cryptund die Neuumsetzung von_cryptvon PyPI.
imghdr: Als Ersatz sollten die Bibliotheken filetype, puremagic oder python-magic verwendet werden. Zum Beispiel lässt sich die Funktionpuremagic.what()an der Stelle der Funktionimghdr.what()für alle Dateiformate verwenden, dieimghdrunterstützt hat.standard-imghdr: Verwende die Weiterverteilung der Bibliothek
imghdrvon PyPI.
mailcap: Verwende stattdessen das Modulmimetypes.standard-mailcap: Verwende die Weiterverteilung der Bibliothek
mailcapvon PyPI.
msilibnisnntplib: Verwende stattdessen die Bibliothek pynntp von PyPI.standard-nntplib: Verwende die Weiterverteilung der Bibliothek
nntplibvon PyPI.
ossaudiodev: Verwende zur Audio-Wiedergabe stattdessen die Bibliothek pygame von PyPI.pipes: Verwende stattdessen das Modulsubprocess. Verwendeshlex.quote()an der Stelle der nicht dokumentierten Funktionpipes.quote.standard-pipes: Verwende die Weiterverteilung der Bibliothek
pipesvon PyPI.
sndhdr: Als Ersatz sollten die Bibliotheken filetype, puremagic oder python-magic verwendet werden.standard-sndhdr: Verwende die Weiterverteilung der Bibliothek
sndhdrvon PyPI.
spwd: Verwende stattdessen die Bibliothek python-pam von PyPI.sunaustandard-sunau: Verwende die Weiterverteilung der Bibliothek
sunauvon PyPI.
telnetlib: Verwende stattdessen die Bibliotheken telnetlib3 oder Exscript von PyPI.standard-telnetlib: Verwende die Weiterverteilung der Bibliothek
telnetlibvon PyPI.
uu: Verwende als neuzeitliche Alternative stattdessen das Modulbase64.standard-uu: Verwende die Weiterverteilung der Bibliothek
uuvon PyPI.
xdrlibstandard-xdrlib: Verwende die Weiterverteilung der Bibliothek
xdrlibvon PyPI.
(Beigetragen von Victor Stinner und Zachary Ware in gh-104773 und gh-104780.)
2to3¶
Das Programm 2to3 und das Modul
lib2to3sind entfernt. Sie waren in Python 3.11 als veraltet markiert. (Beigetragen von Victor Stinner in gh-104780.)
builtins¶
Die Unterstützung für verkettete
classmethod-Deskriptoren (eingeführt in gh-63272) ist entfernt. Damit lassen sich keine anderen Deskriptoren mehr einhüllen, etwaproperty. Der Grundentwurf dieses Features war fehlerhaft und hat zu mehreren Problemen geführt. Um eineclassmethod„durchzureichen“, kommt das Attribut__wrapped__in Betracht, das in Python 3.10 hinzugekommen ist. (Beigetragen von Raymond Hettinger in gh-89519.)Ein
RuntimeErrorwird ausgelöst, wennframe.clear()auf einem angehaltenen Rahmen aufgerufen wird (wie es bei einem gerade ausgeführten Rahmen schon immer der Fall war). (Beigetragen von Irit Katriel in gh-79932.)
configparser¶
Die nicht dokumentierte Klasse
LegacyInterpolationist entfernt. Sie war seit Python 3.2 im Docstring und seit Python 3.11 zur Laufzeit als veraltet markiert. (Beigetragen von Hugo van Kemenade in gh-104886.)
importlib.metadata¶
Der als veraltet markierte Zugriff über Indizierung (
__getitem__()) auf EntryPoint-Objekte ist entfernt. (Beigetragen von Jason R. Coombs in gh-113175.)
locale¶
Die Funktion
locale.resetlocale()ist entfernt. Sie war in Python 3.11 als veraltet markiert. Verwende stattdessenlocale.setlocale(locale.LC_ALL, ""). (Beigetragen von Victor Stinner in gh-104783.)
opcode¶
opcode.ENABLE_SPECIALIZATIONist nach_opcode.ENABLE_SPECIALIZATIONumgezogen. Dieses Feld kam in 3.12 hinzu, war nie dokumentiert und ist nicht für die Verwendung von außen gedacht. (Beigetragen von Irit Katriel in gh-105481.)opcode.is_pseudo(),opcode.MIN_PSEUDO_OPCODEundopcode.MAX_PSEUDO_OPCODEsind entfernt. Sie kamen in Python 3.12 hinzu, waren aber weder dokumentiert noch überdiszugänglich und nicht für die Verwendung von außen gedacht. (Beigetragen von Irit Katriel in gh-105481.)
optparse¶
Dieses Modul gilt nicht mehr als sanft abgekündigt. Für neue Projekte, die keine Bibliothek eines Dritten zur Verarbeitung von Befehlszeilenargumenten verwenden, bleibt
argparsevorzuziehen. Es gibt aber Eigenheiten in der Arbeitsweise vonargparse, die dazu führen, dass das tiefer liegende Moduloptparsedie bessere Grundlage dafür sein kann, Bibliotheken zur Verarbeitung von Argumenten zu schreiben und Befehlszeilenanwendungen umzusetzen, die sich strenger alsargparsean die verschiedenen Unix-Gepflogenheiten der Befehlszeilenverarbeitung halten, die auf das Verhalten der C-Funktiongetopt()zurückgehen . (Beigetragen von Alyssa Coghlan und Serhiy Storchaka in gh-126180.)
pathlib¶
re¶
Die nicht dokumentierte, als veraltet markierte und fehlerhafte Funktion
re.template()und der Schalterre.TEMPLATE/re.Tsind entfernt. (Beigetragen von Serhiy Storchaka und Nikita Sobolev in gh-105687.)
tkinter.tix¶
Das Modul
tkinter.tixist entfernt. Es war in Python 3.6 als veraltet markiert. Die Tix-Bibliothek eines Dritten, die das Modul eingehüllt hat, wird nicht mehr gepflegt. (Beigetragen von Zachary Ware in gh-75552.)
turtle¶
Die Methode
RawTurtle.settiltangle()ist entfernt. Sie war seit Python 3.1 in der Dokumentation und seit Python 3.11 zur Laufzeit als veraltet markiert. (Beigetragen von Hugo van Kemenade in gh-104876.)
typing¶
Die Namensräume
typing.ioundtyping.resind entfernt. Sie waren seit Python 3.8 als veraltet markiert. Die Elemente aus diesen Namensräumen lassen sich unmittelbar aus dem Modultypingimportieren. (Beigetragen von Sebastian Rittau in gh-92871.)Die Möglichkeit,
TypedDict-Typen über Schlüsselwortargumente zu erzeugen, ist entfernt. Sie war in Python 3.11 als veraltet markiert. (Beigetragen von Tomas Roun in gh-104786.)
unittest¶
Die folgenden
unittest-Funktionen sind entfernt. Sie waren in Python 3.11 als veraltet markiert:unittest.findTestCases()unittest.makeSuite()unittest.getTestCaseNames()
Verwende stattdessen die Methoden von
TestLoader:(Beigetragen von Hugo van Kemenade in gh-104835.)
Die ungetestete und nicht dokumentierte Methode
TestProgram.usageExit()ist entfernt. Sie war in Python 3.11 als veraltet markiert. (Beigetragen von Hugo van Kemenade in gh-104992.)
urllib¶
Die Parameter cafile, capath und cadefault der Funktion
urllib.request.urlopen()sind entfernt. Sie waren in Python 3.6 als veraltet markiert. Verwende stattdessen den Parameter context mit einerSSLContext-Instanz. Mit der Funktionssl.SSLContext.load_cert_chain()lassen sich bestimmte Zertifikate laden. Alternativ lässt manssl.create_default_context()die vom Betriebssystem als vertrauenswürdig eingestuften Zertifikate der Zertifizierungsstellen (CA) auswählen. (Beigetragen von Victor Stinner in gh-105382.)
webbrowser¶
Die ungetestete und nicht dokumentierte Klasse
MacOSXist entfernt. Sie war in Python 3.11 als veraltet markiert. Verwende stattdessen die KlasseMacOSXOSAScript(in Python 3.2 hinzugekommen). (Beigetragen von Hugo van Kemenade in gh-104804.)Das als veraltet markierte Attribut
MacOSXOSAScript._nameist entfernt. Verwende stattdessen das AttributMacOSXOSAScript.name. (Beigetragen von Nikita Sobolev in gh-105546.)
Neu als veraltet markiert¶
-
Der Formatcode
'u'(wchar_t) ist zur Laufzeit als veraltet markiert. Dieser Formatcode war seit Python 3.3 in der Dokumentation als veraltet markiert und wird in Python 3.16 entfernt. Verwende für Unicode-Zeichen stattdessen den Formatcode'w'(Py_UCS4). (Beigetragen von Hugo van Kemenade in gh-80480.)
-
Die nicht dokumentierte Funktion
SetPointerType()ist als veraltet markiert und wird in Python 3.15 entfernt. (Beigetragen von Victor Stinner in gh-105733.)Die Funktion
ARRAY()ist zugunsten der Multiplikationtype * lengthsanft abgekündigt. (Beigetragen von Victor Stinner in gh-105733.)
dis:-
Nicht ganzzahlige Zahlen als Argumente für Funktionen und Methoden des Moduls
gettext, die Pluralformen berücksichtigen, sind als veraltet markiert, auch wenn keine Übersetzung gefunden wurde. (Beigetragen von Serhiy Storchaka in gh-88434.)
glob:Die nicht dokumentierten Funktionen
glob0()undglob1()sind als veraltet markiert. Verwende stattdessenglob()und übergib dem Parameter root_dir ein pfadähnliches Objekt, das das Wurzelverzeichnis angibt. (Beigetragen von Barney Gale in gh-117337.)
-
CGIHTTPRequestHandlerist als veraltet markiert und wird in Python 3.15 entfernt. Prozessbasierte CGI-HTTP-Server sind schon sehr lange aus der Mode. Dieser Code war überholt, ungepflegt und selten verwendet. Er bringt eine hohe Gefahr für Sicherheits- und Funktionsfehler mit. (Beigetragen von Gregory P. Smith in gh-109096.)Der Schalter
--cgider Befehlszeilenschnittstelle python -m http.server ist als veraltet markiert und wird in Python 3.15 entfernt. (Beigetragen von Gregory P. Smith in gh-109096.)
-
Dateipfade als Argumente für
guess_type()sind sanft abgekündigt. Verwende stattdessenguess_file_type(). (Beigetragen von Serhiy Storchaka in gh-66543.)
re:Die optionalen Argumente maxsplit, count oder flags als positionsbezogene Argumente an die Modulfunktionen
split(),sub()undsubn()zu übergeben ist als veraltet markiert. Diese Parameter werden in einer künftigen Python-Version nur noch über Schlüsselwort angebbar sein. (Beigetragen von Serhiy Storchaka in gh-56166.)
-
.PurePath.is_reserved()ist als veraltet markiert und wird in Python 3.15 entfernt. Verwendeos.path.isreserved(), um unter Windows vorbehaltene Pfade zu erkennen. (Beigetragen von Barney Gale in gh-88569.)
-
platform.java_ver()ist als veraltet markiert und wird in Python 3.15 entfernt. Diese Funktion ist nur für die Unterstützung von Jython nützlich, hat eine verwirrende API und ist kaum getestet. (Beigetragen von Nikita Sobolev in gh-116349.)
-
Die nicht dokumentierte Funktion
ispackage()ist als veraltet markiert. (Beigetragen von Zackery Spytz in gh-64020.)
-
Mehr als ein positionsbezogenes Argument an die Funktion
connect()und an den Konstruktor vonConnectionzu übergeben ist als veraltet markiert. Die übrigen Parameter werden in Python 3.15 nur noch über Schlüsselwort angebbar sein. (Beigetragen von Erlend E. Aasland in gh-107948.)Namen, Anzahl der Argumente und das aufrufbare Objekt als Schlüsselwortargumente an
Connection.create_function()undConnection.create_aggregate()zu übergeben ist als veraltet markiert. Diese Parameter werden in Python 3.15 nur noch positionsbezogen angebbar sein. (Beigetragen von Erlend E. Aasland in gh-108278.)Das aufrufbare Rückrufobjekt über Schlüsselwort an die
Connection-Methodenset_authorizer(),set_progress_handler()undset_trace_callback()zu übergeben ist als veraltet markiert. Die aufrufbaren Rückrufobjekte werden in Python 3.15 nur noch positionsbezogen angebbar sein. (Beigetragen von Erlend E. Aasland in gh-108278.)
sys:Die Funktion
_enablelegacywindowsfsencoding()ist als veraltet markiert und wird in Python 3.16 entfernt. Verwende stattdessen die UmgebungsvariablePYTHONLEGACYWINDOWSFSENCODING. (Beigetragen von Inada Naoki in gh-73427.)
-
Das nicht dokumentierte und unbenutzte Attribut
TarFile.tarfileist als veraltet markiert und wird in Python 3.16 entfernt. (Beigetragen in gh-115256.)
-
Das Attribut
TracebackException.exc_typeist als veraltet markiert. Verwende stattdessenTracebackException.exc_type_str. (Beigetragen von Irit Katriel in gh-112332.)
-
Die nicht dokumentierte Schreibweise mit Schlüsselwortargumenten, um
NamedTuple-Klassen zu erzeugen (etwaPoint = NamedTuple("Point", x=int, y=int)), ist als veraltet markiert und wird in Python 3.15 entfernt. Verwende stattdessen die klassenbasierte oder die funktionale Schreibweise. (Beigetragen von Alex Waygood in gh-105566.)Den Parameter fields beim Erzeugen einer
NamedTuple- odertyping.TypedDict-Klasse weglassen ist als veraltet markiert, ebensoNonean den Parameter fields beider Typen zu übergeben. Python 3.15 wird für den Parameter fields eine gültige Folge verlangen. Um eine NamedTuple-Klasse ohne Felder zu erzeugen, verwendeclass NT(NamedTuple): passoderNT = NamedTuple("NT", ()). Um eine TypedDict-Klasse ohne Felder zu erzeugen, verwendeclass TD(TypedDict): passoderTD = TypedDict("TD", {}). (Beigetragen von Alex Waygood in gh-105566 und gh-105570.)Die Dekoratorfunktion
@typing.no_type_check_decoratorist als veraltet markiert und wird in Python 3.15 entfernt. Nach acht Jahren im Modultypingwird sie noch von keinem größeren Typprüfer unterstützt. (Beigetragen von Alex Waygood in gh-106309.)typing.AnyStrist als veraltet markiert. In Python 3.16 wird es austyping.__all__entfernt, und beim Importieren oder beim Zugriff wird zur Laufzeit eineDeprecationWarningausgegeben. Vollständig entfernt wird es in Python 3.18. Verwende stattdessen die neue Schreibweise für Typparameter. (Beigetragen von Michael The in gh-107116.)
wave:Die Methoden
getmark(),setmark()undgetmarkers()der KlassenWave_readundWave_writesind als veraltet markiert und werden in Python 3.15 entfernt. (Beigetragen von Victor Stinner in gh-105096.)
Geplante Entfernung in Python 3.14¶
argparse: Die Parameter type, choices und metavar vonargparse.BooleanOptionalActionsind veraltet und werden in Version 3.14 entfernt. (Beitrag von Nikita Sobolev unter gh-92248.)ast: Die folgenden Funktionen sind seit Python 3.8 in der Dokumentation als veraltet gekennzeichnet, lösen nun bei Zugriff oder Verwendung zur Laufzeit eine „DeprecationWarning“ aus und werden in Python 3.14 entfernt:ast.Numast.Strast.Bytesast.NameConstantast.Ellipsis
Verwende stattdessen
ast.Constant. (Beigetragen von Serhiy Storchaka in gh-90953.)-
Die „Child-Watcher“-Klassen
asyncio.MultiLoopChildWatcher,asyncio.FastChildWatcher,asyncio.AbstractChildWatcherundasyncio.SafeChildWatchersind veraltet und werden in Python 3.14 entfernt. (Beitrag von Kumar Aditya unter gh-94597.)asyncio.set_child_watcher(),asyncio.get_child_watcher(),asyncio.AbstractEventLoopPolicy.set_child_watcher()undasyncio.AbstractEventLoopPolicy.get_child_watcher()sind veraltet und werden in Python 3.14 entfernt. (Beitrag von Kumar Aditya unter gh-94597.)Die Methode „
get_event_loop()“ der Standard-Ereignisschleifenrichtlinie löst nun eine „DeprecationWarning“ aus, wenn derzeit keine Ereignisschleife festgelegt ist und sie beschließt, eine solche zu erstellen. (Beitrag von Serhiy Storchaka und Guido van Rossum unter gh-100160.)
email: Der Parameter isdst inemail.utils.localtime()wurde als veraltet markiert. (Beitrag von Alan Williams unter gh-72346.)importlib.abcveraltete Klassen:importlib.abc.ResourceReaderimportlib.abc.Traversableimportlib.abc.TraversableResources
Verwende stattdessen
importlib.resources.abcKlassen:(Beigetragen von Jason R. Coombs und Hugo van Kemenade in gh-93963.)
itertoolsboten eine undokumentierte, ineffiziente, seit jeher fehleranfällige und inkonsistente Unterstützung für copy-, deepcopy- und pickle-Operationen. Diese wird in Version 3.14 entfernt, um den Codeumfang und den Wartungsaufwand deutlich zu reduzieren. (Beitrag von Raymond Hettinger unter gh-101588.)multiprocessing: Die Standard-Startmethode wird unter Linux, BSD und anderen POSIX-Plattformen, die nicht macOS sind, auf eine sicherere Variante umgestellt, sofern dort derzeit „'fork'“ als Standard eingestellt ist (gh-84559). Das Hinzufügen einer Laufzeitwarnung hierzu wurde als zu störend erachtet, da davon ausgegangen wird, dass dies für den Großteil des Codes keine Rolle spielt. Verwende die APIs „get_context()“ oder „set_start_method()“, um explizit anzugeben, wann dein Code „'fork'“ erfordert. Siehe Contexts and start methods.pathlib:is_relative_to()undrelative_to(): Die Übergabe zusätzlicher Argumente ist veraltet.pkgutil: „pkgutil.find_loader()“ und „pkgutil.get_loader()“ lösen nun eine „DeprecationWarning“-Fehlermeldung aus. Verwende stattdessen „importlib.util.find_spec()“. (Beitrag von Nikita Sobolev unter gh-97850.)pty:master_open(): Verwendepty.openpty().slave_open(): Verwendepty.openpty().
-
versionundversion_info.execute()undexecutemany(), wenn benannte Platzhalter verwendet werden und parameters eine Sequenz anstelle einesdictist.
urllib: „urllib.parse.Quoter“ ist veraltet: Es war nicht als öffentliche API vorgesehen. (Beitrag von Gregory P. Smith unter gh-88168.)
Geplante Entfernung in Python 3.15¶
Das Importsystem:
__cached__an einem Modul zu setzen, ohne__spec__.cachedzu setzen, ist als veraltet markiert. In Python 3.15 wird__cached__vom Importsystem und von der Standardbibliothek nicht mehr gesetzt und nicht mehr berücksichtigt. (gh-97879)__package__an einem Modul zu setzen, ohne__spec__.parentzu setzen, ist als veraltet markiert. In Python 3.15 wird__package__vom Importsystem und von der Standardbibliothek nicht mehr gesetzt und nicht mehr berücksichtigt. (gh-97879)
-
Die nicht dokumentierte Funktion
ctypes.SetPointerType()ist seit Python 3.13 als veraltet markiert.
-
Die überholte und selten verwendete Klasse
CGIHTTPRequestHandlerist seit Python 3.13 als veraltet markiert. Es gibt keinen unmittelbaren Ersatz. Alles ist besser als CGI, um einen Webserver an einen Request-Handler anzubinden.Der Schalter
--cgider Befehlszeilenschnittstelle python -m http.server ist seit Python 3.13 als veraltet markiert.
-
Methode
load_module(): verwende stattdessenexec_module().
-
.PurePath.is_reserved()ist seit Python 3.13 als veraltet markiert. Verwendeos.path.isreserved(), um unter Windows vorbehaltene Pfade zu erkennen.
-
platform.java_ver()ist seit Python 3.13 als veraltet markiert. Diese Funktion ist nur für die Unterstützung von Jython nützlich, hat eine verwirrende API und ist kaum getestet.
-
Das Argument check_home von
sysconfig.is_python_build()ist seit Python 3.12 als veraltet markiert.
-
RLock()nimmt in Python 3.15 keine Argumente mehr an. Argumente zu übergeben ist seit Python 3.14 als veraltet markiert, denn die Python-Fassung erlaubt keine Argumente, während die C-Fassung beliebig viele positionsbezogene oder Schlüsselwortargumente annimmt und sie alle übergeht.
-
types.CodeType: Der Zugriff aufcodeobject.co_lnotabwurde in PEP 626 seit 3.10 als veraltet markiert und sollte in 3.12 entfernt werden, bekam dort aber erst eine richtigeDeprecationWarning. Entfernt werden kann er in 3.15. (Beigetragen von Nikita Sobolev in gh-101866.)
-
Die nicht dokumentierte Schreibweise mit Schlüsselwortargumenten, um
NamedTuple-Klassen zu erzeugen (zum BeispielPoint = NamedTuple("Point", x=int, y=int)), ist seit Python 3.13 als veraltet markiert. Verwende stattdessen die klassenbasierte oder die funktionale Schreibweise.Bei der funktionalen Schreibweise von
TypedDicts ist es seit Python 3.13 als veraltet markiert, dem Parameter fields keinen Wert zu übergeben (TD = TypedDict("TD")) oderNonezu übergeben (TD = TypedDict("TD", None)). Verwendeclass TD(TypedDict): passoderTD = TypedDict("TD", {}), um ein TypedDict ohne Felder zu erzeugen.Die Dekoratorfunktion
@typing.no_type_check_decoratorist seit Python 3.13 als veraltet markiert. Nach acht Jahren im Modultypingwird sie noch von keinem größeren Typprüfer unterstützt.
Module
sre_compile,sre_constantsundsre_parse.wave:Die Methoden
getmark(),setmark()undgetmarkers()der KlassenWave_readundWave_writesind seit Python 3.13 als veraltet markiert.
-
zipimport.zipimporter.load_module()ist seit Python 3.10 als veraltet markiert. Verwende stattdessenexec_module(). (gh-125746.)
Geplante Entfernung in Python 3.16¶
Das Importsystem:
Das Setzen von
__loader__für ein Modul, ohne__spec__.loaderzu setzen, ist veraltet. In Python 3.16 wird__loader__vom Importsystem und der Standardbibliothek weder gesetzt noch berücksichtigt.
-
Das Formatzeichen
'u'(wchar_t) ist seit Python 3.3 in der Dokumentation und seit Python 3.13 zur Laufzeit veraltet. Verwende für Unicode-Zeichen stattdessen das Formatzeichen'w'(Py_UCS4).
-
asyncio.iscoroutinefunction()ist veraltet und wird in Python 3.16 entfernt. Verwende stattdesseninspect.iscoroutinefunction(). (Beigetragen von Jiahao Li und Kumar Aditya in gh-122875.)Das Policy-System von
asyncioist veraltet und wird in Python 3.16 entfernt. Insbesondere die folgenden Klassen und Funktionen sind veraltet:Verwende
asyncio.run()oderasyncio.Runnermit loop_factory, um die gewünschte Implementierung der Ereignisschleife zu verwenden.Zum Beispiel, um
asyncio.SelectorEventLoopunter Windows zu verwenden:import asyncio async def main(): ... asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)
(Beigetragen von Kumar Aditya in gh-127949.)
-
Die bitweise Invertierung boolescher Typen,
~Trueoder~False, ist seit Python 3.12 veraltet, da sie überraschende und unintuitive Ergebnisse liefert (-2und-1). Verwende stattdessennot xfür die logische Negation eines booleschen Werts. In dem seltenen Fall, dass du die bitweise Invertierung der zugrunde liegenden Ganzzahl benötigst, konvertiere explizit nachint(~int(x)).
-
Der Aufruf der Python-Implementierung von
functools.reduce()mit function oder sequence als Schlüsselwortargumenten ist seit Python 3.14 veraltet.
-
Die Unterstützung eigener Logging-Handler mit dem Argument strm ist veraltet und soll in Python 3.16 entfernt werden. Definiere Handler stattdessen mit dem Argument stream. (Beigetragen von Mariusz Felisiak in gh-115032.)
-
Gültige Endungen für
mimetypes.MimeTypes.add_type()beginnen mit einem „.“ oder sind leer. Endungen ohne Punkt sind veraltet und lösen in Python 3.16 einenValueErroraus. (Beigetragen von Hugo van Kemenade in gh-75223.)
-
Die Ausnahme
ExecErrorist seit Python 3.14 veraltet. Sie wird seit Python 3.4 von keiner Funktion inshutilmehr verwendet und ist jetzt ein Alias vonRuntimeError.
-
Die Methode
Class.get_methodsist seit Python 3.14 veraltet.
sys:Die Funktion
_enablelegacywindowsfsencoding()ist seit Python 3.13 veraltet. Verwende stattdessen die UmgebungsvariablePYTHONLEGACYWINDOWSFSENCODING.
-
Die Funktion
sysconfig.expand_makefile_vars()ist seit Python 3.14 veraltet. Verwende stattdessen das Argumentvarsvonsysconfig.get_paths().
-
Das undokumentierte und ungenutzte Attribut
TarFile.tarfileist seit Python 3.13 veraltet.
Geplante Entfernung in Python 3.17¶
-
Aufrufe von
strptime()mit einer Formatzeichenkette, die%e(Tag des Monats) ohne Jahr enthält. Dies ist seit Python 3.15 veraltet. (Beigetragen von Stan Ulbrych in gh-70647.)
-
collections.abc.ByteStringsoll in Python 3.17 entfernt werden.Verwende
isinstance(obj, collections.abc.Buffer), um zur Laufzeit zu prüfen, obobjdas Buffer-Protokoll implementiert. Für Typannotationen verwende entwederBufferoder eine Union, die explizit die von deinem Code unterstützten Typen angibt (z. B.bytes | bytearray | memoryview).ByteStringwar ursprünglich als abstrakte Klasse gedacht, die als Obertyp sowohl vonbytesals auch vonbytearraydienen sollte. Da die ABC jedoch nie Methoden hatte, sagte das Wissen, dass ein Objekt eine Instanz vonByteStringist, nie etwas Nützliches über das Objekt aus. Andere gängige Puffertypen wiememoryviewwurden ebenfalls nie als Untertypen vonByteStringverstanden (weder zur Laufzeit noch von statischen Typprüfern).Weitere Details findest du in PEP 688. (Beigetragen von Shantanu Jain in gh-91896.)
-
Die Übergabe von Namen für encoding, die nicht ASCII sind, an
encodings.normalize_encoding()ist veraltet und soll in Python 3.17 entfernt werden. (Beigetragen von Stan Ulbrych in gh-136702.)
-
Das Modul
profileist veraltet und wird in Python 3.17 entfernt. Verwende stattdessenprofiling.tracing, das eine kompatible API bietet. Details findest du in PEP 799. (Beigetragen von Pablo Galindo und László Kiss Kollár in gh-138122.)
-
webbrowser.MacOSXOSAScriptist zugunsten vonwebbrowser.MacOSveraltet. (gh-137586)
-
Vor Python 3.14 wurden Unions im alten Stil mit der privaten Klasse
typing._UnionGenericAliasimplementiert. Diese Klasse wird für die Implementierung nicht mehr benötigt, wurde aber aus Gründen der Abwärtskompatibilität beibehalten. Ihre Entfernung ist für Python 3.17 geplant. Verwende dokumentierte Hilfsfunktionen zur Introspektion wietyping.get_origin()undtyping.get_args(), statt dich auf private Implementierungsdetails zu verlassen.typing.ByteString, seit Python 3.9 veraltet, soll in Python 3.17 entfernt werden.Verwende
isinstance(obj, collections.abc.Buffer), um zur Laufzeit zu prüfen, obobjdas Buffer-Protokoll implementiert. Für Typannotationen verwende entwederBufferoder eine Union, die explizit die von deinem Code unterstützten Typen angibt (z. B.bytes | bytearray | memoryview).ByteStringwar ursprünglich als abstrakte Klasse gedacht, die als Obertyp sowohl vonbytesals auch vonbytearraydienen sollte. Da die ABC jedoch nie Methoden hatte, sagte das Wissen, dass ein Objekt eine Instanz vonByteStringist, nie etwas Nützliches über das Objekt aus. Andere gängige Puffertypen wiememoryviewwurden ebenfalls nie als Untertypen vonByteStringverstanden (weder zur Laufzeit noch von statischen Typprüfern).Weitere Details findest du in PEP 688. (Beigetragen von Shantanu Jain in gh-91896.)
-
Bei
tkinter.Variablesollen die seit Python 3.14 veralteten Methodentrace_variable(),trace()(ein Alias vontrace_variable()),trace_vdelete()undtrace_vinfo()in Python 3.17 entfernt werden. Verwende stattdessentrace_add(),trace_remove()undtrace_info(). (Beigetragen von Serhiy Storchaka in gh-120220.)
Geplante Entfernung in Python 3.18¶
Geplante Entfernung in Python 3.19¶
-
Bei Konstruktoren von Hash-Funktionen wie
new()oder den direkt nach dem Hash benannten Konstruktoren wiemd5()undsha256()konnte dem optionalen Parameter für die Anfangsdaten in verschiedenen Implementierungen vonhashlibauch ein Schlüsselwortargument namensdata=oderstring=übergeben werden.Die Unterstützung des Schlüsselwortarguments
stringist jetzt veraltet und soll in Python 3.19 entfernt werden.Vor Python 3.13 wurde der Schlüsselwortparameter
stringje nach Backend-Implementierung der Hash-Funktionen nicht korrekt unterstützt. Übergib die Anfangsdaten für die größtmögliche Abwärtskompatibilität am besten als Positionsargument.
-
http.cookies.Morsel.js_output()ist veraltet und wird in Python 3.19 entfernt.http.cookies.BaseCookie.js_output()ist veraltet und wird in Python 3.19 entfernt.
-
Das Ändern von
IMAP4.fileist jetzt veraltet und soll in Python 3.19 entfernt werden. Diese Eigenschaft wird nicht mehr verwendet, und das Ändern ihres Werts schließt die aktuelle Datei nicht automatisch.Vor Python 3.14 wurde diese Eigenschaft verwendet, um die entsprechenden Methoden
read()undreadline()vonIMAP4zu implementieren. Das ist seitdem nicht mehr der Fall.
Geplante Entfernung in Python 3.20¶
Der Aufruf der Methode
__new__()vonstruct.Structohne das Argument format ist veraltet und wird in Python 3.20 entfernt. Der Aufruf der Methode__init__()auf bereits initialisierten Objekten vom TypStructist veraltet und wird in Python 3.20 entfernt.(Beigetragen von Sergey B Kirpichev und Serhiy Storchaka in gh-143715.)
Die Attribute
__version__,versionundVERSIONsind in diesen Modulen der Standardbibliothek veraltet und werden in Python 3.20 entfernt. Verwende stattdessensys.version_info.ctypes.macholibdecimal(stattdessendecimal.SPEC_VERSIONverwenden)logging(__date__ist ebenfalls veraltet)xml.sax.expatreader
(Beigetragen von Hugo van Kemenade und Stan Ulbrych in gh-76007.)
Durch PEP 829 festgelegte Abkündigungen:
Für Zeilen mit
importin Dateien vom Typname.pthwerden Warnungen ausgegeben.Dateien vom Typ
name.pthwerden standardmäßig nicht mehr in der Kodierung des Gebietsschemas dekodiert. Sie MÜSSEN inutf-8-sigkodiert sein.
(Beigetragen von Barry Warsaw in gh-148641.)
ast:Das Erzeugen von Instanzen abstrakter AST-Knoten (etwa
ast.ASToderast.expr) ist veraltet und wird in Python 3.20 einen Fehler auslösen.
-
Es ist veraltet, Prüfungen mit
isinstance()undissubclass()auf Protokollklassen anzuwenden, die nicht explizit mitruntime_checkable()dekoriert sind, aber von einer zur Laufzeit prüfbaren Protokollklasse erben. In Python 3.20 wird dies einenTypeErrorauslösen.(Beigetragen von Bartosz Sławecki in gh-132604.)
Geplante Entfernung in zukünftigen Versionen¶
Die folgenden APIs werden in Zukunft entfernt, auch wenn derzeit noch kein Termin für ihre Entfernung feststeht.
-
Das Verschachteln von Argumentgruppen und von sich gegenseitig ausschließenden Gruppen ist veraltet.
Die Übergabe des undokumentierten Schlüsselwortarguments prefix_chars an
add_argument_group()ist jetzt veraltet.Der Typkonverter
argparse.FileTypeist veraltet.
-
Generatoren: Die Signatur
throw(type, exc, tb)undathrow(type, exc, tb)ist veraltet: Verwende stattdessenthrow(exc)undathrow(exc), die Signatur mit einem einzigen Argument.Derzeit akzeptiert Python numerische Literale, auf die unmittelbar Schlüsselwörter folgen, zum Beispiel
0in x,1or x,0if 1else 2. Das ermöglicht verwirrende und mehrdeutige Ausdrücke wie[0x1for x in y](was als[0x1 for x in y]oder als[0x1f or x in y]interpretiert werden kann). Eine Syntaxwarnung wird ausgelöst, wenn auf das numerische Literal unmittelbar eines der Schlüsselwörterand,else,for,if,in,isundorfolgt. In einer künftigen Version wird daraus ein Syntaxfehler. (gh-87999)Unterstützung dafür, dass die Methoden
__index__()und__int__()einen Typ zurückgeben, der kein int ist: Diese Methoden müssen künftig eine Instanz einer strikten Unterklasse vonintzurückgeben.Unterstützung dafür, dass die Methode
__float__()eine strikte Unterklasse vonfloatzurückgibt: Diese Methoden müssen künftig eine Instanz vonfloatzurückgeben.Unterstützung dafür, dass die Methode
__complex__()eine strikte Unterklasse voncomplexzurückgibt: Diese Methoden müssen künftig eine Instanz voncomplexzurückgeben.Die Übergabe einer komplexen Zahl als Argument real oder imag an den Konstruktor
complex()ist jetzt veraltet. Sie sollte nur als einziges Positionsargument übergeben werden. (Beigetragen von Serhiy Storchaka in gh-109218.)
calendar: Die Konstantencalendar.Januaryundcalendar.Februarysind veraltet und werden durchcalendar.JANUARYundcalendar.FEBRUARYersetzt. (Beigetragen von Prince Roshan in gh-103636.)codecs: Verwendeopen()stattcodecs.open(). (gh-133038)codeobject.co_lnotab: Verwende stattdessen die Methodecodeobject.co_lines().-
utcnow(): Verwendedatetime.datetime.now(tz=datetime.UTC).utcfromtimestamp(): Verwendedatetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC).
gettext: Der Pluralwert muss eine Ganzzahl sein.-
cache_from_source(): Der Parameter debug_override ist veraltet: Verwende stattdessen den Parameter optimization.
-
Die Tupel-Schnittstelle von
EntryPoints.Implizites
Nonebei Rückgabewerten.
logging: Die Methodewarn()ist seit Python 3.3 veraltet, verwende stattdessenwarning().mailbox: Die Verwendung von StringIO-Eingaben und Textmodus ist veraltet, verwende stattdessen BytesIO und Binärmodus.os: Der Aufruf vonos.register_at_fork()in einem Prozess mit mehreren Threads.os.path:os.path.commonprefix()ist veraltet, verwendeos.path.commonpath()für Pfadpräfixe. Die Funktionos.path.commonprefix()wird als veraltet markiert, weil ihr Name und ihr Modul irreführend sind. Die Funktion ist für Pfadpräfixe nicht sicher, obwohl sie in einem Modul zur Pfadbearbeitung enthalten ist. Dadurch lassen sich mit ihr leicht versehentlich Path-Traversal-Schwachstellen in Python-Programme einbauen.pydoc.ErrorDuringImport: Ein Tupelwert für den Parameter exc_info ist veraltet, verwende eine Ausnahmeinstanz.re: Für numerische Gruppenreferenzen und Gruppennamen in regulären Ausdrücken gelten jetzt strengere Regeln. Als numerische Referenz wird jetzt nur noch eine Folge von ASCII-Ziffern akzeptiert. Der Gruppenname in Bytes-Mustern und Ersetzungszeichenketten darf jetzt nur noch ASCII-Buchstaben, Ziffern und Unterstriche enthalten. (Beigetragen von Serhiy Storchaka in gh-91760.)shutil: Der Parameter onerror vonrmtree()ist seit Python 3.12 veraltet. Verwende stattdessen den Parameter onexc.Optionen und Protokolle von
ssl:ssl.SSLContextohne Protokollargument ist veraltet.ssl.SSLContext:set_npn_protocols()undselected_npn_protocol()sind veraltet: Verwende stattdessen ALPN.Optionen
ssl.OP_NO_SSL*Optionen
ssl.OP_NO_TLS*ssl.PROTOCOL_SSLv3ssl.PROTOCOL_TLSssl.PROTOCOL_TLSv1ssl.PROTOCOL_TLSv1_1ssl.PROTOCOL_TLSv1_2ssl.TLSVersion.SSLv3ssl.TLSVersion.TLSv1ssl.TLSVersion.TLSv1_1
Methoden von
threading:threading.Condition.notifyAll(): Verwendenotify_all().threading.Event.isSet(): Verwendeis_set().threading.Thread.isDaemon(),threading.Thread.setDaemon(): Verwende das Attributthreading.Thread.daemon.threading.Thread.getName(),threading.Thread.setName(): Verwende das Attributthreading.Thread.name.threading.currentThread(): Verwendethreading.current_thread().threading.activeCount(): Verwendethreading.active_count().
Die interne Klasse
typing._UnionGenericAliaswird nicht mehr zur Implementierung vontyping.Unionverwendet. Um die Kompatibilität mit Benutzern dieser privaten Klasse zu wahren, wird bis mindestens Python 3.17 ein Kompatibilitäts-Shim bereitgestellt. (Beigetragen von Jelle Zijlstra in gh-105499.)unittest.IsolatedAsyncioTestCase: Es ist veraltet, aus einem Testfall einen Wert zurückzugeben, der nichtNoneist.Veraltete Funktionen in
urllib.parse: Verwende stattdessenurlparse()splitattr()splithost()splitnport()splitpasswd()splitport()splitquery()splittag()splittype()splituser()splitvalue()to_bytes()
wsgiref:SimpleHandler.stdout.write()sollte keine teilweisen Schreibvorgänge durchführen.xml.etree.ElementTree: Das Prüfen des Wahrheitswerts einesElementist veraltet. In einer künftigen Version wird es immerTruezurückgeben. Verwende stattdessen explizite Prüfungen mitlen(elem)oderelem is not None.sys._clear_type_cache()ist veraltet: Verwende stattdessensys._clear_internal_caches().
Änderungen am Bytecode von CPython¶
Das Oparg von
YIELD_VALUEist jetzt1, wenn das yield Teil eines yield-from oder await ist, und andernfalls0. Das Oparg vonRESUMEist um ein Bit erweitert, das anzeigt, ob die Except-Tiefe 1 ist, was zum Optimieren des Schließens von Generatoren gebraucht wird. (Beigetragen von Irit Katriel in gh-111354.)
C API Änderungen¶
Neue Funktionen¶
Die PyMonitoring-C-API ist hinzugekommen, um Überwachungsereignisse nach PEP 669 zu erzeugen:
PyMonitoring_FireBranchEvent
(Beigetragen von Irit Katriel in gh-111997).
PyMutexist hinzugekommen, ein leichtgewichtiger Mutex, der ein einzelnes Byte belegt, dazu die neuen FunktionenPyMutex_Lock()undPyMutex_Unlock().PyMutex_Lock()gibt das GIL frei (sofern es gerade gehalten wird), wenn die Operation blockieren muss. (Beigetragen von Sam Gross in gh-108724.)Die PyTime-C-API ist hinzugekommen, um Zugriff auf die Uhren des Systems zu geben:
PyTime_MINundPyTime_MAX.
(Beigetragen von Victor Stinner und Petr Viktorin in gh-110850.)
Die Funktion
PyDict_ContainsString()ist hinzugekommen. Sie verhält sich wiePyDict_Contains(), key wird aber als UTF-8-kodierte Bytezeichenkette vom Typ const char* angegeben statt als PyObject*. (Beigetragen von Victor Stinner in gh-108314.)Die Funktionen
PyDict_GetItemRef()undPyDict_GetItemStringRef()sind hinzugekommen. Sie verhalten sich ähnlich wiePyDict_GetItemWithError(), geben aber eine starke Referenz zurück statt einer geliehenen Referenz. Außerdem geben diese Funktionen im Fehlerfall-1zurück, wodurch die Prüfung vonPyErr_Occurred()entfällt. (Beigetragen von Victor Stinner in gh-106004.)Die Funktion
PyDict_SetDefaultRef()ist hinzugekommen. Sie verhält sich ähnlich wiePyDict_SetDefault(), gibt aber eine starke Referenz zurück statt einer geliehenen Referenz. Diese Funktion gibt im Fehlerfall-1zurück, beim Einfügen0und1, wenn der Schlüssel im Dictionary schon vorhanden war. (Beigetragen von Sam Gross in gh-112066.)Die Funktionen
PyDict_Pop()undPyDict_PopString()sind hinzugekommen, um einen Schlüssel aus einem Dictionary zu entfernen und wahlweise den entfernten Wert zurückzugeben. Das gleichtdict.pop(), allerdings gibt es keinen Standardwert, und für fehlende Schlüssel wird keinKeyErrorausgelöst. (Beigetragen von Stefan Behnel und Victor Stinner in gh-111262.)Die Funktionen
PyMapping_GetOptionalItem()undPyMapping_GetOptionalItemString()sind als Alternativen zuPyObject_GetItem()beziehungsweisePyMapping_GetItemString()hinzugekommen. Die neuen Funktionen lösen keinenKeyErroraus, wenn der angefragte Schlüssel im Mapping fehlt. Diese Varianten sind bequemer und schneller, wenn ein fehlender Schlüssel nicht als Fehler gelten soll. (Beigetragen von Serhiy Storchaka in gh-106307.)Die Funktionen
PyObject_GetOptionalAttr()undPyObject_GetOptionalAttrString()sind als Alternativen zuPyObject_GetAttr()beziehungsweisePyObject_GetAttrString()hinzugekommen. Die neuen Funktionen lösen keinenAttributeErroraus, wenn das angefragte Attribut am Objekt nicht gefunden wird. Diese Varianten sind bequemer und schneller, wenn ein fehlendes Attribut nicht als Fehler gelten soll. (Beigetragen von Serhiy Storchaka in gh-106521.)Die Funktion
PyErr_FormatUnraisable()ist als Erweiterung vonPyErr_WriteUnraisable()hinzugekommen. Mit ihr lässt sich die Warnmeldung anpassen. (Beigetragen von Serhiy Storchaka in gh-108082.)Neue Funktionen sind hinzugekommen, die für die lokalen, globalen und eingebauten Variablen eines Rahmens eine starke Referenz statt einer geliehenen Referenz zurückgeben, als Teil von PEP 667:
(Beigetragen von Mark Shannon und Tian Gao in gh-74929.)
Die Funktionen
Py_GetConstant()undPy_GetConstantBorrowed()sind hinzugekommen, um starke oder geliehene Referenzen auf Konstanten zu bekommen.Py_GetConstant(Py_CONSTANT_ZERO)gibt zum Beispiel eine starke Referenz auf die Konstante null zurück. (Beigetragen von Victor Stinner in gh-115754.)Die Funktion
PyImport_AddModuleRef()ist als Ersatz fürPyImport_AddModule()hinzugekommen. Sie gibt eine starke Referenz zurück statt einer geliehenen Referenz. (Beigetragen von Victor Stinner in gh-105922.)Die Funktion
Py_IsFinalizing()ist hinzugekommen, um zu prüfen, ob der Haupt-Python-Interpreter herunterfährt. (Beigetragen von Victor Stinner in gh-108014.)Die Funktion
PyList_GetItemRef()ist als Ersatz fürPyList_GetItem()hinzugekommen. Sie gibt eine starke Referenz zurück statt einer geliehenen Referenz. (Beigetragen von Sam Gross in gh-114329.)Die Funktionen
PyList_Extend()undPyList_Clear()sind hinzugekommen. Sie spiegeln die Python-Methodenlist.extend()undlist.clear(). (Beigetragen von Victor Stinner in gh-111138.)Die Funktion
PyLong_AsInt()ist hinzugekommen. Sie verhält sich ähnlich wiePyLong_AsLong(), legt das Ergebnis aber in einem C-int ab statt in einem C-long. (Beigetragen von Victor Stinner in gh-108014.)Die Funktionen
PyLong_AsNativeBytes(),PyLong_FromNativeBytes()undPyLong_FromUnsignedNativeBytes()sind hinzugekommen, um das Umwandeln zwischen nativen Ganzzahltypen und Python-int-Objekten zu vereinfachen. (Beigetragen von Steve Dower in gh-111140.)Die Funktion
PyModule_Add()ist hinzugekommen. Sie gleichtPyModule_AddObjectRef()undPyModule_AddObject(), stiehlt aber immer eine Referenz auf den Wert. (Beigetragen von Serhiy Storchaka in gh-86493.)Die Funktion
PyObject_GenericHash()ist hinzugekommen. Sie setzt die voreingestellte Hash-Funktion eines Python-Objekts um. (Beigetragen von Serhiy Storchaka in gh-113024.)Die Funktion
Py_HashPointer()ist hinzugekommen, um einen rohen Zeiger zu hashen. (Beigetragen von Victor Stinner in gh-111545.)Die Funktionen
PyObject_VisitManagedDict()undPyObject_ClearManagedDict()sind hinzugekommen. Sie müssen von den Traverse- und Clear-Funktionen eines Typs aufgerufen werden, der den SchalterPy_TPFLAGS_MANAGED_DICTverwendet. Mit dem pythoncapi-compat project lassen sich diese Funktionen unter Python 3.11 und 3.12 nutzen. (Beigetragen von Victor Stinner in gh-107073.)Die Funktionen
PyRefTracer_SetTracer()undPyRefTracer_GetTracer()sind hinzugekommen. Mit ihnen lässt sich das Erzeugen und Zerstören von Objekten auf dieselbe Weise verfolgen, wie es das Modultracemalloctut. (Beigetragen von Pablo Galindo in gh-93502.)Die Funktion
PySys_AuditTuple()ist als Alternative zuPySys_Audit()hinzugekommen. Sie nimmt die Ereignisargumente als Python-tuple-Objekt. (Beigetragen von Victor Stinner in gh-85283.)Die Funktion
PyThreadState_GetUnchecked()ist als Alternative zuPyThreadState_Get()hinzugekommen. Sie beendet den Prozess nicht mit einem schweren Fehler, wenn erNULList. Der Aufrufer muss selbst prüfen, ob das ErgebnisNULList. (Beigetragen von Victor Stinner in gh-108867.)Die Funktion
PyType_GetFullyQualifiedName()ist hinzugekommen, um den vollständig qualifizierten Namen des Typs zu ermitteln. Der Modulname wird vorangestellt, wenntype.__module__eine Zeichenkette ist und weder'builtins'noch'__main__'lautet. (Beigetragen von Victor Stinner in gh-111696.)Die Funktion
PyType_GetModuleName()ist hinzugekommen, um den Modulnamen des Typs zu ermitteln. Das entspricht dem Abfragen des Attributstype.__module__. (Beigetragen von Eric Snow und Victor Stinner in gh-111696.)Die Funktionen
PyUnicode_EqualToUTF8AndSize()undPyUnicode_EqualToUTF8()sind hinzugekommen, um ein Unicode-Objekt mit einer UTF-8-kodierten Zeichenkette vom Typ const char* zu vergleichen. Sie geben1zurück, wenn beide gleich sind, und andernfalls0. Diese Funktionen lösen keine Ausnahmen aus. (Beigetragen von Serhiy Storchaka in gh-110289.)Die Funktion
PyWeakref_GetRef()ist als Alternative zuPyWeakref_GetObject()hinzugekommen. Sie gibt eine starke Referenz zurück oderNULL, wenn das Bezugsobjekt nicht mehr lebt. (Beigetragen von Victor Stinner in gh-105927.)Ausgebesserte Varianten von Funktionen, die Fehler stillschweigend übergehen, sind hinzugekommen:
PyObject_HasAttrStringWithError()ersetztPyObject_HasAttrString().PyMapping_HasKeyStringWithError()ersetztPyMapping_HasKeyString().
Die neuen Funktionen geben im Fehlerfall
-1zurück und wie üblich1für wahr und0für falsch.(Beigetragen von Serhiy Storchaka in gh-108511.)
Geänderte C-APIs¶
Der Parameter keywords von
PyArg_ParseTupleAndKeywords()undPyArg_VaParseTupleAndKeywords()hat jetzt in C den Typ char *const* und in C++ const char *const* statt char**. In C++ sind diese Funktionen damit ohne ausdrückliche Typumwandlung mit Argumenten der Typen const char *const*, const char** oder char *const* verträglich. In C unterstützen die Funktionen nur Argumente des Typs char *const*. Überschreiben lässt sich das mit dem MakroPY_CXX_CONST. (Beigetragen von Serhiy Storchaka in gh-65210.)PyArg_ParseTupleAndKeywords()unterstützt jetzt Namen von Schlüsselwortparametern, die nicht ASCII sind. (Beigetragen von Serhiy Storchaka in gh-110815.)Die Funktion
PyCode_GetFirstFree()ist jetzt instabile API und heißt jetztPyUnstable_Code_GetFirstFree(). (Beigetragen von Bogdan Romanyuk in gh-115781.)Die Funktionen
PyDict_GetItem(),PyDict_GetItemString(),PyMapping_HasKey(),PyMapping_HasKeyString(),PyObject_HasAttr(),PyObject_HasAttrString()undPySys_GetObject(), die jeweils alle beim Aufruf aufgetretenen Fehler verwerfen, melden diese Fehler jetzt übersys.unraisablehook(). Du kannst sie durch andere Funktionen ersetzen, wie es die Dokumentation empfiehlt. (Beigetragen von Serhiy Storchaka in gh-106672.)Unterstützung für die Formate
%T,%#T,%Nund%#Nist inPyUnicode_FromFormat()hinzugekommen:%T: ermittelt den vollständig qualifizierten Namen eines Objekttyps%#T: wie oben, aber mit einem Doppelpunkt als Trennzeichen%N: ermittelt den vollständig qualifizierten Namen eines Typs%#N: wie oben, aber mit einem Doppelpunkt als Trennzeichen
Näheres unter PEP 737. (Beigetragen von Victor Stinner in gh-111696.)
Du musst das Makro
PY_SSIZE_T_CLEANnicht mehr definieren, bevor duPython.heinbindest, wenn du#-Formate in Formatcodes verwendest. APIs, die die Formatcodes annehmen, verwenden für#-Formate immerPy_ssize_t. (Beigetragen von Inada Naoki in gh-104922.)Ist Python im Debug-Modus oder
mit Assertionsgebaut, prüfenPyTuple_SET_ITEM()undPyList_SET_ITEM()das Indexargument jetzt mit einer Assertion. (Beigetragen von Victor Stinner in gh-106168.)
Änderungen an der eingeschränkten C-API¶
Die folgenden Funktionen sind jetzt in der eingeschränkten C-API enthalten:
Mit
--with-trace-refsgebautes Python (Verfolgung von Referenzen) unterstützt jetzt die eingeschränkte API. (Beigetragen von Victor Stinner in gh-108634.)
Entfernte C-APIs¶
Mehrere Funktionen, Makros, Variablen und Ähnliches mit dem Namenspräfix
_Pyoder_PY(die als privat gelten) sind entfernt. Ist dein Projekt von einer dieser Entfernungen betroffen und meinst du, die entfernte API sollte weiter verfügbar sein, dann eröffne bitte einen neuen Eintrag, um eine öffentliche C-API zu beantragen, und ergänzecc: @vstinner, um Victor Stinner zu benachrichtigen. (Beigetragen von Victor Stinner in gh-106320.)Die in Python 3.0 als veraltet markierten alten Puffer-Protokolle sind entfernt. Verwende stattdessen Buffer-Protokoll.
PyObject_CheckReadBuffer(): VerwendePyObject_CheckBuffer(), um zu prüfen, ob das Objekt das Puffer-Protokoll unterstützt. Beachte, dassPyObject_CheckBuffer()nicht zusagt, dassPyObject_GetBuffer()gelingt. Um zu prüfen, ob das Objekt tatsächlich lesbar ist, siehe das folgende Beispiel zuPyObject_GetBuffer().PyObject_AsCharBuffer(),PyObject_AsReadBuffer(): Verwende stattdessenPyObject_GetBuffer()undPyBuffer_Release():Py_buffer view; if (PyObject_GetBuffer(obj, &view, PyBUF_SIMPLE) < 0) { return NULL; } // Use `view.buf` and `view.len` to read from the buffer. // You may need to cast buf as `(const char*)view.buf`. PyBuffer_Release(&view);
PyObject_AsWriteBuffer(): Verwende stattdessenPyObject_GetBuffer()undPyBuffer_Release():Py_buffer view; if (PyObject_GetBuffer(obj, &view, PyBUF_WRITABLE) < 0) { return NULL; } // Use `view.buf` and `view.len` to write to the buffer. PyBuffer_Release(&view);
(Beigetragen von Inada Naoki in gh-85275.)
Verschiedene in Python 3.9 als veraltet markierte Funktionen sind entfernt:
PyEval_CallObject(),PyEval_CallObjectWithKeywords(): Verwende stattdessenPyObject_CallNoArgs()oderPyObject_Call().Warnung
In
PyObject_Call()müssen positionsbezogene Argumente eintuplesein und dürfen nichtNULLsein, und Schlüsselwortargumente müssen eindictoderNULLsein, während die entfernten Funktionen die Argumenttypen geprüft undNULLfür positionsbezogene und Schlüsselwortargumente angenommen haben. UmPyEval_CallObjectWithKeywords(func, NULL, kwargs)durchPyObject_Call()zu ersetzen, übergib mitPyTuple_New(0)ein leeres Tupel als positionsbezogene Argumente.PyEval_CallFunction(): Verwende stattdessenPyObject_CallFunction().PyEval_CallMethod(): Verwende stattdessenPyObject_CallMethod().PyCFunction_Call(): Verwende stattdessenPyObject_Call().
(Beigetragen von Victor Stinner in gh-105107.)
Die folgenden alten Funktionen, um die Initialisierung von Python einzustellen, sind entfernt. Sie waren in Python 3.11 als veraltet markiert:
PySys_AddWarnOptionUnicode(): Verwende stattdessenPyConfig.warnoptions.PySys_AddWarnOption(): Verwende stattdessenPyConfig.warnoptions.PySys_AddXOption(): Verwende stattdessenPyConfig.xoptions.PySys_HasWarnOptions(): Verwende stattdessenPyConfig.xoptions.PySys_SetPath(): Setze stattdessenPyConfig.module_search_paths.Py_SetPath(): Setze stattdessenPyConfig.module_search_paths.Py_SetStandardStreamEncoding(): Setze stattdessenPyConfig.stdio_encodingund gegebenenfalls auchPyConfig.legacy_windows_stdio(unter Windows)._Py_SetProgramFullPath(): Setze stattdessenPyConfig.executable.
Verwende stattdessen die neue
PyConfig-API der Konfiguration der Python-Initialisierung (PEP 587), die in Python 3.8 hinzugekommen ist. (Beigetragen von Victor Stinner in gh-105145.)Die Funktionen
PyEval_AcquireLock()undPyEval_ReleaseLock()sind entfernt. Sie waren in Python 3.2 als veraltet markiert. Sie haben den aktuellen Thread-Zustand nicht aktualisiert. Ersetzen lassen sie sich durch:die tief liegenden
PyEval_AcquireThread()undPyEval_RestoreThread()oder
PyGILState_Ensure()undPyGILState_Release().
(Beigetragen von Victor Stinner in gh-105182.)
Die Funktion
PyEval_ThreadsInitialized()ist entfernt. Sie war in Python 3.9 als veraltet markiert. Seit Python 3.7 erzeugtPy_Initialize()immer das GIL:PyEval_InitThreads()aufzurufen tut nichts, undPyEval_ThreadsInitialized()gibt immer einen Wert ungleich null zurück. (Beigetragen von Victor Stinner in gh-105182.)Der andere Name
_PyInterpreterState_Get()fürPyInterpreterState_Get()ist entfernt. Er war aus Rückwärtsverträglichkeit mit Python 3.8 erhalten geblieben. Mit dem pythoncapi-compat project lässt sichPyInterpreterState_Get()unter Python 3.8 und älter nutzen. (Beigetragen von Victor Stinner in gh-106320.)Die private Funktion
_PyObject_FastCall()ist entfernt. VerwendePyObject_Vectorcall(), das seit Python 3.8 verfügbar ist (PEP 590). (Beigetragen von Victor Stinner in gh-106023.)Die Header-Datei
cpython/pytime.h, die nur private Funktionen enthielt, ist entfernt. (Beigetragen von Victor Stinner in gh-106316.)Die nicht dokumentierte Konstante
PY_TIMEOUT_MAXist aus der eingeschränkten C-API entfernt. (Beigetragen von Victor Stinner in gh-110014.)Die alten Trashcan-Makros
Py_TRASHCAN_SAFE_BEGINundPy_TRASHCAN_SAFE_ENDsind entfernt. Ersetze beide durch die neuen MakrosPy_TRASHCAN_BEGINundPy_TRASHCAN_END. (Beigetragen von Irit Katriel in gh-105111.)
Veraltete C-APIs¶
Alte Funktionen zur Initialisierung von Python sind als veraltet markiert:
PySys_ResetWarnOptions(): Leere stattdessensys.warnoptionsundwarnings.filters.Py_GetExecPrefix(): Frage stattdessensys.exec_prefixab.Py_GetPath(): Frage stattdessensys.pathab.Py_GetPrefix(): Frage stattdessensys.prefixab.Py_GetProgramFullPath(): Frage stattdessensys.executableab.Py_GetProgramName(): Frage stattdessensys.executableab.Py_GetPythonHome(): Frage stattdessenPyConfig.homeoder die UmgebungsvariablePYTHONHOMEab.
(Beigetragen von Victor Stinner in gh-105145.)
Die Funktionen
PyEval_GetBuiltins(),PyEval_GetGlobals()undPyEval_GetLocals(), die eine geliehene Referenz zurückgeben, sind sanft abgekündigt. (Sanft abgekündigt als Teil von PEP 667.)Die Funktion
PyImport_ImportModuleNoBlock()ist als veraltet markiert. Sie ist seit Python 3.3 nur ein anderer Name fürPyImport_ImportModule(). (Beigetragen von Victor Stinner in gh-105396.)Die Funktion
PyModule_AddObject()ist sanft abgekündigt. Sie sollte durchPyModule_Add()oderPyModule_AddObjectRef()ersetzt werden. (Beigetragen von Serhiy Storchaka in gh-86493.)Die alten Typen
Py_UNICODEundPY_UNICODE_TYPEsowie die DefinitionPy_UNICODE_WIDEsind als veraltet markiert. Verwende stattdessen unmittelbar den Typwchar_t. Seit Python 3.3 sindPy_UNICODEundPY_UNICODE_TYPEnur andere Namen fürwchar_t. (Beigetragen von Victor Stinner in gh-105156.)Die Funktionen
PyWeakref_GetObject()undPyWeakref_GET_OBJECT(), die eine geliehene Referenz zurückgeben, sind als veraltet markiert. Ersetze sie durch die neue FunktionPyWeakref_GetRef(), die eine starke Referenz zurückgibt. Mit dem pythoncapi-compat project lässt sichPyWeakref_GetRef()unter Python 3.12 und älter nutzen. (Beigetragen von Victor Stinner in gh-105927.)
Geplante Entfernung in Python 3.14¶
Das Feld
ma_version_taginPyDictObjectfür Erweiterungsmodule (PEP 699; gh-101193).Unveränderliche Typenmit veränderlichen Basisklassen zu erzeugen (gh-95388).
Geplante Entfernung in Python 3.15¶
PyImport_ImportModuleNoBlock(): Verwende stattdessenPyImport_ImportModule().PyWeakref_GetObject()undPyWeakref_GET_OBJECT(): Verwende stattdessenPyWeakref_GetRef(). Mit dem Projekt pythoncapi-compat lässt sichPyWeakref_GetRef()auch unter Python 3.12 und älter nutzen.PyUnicode_AsDecodedObject(): Verwende stattdessenPyCodec_Decode().PyUnicode_AsDecodedUnicode(): Verwende stattdessenPyCodec_Decode(). Beachte, dass manche Codecs (zum Beispiel „base64“) einen anderen Typ alsstrzurückgeben können, etwabytes.PyUnicode_AsEncodedObject(): Verwende stattdessenPyCodec_Encode().PyUnicode_AsEncodedUnicode(): Verwende stattdessenPyCodec_Encode(). Beachte, dass manche Codecs (zum Beispiel „base64“) einen anderen Typ alsbyteszurückgeben können, etwastr.Funktionen zur Initialisierung von Python, in Python 3.13 als veraltet markiert:
Py_GetPath(): Verwende stattdessenPyConfig_Get("module_search_paths")(sys.path).Py_GetPrefix(): Verwende stattdessenPyConfig_Get("base_prefix")(sys.base_prefix). VerwendePyConfig_Get("prefix")(sys.prefix), wenn virtuelle Umgebungen zu berücksichtigen sind.Py_GetExecPrefix(): Verwende stattdessenPyConfig_Get("base_exec_prefix")(sys.base_exec_prefix). VerwendePyConfig_Get("exec_prefix")(sys.exec_prefix), wenn virtuelle Umgebungen zu berücksichtigen sind.Py_GetProgramFullPath(): Verwende stattdessenPyConfig_Get("executable")(sys.executable).Py_GetProgramName(): Verwende stattdessenPyConfig_Get("executable")(sys.executable).Py_GetPythonHome(): Verwende stattdessenPyConfig_Get("home")oder die UmgebungsvariablePYTHONHOME.
Mit dem Projekt pythoncapi-compat lässt sich
PyConfig_Get()auch unter Python 3.13 und älter nutzen.Funktionen, um die Initialisierung von Python einzustellen, in Python 3.11 als veraltet markiert:
PySys_SetArgvEx(): Setze stattdessenPyConfig.argv.PySys_SetArgv(): Setze stattdessenPyConfig.argv.Py_SetProgramName(): Setze stattdessenPyConfig.program_name.Py_SetPythonHome(): Setze stattdessenPyConfig.home.PySys_ResetWarnOptions(): Leere stattdessensys.warnoptionsundwarnings.filters.
Stattdessen sollte die API
Py_InitializeFromConfig()mitPyConfigverwendet werden.Globale Konfigurationsvariablen:
Py_DebugFlag: Verwende stattdessenPyConfig.parser_debugoderPyConfig_Get("parser_debug").Py_VerboseFlag: Verwende stattdessenPyConfig.verboseoderPyConfig_Get("verbose").Py_QuietFlag: Verwende stattdessenPyConfig.quietoderPyConfig_Get("quiet").Py_InteractiveFlag: Verwende stattdessenPyConfig.interactiveoderPyConfig_Get("interactive").Py_InspectFlag: Verwende stattdessenPyConfig.inspectoderPyConfig_Get("inspect").Py_OptimizeFlag: Verwende stattdessenPyConfig.optimization_leveloderPyConfig_Get("optimization_level").Py_NoSiteFlag: Verwende stattdessenPyConfig.site_importoderPyConfig_Get("site_import").Py_BytesWarningFlag: Verwende stattdessenPyConfig.bytes_warningoderPyConfig_Get("bytes_warning").Py_FrozenFlag: Verwende stattdessenPyConfig.pathconfig_warningsoderPyConfig_Get("pathconfig_warnings").Py_IgnoreEnvironmentFlag: Verwende stattdessenPyConfig.use_environmentoderPyConfig_Get("use_environment").Py_DontWriteBytecodeFlag: Verwende stattdessenPyConfig.write_bytecodeoderPyConfig_Get("write_bytecode").Py_NoUserSiteDirectory: Verwende stattdessenPyConfig.user_site_directoryoderPyConfig_Get("user_site_directory").Py_UnbufferedStdioFlag: Verwende stattdessenPyConfig.buffered_stdiooderPyConfig_Get("buffered_stdio").Py_HashRandomizationFlag: Verwende stattdessenPyConfig.use_hash_seedundPyConfig.hash_seedoderPyConfig_Get("hash_seed").Py_IsolatedFlag: Verwende stattdessenPyConfig.isolatedoderPyConfig_Get("isolated").Py_LegacyWindowsFSEncodingFlag: Verwende stattdessenPyPreConfig.legacy_windows_fs_encodingoderPyConfig_Get("legacy_windows_fs_encoding").Py_LegacyWindowsStdioFlag: Verwende stattdessenPyConfig.legacy_windows_stdiooderPyConfig_Get("legacy_windows_stdio").Py_FileSystemDefaultEncoding,Py_HasFileSystemDefaultEncoding: Verwende stattdessenPyConfig.filesystem_encodingoderPyConfig_Get("filesystem_encoding").Py_FileSystemDefaultEncodeErrors: Verwende stattdessenPyConfig.filesystem_errorsoderPyConfig_Get("filesystem_errors").Py_UTF8Mode: Verwende stattdessenPyPreConfig.utf8_modeoderPyConfig_Get("utf8_mode"). (siehePy_PreInitialize())
Um diese Optionen zu setzen, sollte die API
Py_InitializeFromConfig()mitPyConfigverwendet werden. Oder man liest diese Optionen zur Laufzeit mitPyConfig_Get()aus.
Geplante Entfernung in Python 3.16¶
Die mitgelieferte Kopie von
libmpdec.
Geplante Entfernung in Python 3.18¶
Die folgenden privaten Funktionen sind als veraltet markiert, die Entfernung ist für Python 3.18 geplant:
_PyBytes_Join(): verwendePyBytes_Join()._PyDict_GetItemStringWithError(): verwendePyDict_GetItemStringRef()._PyDict_Pop(): verwendePyDict_Pop()._PyLong_Sign(): verwendePyLong_GetSign()._PyLong_FromDigits()und_PyLong_New(): verwendePyLongWriter_Create()._PyThreadState_UncheckedGet(): verwendePyThreadState_GetUnchecked()._PyUnicode_AsString(): verwendePyUnicode_AsUTF8()._PyUnicodeWriter_Init(): ersetze_PyUnicodeWriter_Init(&writer)durchwriter = PyUnicodeWriter_Create(0)._PyUnicodeWriter_Finish(): ersetze_PyUnicodeWriter_Finish(&writer)durchPyUnicodeWriter_Finish(writer)._PyUnicodeWriter_Dealloc(): ersetze_PyUnicodeWriter_Dealloc(&writer)durchPyUnicodeWriter_Discard(writer)._PyUnicodeWriter_WriteChar(): ersetze_PyUnicodeWriter_WriteChar(&writer, ch)durchPyUnicodeWriter_WriteChar(writer, ch)._PyUnicodeWriter_WriteStr(): ersetze_PyUnicodeWriter_WriteStr(&writer, str)durchPyUnicodeWriter_WriteStr(writer, str)._PyUnicodeWriter_WriteSubstring(): ersetze_PyUnicodeWriter_WriteSubstring(&writer, str, start, end)durchPyUnicodeWriter_WriteSubstring(writer, str, start, end)._PyUnicodeWriter_WriteASCIIString(): ersetze_PyUnicodeWriter_WriteASCIIString(&writer, str)durchPyUnicodeWriter_WriteASCII(writer, str)._PyUnicodeWriter_WriteLatin1String(): ersetze_PyUnicodeWriter_WriteLatin1String(&writer, str)durchPyUnicodeWriter_WriteUTF8(writer, str)._PyUnicodeWriter_Prepare(): (kein Ersatz)._PyUnicodeWriter_PrepareKind(): (kein Ersatz)._Py_HashPointer(): verwendePy_HashPointer()._Py_fopen_obj(): verwendePy_fopen().
Mit dem Projekt pythoncapi-compat lassen sich diese neuen öffentlichen Funktionen auch unter Python 3.13 und älter nutzen. (Beigetragen von Victor Stinner in gh-128863.)
Geplante Entfernung in zukünftigen Versionen¶
Die folgenden APIs sind als veraltet markiert und werden entfernt, auch wenn für die Entfernung derzeit kein Zeitpunkt festgelegt ist.
Py_TPFLAGS_HAVE_FINALIZE: seit Python 3.8 nicht mehr nötig.PyErr_Fetch(): Verwende stattdessenPyErr_GetRaisedException().PyErr_NormalizeException(): Verwende stattdessenPyErr_GetRaisedException().PyErr_Restore(): Verwende stattdessenPyErr_SetRaisedException().PyModule_GetFilename(): Verwende stattdessenPyModule_GetFilenameObject().PyOS_AfterFork(): Verwende stattdessenPyOS_AfterFork_Child().PySlice_GetIndicesEx(): Verwende stattdessenPySlice_Unpack()undPySlice_AdjustIndices().PyUnicode_READY(): seit Python 3.12 nicht mehr nötigPyErr_Display(): Verwende stattdessenPyErr_DisplayException()._PyErr_ChainExceptions(): Verwende stattdessen_PyErr_ChainExceptions1().Element
PyBytesObject.ob_shash: rufe stattdessenPyObject_Hash()auf.API für Thread Local Storage (TLS):
PyThread_create_key(): Verwende stattdessenPyThread_tss_alloc().PyThread_delete_key(): Verwende stattdessenPyThread_tss_free().PyThread_set_key_value(): Verwende stattdessenPyThread_tss_set().PyThread_get_key_value(): Verwende stattdessenPyThread_tss_get().PyThread_delete_key_value(): Verwende stattdessenPyThread_tss_delete().PyThread_ReInitTLS(): seit Python 3.7 nicht mehr nötig.
Build Änderungen¶
arm64-apple-iosundarm64-apple-ios-simulatorsind jetzt beide Plattformen der Stufe 3 nach PEP 11. (PEP 730 verfasst und Umsetzung beigetragen von Russell Keith-Magee in gh-114099.)aarch64-linux-androidundx86_64-linux-androidsind jetzt beide Plattformen der Stufe 3 nach PEP 11. (PEP 738 verfasst und Umsetzung beigetragen von Malcolm Smith in gh-116622.)wasm32-wasiist jetzt eine Plattform der Stufe 2 nach PEP 11. (Beigetragen von Brett Cannon in gh-115192.)wasm32-emscriptenist keine nach PEP 11 unterstützte Plattform mehr. (Beigetragen von Brett Cannon in gh-115192.)Um CPython zu bauen, wird jetzt ein Compiler benötigt, der die C11-Atomic-Bibliothek, die eingebauten Atomic-Funktionen von GCC oder die Interlocked-Intrinsics von MSVC unterstützt.
Um das Skript
configureneu zu erzeugen, werden jetzt Autoconf 2.71 und aclocal 1.16.5 benötigt. (Beigetragen von Christian Heimes in gh-89886 und von Victor Stinner in gh-112090.)Um das Erweiterungsmodul
sqlite3zu bauen, wird SQLite 3.15.2 oder neuer benötigt. (Beigetragen von Erlend Aasland in gh-105875.)CPython liefert jetzt standardmäßig die mimalloc library mit. Sie steht unter der MIT-Lizenz, siehe mimalloc-Lizenz. Das mitgelieferte mimalloc enthält eigene Änderungen, Einzelheiten unter gh-113141. (Beigetragen von Dino Viehland in gh-109914.)
Die
configure-Option--with-system-libmpdecsteht jetzt standardmäßig aufyes. Die mitgelieferte Kopie vonlibmpdecwird in Python 3.16 entfernt.Mit
configure--with-trace-refsgebautes Python (Verfolgung von Referenzen) ist jetzt ABI-verträglich mit dem Release-Build und dem Debug-Build von Python. (Beigetragen von Victor Stinner in gh-108634.)Auf POSIX-Systemen enthalten die Dateinamen für pkg-config (
.pc) jetzt die ABI-Schalter. Der Free-Threaded-Build erzeugt zum Beispielpython-3.13t.pcund der Debug-Buildpython-3.13d.pc.Die C-Erweiterungen
errno,fcntl,grp,md5,pwd,resource,termios,winsound,_ctypes_test,_multiprocessing.posixshmem,_scproxy,_stat,_statistics,_testconsole,_testimportmultipleund_uuidwerden jetzt mit der eingeschränkten C-API gebaut. (Beigetragen von Victor Stinner in gh-85283.)
Portierung auf Python 3.13¶
Dieser Abschnitt listet bereits beschriebene Änderungen und weitere Fehlerbehebungen auf, die Änderungen an deinem Code erfordern können.
Änderungen in der Python API¶
PEP 667 bringt mehrere Änderungen an der Semantik von
locals()undf_locals:locals()in einem optimierten Geltungsbereich aufzurufen erzeugt jetzt bei jedem Aufruf eine eigenständige Momentaufnahme und aktualisiert damit vorher zurückgegebene Referenzen nicht mehr stillschweigend. Um das alte Verhalten von CPython zu bekommen, muss man das zuerst zurückgegebene Dictionary jetzt ausdrücklich mit den Ergebnissen späterer Aufrufe vonlocals()aktualisieren. Funktionen, die Code ausführen und dabei stillschweigend auflocals()zielen (etwaexecundeval), muss ein ausdrücklicher Namensraum übergeben werden, damit man in einem optimierten Geltungsbereich an ihre Ergebnisse kommt. (Geändert als Teil von PEP 667.)locals()aus einer Comprehension im Modul- oder Klassengeltungsbereich aufzurufen (auch überexecodereval) verhält sich wieder so, als liefe die Comprehension als eigenständige verschachtelte Funktion (das heißt, die lokalen Variablen des umgebenden Geltungsbereichs sind nicht enthalten). In Python 3.12 war das mit der Umsetzung von PEP 709 dahin geändert worden, dass die lokalen Variablen des umgebenden Geltungsbereichs enthalten waren. (Geändert als Teil von PEP 667.)Der Zugriff auf
FrameType.f_localsin einem optimierten Geltungsbereich gibt jetzt einen durchschreibenden Stellvertreter zurück statt einer Momentaufnahme, die zu ungenau festgelegten Zeitpunkten aktualisiert wird. Ist eine Momentaufnahme gewünscht, muss sie ausdrücklich mitdictoder der Methode.copy()des Stellvertreters erzeugt werden. (Geändert als Teil von PEP 667.)
functools.partialgibt jetzt eineFutureWarningaus, wenn es als Methode verwendet wird. Das Verhalten wird sich in künftigen Python-Versionen ändern. Hülle es instaticmethod()ein, wenn du das alte Verhalten beibehalten willst. (Beigetragen von Serhiy Storchaka in gh-121027.)getpass.getuser()löst jetzt bei jedem Fehlschlag beim Ermitteln eines Benutzernamens einenOSErroraus, statt auf Plattformen außer Unix einenImportErroroder auf Unix-Plattformen mit leerer Passwortdatenbank einenKeyError.Der Wert des Attributs
modevongzip.GzipFileist jetzt eine Zeichenkette ('rb'oder'wb') statt einer ganzen Zahl (1oder2). Der Wert des Attributsmodedes lesbaren dateiähnlichen Objekts, daszipfile.ZipFile.open()zurückgibt, ist jetzt'rb'statt'r'. (Beigetragen von Serhiy Storchaka in gh-115961.)mailbox.Maildirübergeht jetzt Dateien, die mit einem Punkt (.) beginnen. (Beigetragen von Zackery Spytz in gh-65559.)pathlib.Path.glob()undrglob()geben jetzt Dateien und Verzeichnisse zurück, wenn ein Muster angegeben ist, das auf „**“ endet, und nicht mehr nur Verzeichnisse. Hänge einen Schrägstrich an, um das bisherige Verhalten zu behalten und nur Verzeichnisse abzugleichen.Das Modul
threadingerwartet jetzt, dass das Modul_threadeine Funktion_is_main_interpreter()hat. Diese Funktion nimmt keine Argumente und gibtTruezurück, wenn der laufende Interpreter der Hauptinterpreter ist.Jede Bibliothek und jede Anwendung, die ein eigenes Modul
_threadbereitstellt, muss_is_main_interpreter()mitbringen, genau wie die anderen „privaten“ Attribute des Moduls. (gh-112826.)
Änderungen an der C-API¶
Python.hbindet den Standard-Header<ieeefp.h>nicht mehr ein. Er war wegen der Funktionfinite()eingebunden, die jetzt der Header<math.h>bereitstellt. Er muss jetzt bei Bedarf ausdrücklich eingebunden werden. Auch das MakroHAVE_IEEEFP_Hist entfernt. (Beigetragen von Victor Stinner in gh-108765.)Python.hbindet diese Standard-Header-Dateien nicht mehr ein:<time.h>,<sys/select.h>und<sys/time.h>. Bei Bedarf müssen sie jetzt ausdrücklich eingebunden werden.<time.h>stellt zum Beispiel die Funktionenclock()undgmtime()bereit,<sys/select.h>die Funktionselect()und<sys/time.h>die Funktionenfutimes(),gettimeofday()undsetitimer(). (Beigetragen von Victor Stinner in gh-108765.)Unter Windows bindet
Python.hdie Standard-Header-Datei<stddef.h>nicht mehr ein. Bei Bedarf muss sie jetzt ausdrücklich eingebunden werden. Sie stellt zum Beispiel die Funktionoffsetof()sowie die Typensize_tundptrdiff_tbereit. Auf allen anderen Plattformen war es ohnehin nötig,<stddef.h>ausdrücklich einzubinden. Das MakroHAVE_STDDEF_Hist nur unter Windows definiert. (Beigetragen von Victor Stinner in gh-108765.)Ist das Makro
Py_LIMITED_APIdefiniert, hebt<Python.h>die MakrosPy_BUILD_CORE,Py_BUILD_CORE_BUILTINundPy_BUILD_CORE_MODULEjetzt auf. (Beigetragen von Victor Stinner in gh-85283.)Die alten Trashcan-Makros
Py_TRASHCAN_SAFE_BEGINundPy_TRASHCAN_SAFE_ENDsind entfernt. Sie sollten durch die neuen MakrosPy_TRASHCAN_BEGINundPy_TRASHCAN_ENDersetzt werden.Eine
tp_dealloc-Funktion mit den alten Makros, etwa:static void mytype_dealloc(mytype *p) { PyObject_GC_UnTrack(p); Py_TRASHCAN_SAFE_BEGIN(p); ... Py_TRASHCAN_SAFE_END }
sollte folgendermaßen auf die neuen Makros umgestellt werden:
static void mytype_dealloc(mytype *p) { PyObject_GC_UnTrack(p); Py_TRASHCAN_BEGIN(p, mytype_dealloc) ... Py_TRASHCAN_END }
Beachte, dass
Py_TRASHCAN_BEGINein zweites Argument hat, nämlich die Freigabefunktion, in der es steht. Die neuen Makros kamen in Python 3.8 hinzu, die alten Makros waren in Python 3.11 als veraltet markiert. (Beigetragen von Irit Katriel in gh-105111.)
PEP 667 bringt mehrere Änderungen an den Funktionen rund um Rahmen:
Was es bewirkt, das von
PyEval_GetLocals()zurückgegebene Dictionary in einem optimierten Geltungsbereich zu verändern, hat sich geändert. Auf diesem Weg neu hinzugefügte Dictionary-Einträge sind jetzt nur für spätere Aufrufe vonPyEval_GetLocals()in diesem Rahmen sichtbar, dennPyFrame_GetLocals(),locals()undFrameType.f_localsgreifen nicht mehr auf dasselbe darunterliegende zwischengespeicherte Dictionary zu. Änderungen an Einträgen für tatsächliche Variablennamen und an Namen, die über die durchschreibenden Stellvertreter-Schnittstellen hinzugekommen sind, werden bei späteren Aufrufen vonPyEval_GetLocals()in diesem Rahmen überschrieben. Wie der Code am besten angepasst wird, hängt davon ab, wie die Funktion verwendet wurde; Einzelheiten stehen im Abkündigungshinweis zu der Funktion.PyFrame_GetLocals()in einem optimierten Geltungsbereich aufzurufen gibt jetzt einen durchschreibenden Stellvertreter zurück statt einer Momentaufnahme, die zu ungenau festgelegten Zeitpunkten aktualisiert wird. Ist eine Momentaufnahme gewünscht, muss sie ausdrücklich erzeugt werden (etwa mitPyDict_Copy()) oder über einen Aufruf der neuen APIPyEval_GetFrameLocals().PyFrame_FastToLocals()undPyFrame_FastToLocalsWithError()haben keine Wirkung mehr. Diese Funktionen aufzurufen ist seit Python 3.11 überflüssig, alsPyFrame_GetLocals()erstmals hinzukam.PyFrame_LocalsToFast()hat keine Wirkung mehr. Diese Funktion aufzurufen ist überflüssig, daPyFrame_GetLocals()für optimierte Geltungsbereiche jetzt einen durchschreibenden Stellvertreter zurückgibt.
Python 3.13 hat viele private Funktionen entfernt. Einige davon lassen sich durch diese Alternativen ersetzen:
_PyDict_Pop():PyDict_Pop()oderPyDict_PopString(),_PyDict_GetItemWithError():PyDict_GetItemRef(),_PyErr_WriteUnraisableMsg():PyErr_FormatUnraisable(),_PyEval_SetTrace():PyEval_SetTrace()oderPyEval_SetTraceAllThreads(),_PyList_Extend():PyList_Extend(),_PyLong_AsInt():PyLong_AsInt(),_PyMem_RawStrdup():strdup(),_PyMem_Strdup():strdup(),_PyObject_ClearManagedDict():PyObject_ClearManagedDict(),_PyObject_VisitManagedDict():PyObject_VisitManagedDict(),_PyThreadState_UncheckedGet():PyThreadState_GetUnchecked(),_PyTime_AsSecondsDouble():PyTime_AsSecondsDouble(),_PyTime_GetMonotonicClock():PyTime_Monotonic()oderPyTime_MonotonicRaw(),_PyTime_GetPerfCounter():PyTime_PerfCounter()oderPyTime_PerfCounterRaw(),_PyTime_GetSystemClock():PyTime_Time()oderPyTime_TimeRaw(),_PyTime_MAX:PyTime_MAX,_PyTime_MIN:PyTime_MIN,_PyTime_t:PyTime_t,_Py_HashPointer():Py_HashPointer(),_Py_IsFinalizing():Py_IsFinalizing().
Mit dem pythoncapi-compat project lassen sich die meisten dieser neuen Funktionen auch unter Python 3.12 und älter nutzen.
Änderungen an den Regressionstests¶
Mit
configure--with-pydebuggebautes Python unterstützt jetzt die Befehlszeilenoption-X presite=package.module. Wird sie verwendet, gibt sie ein Modul an, das früh im Lebenszyklus des Interpreters importiert werden soll, bevorsite.pyausgeführt wird. (Beigetragen von Łukasz Langa in gh-110769.)