Was ist neu in Python 3.13¶
- Herausgeber:
Adam Turner und Thomas Wouters
Dieser Artikel erklärt die neuen Funktionen in Python 3.13 im Vergleich zu 3.12. Python 3.13 wurde am 7. Oktober 2024 veröffentlicht. Vollständige Details finden Sie im Changelog.
Siehe auch
PEP 719 – Python 3.13 Release-Zeitplan
Zusammenfassung – Release-Highlights¶
Python 3.13 ist eine stabile Version der Python-Programmiersprache mit einer Mischung aus Änderungen an der Sprache, der Implementierung und der Standardbibliothek. Zu den wichtigsten Änderungen gehören ein neuer interaktiver Interpreter, experimentelle Unterstützung für den Betrieb in einem frei-threadfähigen Modus (PEP 703) und ein Just-In-Time Compiler (PEP 744).
Fehlermeldungen werden weiterhin verbessert, mit standardmäßig farblich hervorgehobenen Tracebacks. Die eingebaute Funktion locals() hat nun definierte Semantik für die Änderung der zurückgegebenen Zuordnung, und Typparameter unterstützen jetzt Standardwerte.
Die Bibliotheksänderungen enthalten die Entfernung von veralteten APIs und Modulen sowie die üblichen Verbesserungen in Bezug auf Benutzerfreundlichkeit und Korrektheit. Mehrere ältere Standardbibliotheksmodule wurden entfernt, nachdem sie in Python 3.11 als veraltet markiert wurden (PEP 594).
Dieser Artikel versucht nicht, eine vollständige Spezifikation aller neuen Funktionen zu liefern, sondern gibt stattdessen einen praktischen Überblick. Vollständige Details finden Sie in der Dokumentation, wie dem Bibliotheksreferenz und der Sprachreferenz. Um die vollständige Implementierung und die Designbegründung für eine Änderung zu verstehen, lesen Sie die PEP für eine bestimmte neue Funktion; beachten Sie jedoch, dass PEPs normalerweise nicht aktuell gehalten werden, sobald eine Funktion vollständig implementiert ist. Sehen Sie Porting zu Python 3.13 für Anleitungen zur Aktualisierung von früheren Python-Versionen.
Interpreter-Verbesserungen
Ein stark verbesserter interaktiver Interpreter und verbesserte Fehlermeldungen.
PEP 667: Die eingebaute Funktion
locals()hat nun definierte Semantik bei der Mutation der zurückgegebenen Zuordnung. Python-Debugger und ähnliche Werkzeuge können nun lokale Variablen in optimierten Bereichen zuverlässiger aktualisieren, auch während der Ausführung von nebenläufigem Code.PEP 703: CPython 3.13 hat experimentelle Unterstützung für den Betrieb mit deaktiviertem Global Interpreter Lock (GIL). Weitere Details finden Sie unter Frei-threadfähiges CPython.
PEP 744: Ein einfacher JIT-Compiler wurde hinzugefügt. Er ist derzeit standardmäßig deaktiviert (obwohl wir ihn später aktivieren könnten). Die Leistungsverbesserungen sind bescheiden – wir erwarten, dies in den nächsten Releases zu verbessern.
Farbunterstützung im neuen interaktiven Interpreter sowie in Tracebacks und doctest-Ausgaben. Dies kann über die Umgebungsvariablen
PYTHON_COLORSundNO_COLORdeaktiviert werden.
Verbesserungen am Python-Datenmodell
__static_attributes__speichert die Namen von Attributen, auf die überself.Xin jeder Funktion im Klassenkörper zugegriffen wird.__firstlineno__zeichnet die Nummer der ersten Zeile einer Klassendefinition auf.
Signifikante Verbesserungen in der Standardbibliothek
Fügen Sie eine neue Ausnahme
PythonFinalizationErrorhinzu, die ausgelöst wird, wenn eine Operation während der Finalisierung blockiert wird.Das Modul
argparseunterstützt jetzt die Kennzeichnung von Kommandozeilenoptionen, Positionsargumenten und Unterbefehlen als veraltet.Die neuen Funktionen
base64.z85encode()undbase64.z85decode()unterstützen das Kodieren und Dekodieren von Z85-Daten.Das Modul
copyhat nun eine Funktioncopy.replace()mit Unterstützung für viele eingebaute Typen und jede Klasse, die die Methode__replace__()definiert.Das neue Modul
dbm.sqlite3ist nun das Standard-Backend fürdbm.Das Modul
oshat eine Sammlung neuer Funktionen für die Arbeit mit Linux' Timer-Benachrichtigungs-Dateideskriptoren.Das Modul
randomhat nun eine Kommandozeilenschnittstelle.
Sicherheitsverbesserungen
ssl.create_default_context()setztssl.VERIFY_X509_PARTIAL_CHAINundssl.VERIFY_X509_STRICTals Standardflags.
C-API-Verbesserungen
Der Slot
Py_mod_gilwird nun verwendet, um anzuzeigen, dass ein Erweiterungsmodul die Ausführung mit deaktiviertem GIL unterstützt.Die PyTime C API wurde hinzugefügt und bietet Zugriff auf Systemuhren.
PyMutexist eine neue leichtgewichtige Mutex, die ein einzelnes Byte belegt.Es gibt eine neue Sammlung von Funktionen zur Generierung von PEP 669-Monitoring-Ereignissen in der C-API.
Neue Typ-Annotation-Funktionen
PEP 696: Typparameter (
typing.TypeVar,typing.ParamSpecundtyping.TypeVarTuple) unterstützen nun Standardwerte.PEP 702: Der neue Dekorator
warnings.deprecated()fügt Unterstützung für die Kennzeichnung von Veralterungen im Typsystem und zur Laufzeit hinzu.PEP 705:
typing.ReadOnlykann verwendet werden, um ein Element einestyping.TypedDictfür Typüberprüfer als schreibgeschützt zu kennzeichnen.PEP 742:
typing.TypeIsbietet ein intuitiveres Typ-Narrowing-Verhalten als Alternative zutyping.TypeGuard.
Plattformunterstützung
PEP 730: Apples iOS ist nun eine offiziell unterstützte Plattform auf Tier 3.
PEP 738: Android ist nun eine offiziell unterstützte Plattform auf Tier 3.
wasm32-wasiwird nun als Tier 2-Plattform unterstützt.wasm32-emscriptenist keine offiziell unterstützte Plattform mehr.
Wichtige Entfernungen
PEP 594: Die verbleibenden 19 „toten Batterien“ (ältere stdlib-Module) wurden aus der Standardbibliothek entfernt:
aifc,audioop,cgi,cgitb,chunk,crypt,imghdr,mailcap,msilib,nis,nntplib,ossaudiodev,pipes,sndhdr,spwd,sunau,telnetlib,uuundxdrlib.Entfernen Sie das Tool 2to3 und das Modul
lib2to3(veraltet in Python 3.11).Entfernen Sie das Modul
tkinter.tix(veraltet in Python 3.6).Entfernen Sie die Funktion
locale.resetlocale().Entfernen Sie die Namensräume
typing.ioundtyping.re.Entfernen Sie verkettete
classmethod-Deskriptoren.
Änderungen am Release-Zeitplan
PEP 602 („Annual Release Cycle for Python“) wurde aktualisiert, um den vollen Support-Zeitraum („Bugfix“) für neue Releases auf zwei Jahre zu verlängern. Diese aktualisierte Richtlinie bedeutet, dass
Python 3.9–3.12 haben anderthalb Jahre vollen Support, gefolgt von dreieinhalb Jahren Sicherheitspatches.
Python 3.13 und neuere Versionen haben zwei Jahre vollen Support, gefolgt von drei Jahren Sicherheitspatches.
Neue Funktionen¶
Ein besserer interaktiver Interpreter¶
Python verwendet nun standardmäßig eine neue interaktive Shell, basierend auf Code aus dem PyPy-Projekt. Wenn der Benutzer die REPL von einem interaktiven Terminal aus startet, werden nun folgende neue Funktionen unterstützt:
Mehrzeilige Bearbeitung mit Speicherung des Verlaufs.
Direkte Unterstützung für REPL-spezifische Befehle wie help, exit und quit, ohne sie als Funktionen aufrufen zu müssen.
Aufforderungen und Tracebacks mit standardmäßig aktivierter Farbe.
Interaktive Hilfe-Browsing mit F1 und einem separaten Befehlsverlauf.
Verlaufs-Browsing mit F2, das Ausgaben sowie die Aufforderungen >>> und … überspringt.
„Paste Mode“ mit F3, der das Einfügen größerer Codeblöcke erleichtert (drücken Sie F3 erneut, um zum regulären Prompt zurückzukehren).
Um die neue interaktive Shell zu deaktivieren, setzen Sie die Umgebungsvariable PYTHON_BASIC_REPL. Weitere Informationen zum interaktiven Modus finden Sie unter Interaktiver Modus.
(Beigetragen von Pablo Galindo Salgado, Łukasz Langa und Lysandros Nikolaou in gh-111201 basierend auf Code aus dem PyPy-Projekt. Windows-Unterstützung von Dino Viehland und Anthony Shaw beigesteuert.)
Verbesserte Fehlermeldungen¶
Der Interpreter verwendet nun standardmäßig Farbe beim Anzeigen von Tracebacks im Terminal. Dieses Feature kann gesteuert werden über die neue Umgebungsvariable
PYTHON_COLORSsowie die kanonischen UmgebungsvariablenNO_COLORundFORCE_COLOR. (Beigetragen von Pablo Galindo Salgado in gh-112730.)Ein häufiger Fehler ist es, ein Skript mit demselben Namen wie ein Standardbibliotheksmodul zu schreiben. Wenn dies zu Fehlern führt, geben wir nun eine hilfreichere Fehlermeldung aus.
$ 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, wenn ein Skript denselben Namen wie ein Drittanbietermodul hat, das es zu importieren versucht, und dies zu Fehlern führt, geben wir ebenfalls eine hilfreichere Fehlermeldung aus.
$ 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 nun, das korrekte Schlüsselwortargument vorzuschlagen, wenn ein falsches Schlüsselwortargument an eine Funktion ü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.)
Frei-threadfähiges CPython¶
CPython verfügt nun über experimentelle Unterstützung für den Betrieb im frei-threadfähigen Modus, wobei der Global Interpreter Lock (GIL) deaktiviert ist. Dies ist eine experimentelle Funktion und daher nicht standardmäßig aktiviert. Der frei-threadfähige Modus erfordert eine andere ausführbare Datei, die normalerweise python3.13t oder python3.13t.exe genannt wird. Vorinstallierte Binärdateien, die als frei-threadfähig gekennzeichnet sind, können als Teil der offiziellen Installer für Windows und macOS installiert werden, oder CPython kann aus dem Quellcode mit der Option --disable-gil erstellt werden.
Die frei-threadfähige Ausführung ermöglicht die volle Auslastung der verfügbaren Rechenleistung durch die parallele Ausführung von Threads auf verfügbaren CPU-Kernen. Obwohl nicht alle Software davon automatisch profitiert, werden Programme, die für Threading konzipiert sind, auf Multi-Core-Hardware schneller ausgeführt. **Der frei-threadfähige Modus ist experimentell** und es wird weiter daran gearbeitet, ihn zu verbessern: erwarten Sie einige Fehler und einen erheblichen Leistungsverlust im Single-Threaded-Betrieb. Frei-threadfähige Builds von CPython unterstützen die optionale Ausführung mit aktiviertem GIL zur Laufzeit über die Umgebungsvariable PYTHON_GIL oder die Kommandozeilenoption -X gil=1.
Um zu überprüfen, ob der aktuelle Interpreter frei-threading unterstützt, enthalten python -VV und sys.version den Hinweis „experimental free-threading build“. Die neue Funktion sys._is_gil_enabled() kann verwendet werden, um zu überprüfen, ob der GIL im laufenden Prozess tatsächlich deaktiviert ist.
C-API-Erweiterungsmodule müssen speziell für den frei-threadfähigen Build erstellt werden. Erweiterungen, die die Ausführung mit deaktiviertem GIL unterstützen, sollten den Slot Py_mod_gil verwenden. Erweiterungen, die eine einphasige Initialisierung verwenden, sollten PyUnstable_Module_SetGIL() verwenden, um anzugeben, ob sie die Ausführung mit deaktiviertem GIL unterstützen. Der Import von C-Erweiterungen, die diese Mechanismen nicht verwenden, führt zur Aktivierung des GIL, es sei denn, der GIL wurde explizit mit der Umgebungsvariable PYTHON_GIL oder der Kommandozeilenoption -X gil=0 deaktiviert. pip 24.1 oder neuer ist erforderlich, um Pakete mit C-Erweiterungen im frei-threadfähigen Build zu installieren.
Diese Arbeit wurde durch viele Einzelpersonen und Organisationen ermöglicht, darunter die große Community von Mitwirkenden an Python und Drittanbieterprojekten, die die Unterstützung für frei-threading getestet und ermöglicht haben. Bemerkenswerte Mitwirkende sind: Sam Gross, Ken Jin, Donghee Na, Itamar Oren, Matt Page, Brett Simmers, Dino Viehland, Carl Meyer, Nathan Goldbaum, Ralf Gommers, Lysandros Nikolaou und viele andere. Viele dieser Mitwirkenden sind bei Meta beschäftigt, das erhebliche technische Ressourcen 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 Informationen zu dieser Arbeit.
Porting Extension Modules to Support Free-Threading: Ein Community-geführter Portierungsleitfaden für Erweiterungsautoren.
Ein experimenteller Just-in-Time (JIT) Compiler¶
Wenn CPython mit der Option --enable-experimental-jit konfiguriert und erstellt wird, wird ein Just-in-Time (JIT) Compiler hinzugefügt, der einige Python-Programme beschleunigen kann. Unter Windows verwenden Sie PCbuild/build.bat --experimental-jit, um den JIT zu aktivieren, oder --experimental-jit-interpreter, um den Tier 2 Interpreter zu aktivieren. Build-Anforderungen und weitere unterstützende Informationen finden Sie unter Tools/jit/README.md.
Die Option --enable-experimental-jit akzeptiert diese (optionalen) Werte und standardmäßig yes, wenn --enable-experimental-jit ohne optionalen Wert vorhanden ist.
no: Deaktiviert die gesamte Tier 2- und JIT-Pipeline.yes: Aktiviert den JIT. Um den JIT zur Laufzeit zu deaktivieren, übergeben Sie die UmgebungsvariablePYTHON_JIT=0.yes-off: Erstellt den JIT, deaktiviert ihn aber standardmäßig. Um den JIT zur Laufzeit zu aktivieren, übergeben Sie die UmgebungsvariablePYTHON_JIT=1.interpreter: Aktiviert den Tier 2 Interpreter, deaktiviert aber den JIT. Der Interpreter kann durch Ausführung mitPYTHON_JIT=0deaktiviert werden.
Die interne Architektur ist ungefähr wie folgt:
Wir beginnen mit spezialisiertem Tier 1 Bytecode. Details finden Sie unter Was ist neu in 3.11.
Wenn der Tier 1 Bytecode heiß genug wird, wird er in eine neue rein interne Zwischenrepräsentation (IR) übersetzt, die als Tier 2 IR bezeichnet wird und manchmal auch als Micro-Ops („uops“) bezeichnet wird.
Die Tier 2 IR verwendet dieselbe stackbasierte virtuelle Maschine wie Tier 1, aber das Befehlsformat eignet sich besser für die Übersetzung in Maschinencode.
Wir haben mehrere Optimierungsdurchläufe für Tier 2 IR, die angewendet werden, bevor er interpretiert oder in Maschinencode übersetzt wird.
Es gibt einen Tier 2 Interpreter, aber er ist hauptsächlich für das Debugging der früheren Stufen der Optimierungspipeline gedacht. Der Tier 2 Interpreter kann durch Konfiguration von Python mit
--enable-experimental-jit=interpreteraktiviert werden.Wenn der JIT aktiviert ist, wird die optimierte Tier 2 IR in Maschinencode übersetzt, der dann ausgeführt wird.
Der Maschinencode-Übersetzungsprozess verwendet eine Technik namens Copy-and-Patch. Er hat keine Laufzeitabhängigkeiten, aber es gibt eine neue Build-Abhängigkeit von LLVM.
Siehe auch
(JIT von Brandt Bucher, inspiriert von einem Paper von Haoran Xu und Fredrik Kjolstad. Tier 2 IR von Mark Shannon und Guido van Rossum. Tier 2 Optimizer von Ken Jin.)
Definierte Mutationssemantik für locals()¶
Historisch gesehen war das erwartete Ergebnis der Mutation des Rückgabewerts von locals() individuellen Python-Implementierungen überlassen. Ab Python 3.13 standardisiert PEP 667 das historische Verhalten von CPython für die meisten Codeausführungsumgebungen, ändert jedoch optimierte Umgebungen (Funktionen, Generatoren, Koroutinen, Comprehensions und Generatorausdrücke), um explizit unabhängige Schnappschüsse der aktuell zugewiesenen lokalen Variablen zurückzugeben, einschließlich lokal referenzierter nichtlokaler Variablen, die in Closures erfasst werden.
Diese Änderung der Semantik von locals() in optimierten Umgebungen wirkt sich auch auf das Standardverhalten von Codeausführungsfunktionen aus, die implizit auf locals() abzielen, wenn kein expliziter Namensraum bereitgestellt wird (wie exec() und eval()). In früheren Versionen war es implementierungsabhängig, ob Änderungen durch Aufruf von locals() nach dem Aufruf der Codeausführungsfunktion zugänglich waren. Insbesondere in CPython schien ein solcher Code normalerweise wie gewünscht zu funktionieren, konnte aber manchmal in optimierten Umgebungen fehlschlagen, basierend auf anderem Code (einschließlich Debuggern und Codeausführungs-Tracing-Tools), der den gemeinsamen Schnappschuss in dieser Umgebung möglicherweise zurücksetzte. Jetzt läuft der Code immer gegen einen unabhängigen Schnappschuss der lokalen Variablen in optimierten Umgebungen, und daher sind die Änderungen bei nachfolgenden Aufrufen von locals() niemals sichtbar. Um die in diesen Fällen vorgenommenen Änderungen abzurufen, muss jetzt ein expliziter Namensraumverweis an die entsprechende Funktion übergeben werden. Alternativ kann es sinnvoll sein, betroffenen Code zu aktualisieren, um eine Codeausführungs-API auf höherer Ebene zu verwenden, die den resultierenden Codeausführungsnamensraum zurückgibt (z. B. runpy.run_path() beim Ausführen von Python-Dateien von der Festplatte).
Um sicherzustellen, dass Debugger und ähnliche Tools lokale Variablen in Umgebungen, die von dieser Änderung betroffen sind, zuverlässig aktualisieren können, gibt FrameType.f_locals in diesen Umgebungen jetzt einen Write-Through-Proxy für die lokalen und lokal referenzierten nichtlokalen Variablen des Frames zurück, anstatt eine inkonsistent aktualisierte freigegebene dict-Instanz mit undefinierten Laufzeitssemantiken zurückzugeben.
Weitere Details, einschließlich relevanter C-API-Änderungen und Deprecations, finden Sie unter PEP 667. Portierungshinweise für die betroffenen Python-APIs und C-APIs finden Sie ebenfalls unten.
(PEP und Implementierung beigesteuert von Mark Shannon und Tian Gao in gh-74929. Dokumentationsaktualisierungen von Guido van Rossum und Alyssa Coghlan.)
Unterstützung für mobile Plattformen¶
PEP 730: iOS ist nun eine PEP 11 unterstützte Plattform, mit den Zielen arm64-apple-ios und arm64-apple-ios-simulator auf Tier 3 (iPhone und iPad Geräte, die nach 2013 veröffentlicht wurden, und der Xcode iOS Simulator, der auf Apple Silicon Hardware läuft). x86_64-apple-ios-simulator (der Xcode iOS Simulator, der auf älterer x86_64 Hardware läuft) ist keine Tier 3 unterstützte Plattform, wird aber bestmöglich unterstützt. (PEP geschrieben und Implementierung beigesteuert von Russell Keith-Magee in gh-114099.)
PEP 738: Android ist nun eine PEP 11 unterstützte Plattform, mit den Zielen aarch64-linux-android und x86_64-linux-android auf Tier 3. Die 32-Bit-Ziele arm-linux-androideabi und i686-linux-android sind keine Tier 3 unterstützten Plattformen, werden aber bestmöglich unterstützt. (PEP geschrieben und Implementierung beigesteuert von Malcolm Smith in gh-116622.)
Andere Sprachänderungen¶
Der Compiler entfernt nun gemeinsame führende Leerzeichen von jeder Zeile eines Docstrings. Dies reduziert die Größe des Bytecode-Caches (wie z. B.
.pyc-Dateien), mit Dateigrößenreduktionen von etwa 5 %, zum Beispiel insqlalchemy.orm.sessionvon SQLAlchemy 2.0. Diese Änderung betrifft Tools, die Docstrings verwenden, wie z. B.doctest.>>> 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'
(Beigesteuert von Inada Naoki in gh-81283.)
Annotation-Umgebungen innerhalb von Klassen-Umgebungen können nun Lambdas und Comprehensions enthalten. Comprehensions, die sich innerhalb von Klassen-Umgebungen befinden, werden nicht in ihre übergeordnete Umgebung inline eingefügt.
class C[T]: type Alias = lambda: T
(Beigesteuert von Jelle Zijlstra in gh-109118 und gh-118160.)
Future-Anweisungen werden nicht mehr durch relative Importe des
__future__-Moduls ausgelöst, was bedeutet, dass Anweisungen der Formfrom .__future__ import ...nun einfach Standard-Relative-Importe sind, ohne dass spezielle Funktionen aktiviert werden. (Beigesteuert von Jeremiah Gabriel Pascual in gh-118216.)global-Deklarationen sind nun inexcept-Blöcken zulässig, wenn dieses globale in demelse-Block verwendet wird. Zuvor wurde hier ein fehlerhaftesSyntaxErrorausgelöst. (Beigesteuert von Irit Katriel in gh-111123.)Hinzufügen von
PYTHON_FROZEN_MODULES, einer neuen Umgebungsvariable, die bestimmt, ob eingefrorene Module von der Importmechanik ignoriert werden, was dem Befehlszeilen-Option-X frozen_modulesentspricht. (Beigesteuert von Yilei Yang in gh-111374.)Hinzufügen von Unterstützung für den perf-Profiler ohne Frame-Pointer über die neue Umgebungsvariable
PYTHON_PERF_JIT_SUPPORTund die Befehlszeilen-Option-X perf_jit. (Beigesteuert von Pablo Galindo in gh-118518.)Der Speicherort einer
.python_history-Datei kann über die neue UmgebungsvariablePYTHON_HISTORYgeändert werden. (Beigesteuert von Levi Sabah, Zackery Spytz und Hugo van Kemenade in gh-73965.)Klassen haben ein neues Attribut
__static_attributes__. Dieses wird vom Compiler mit einem Tupel von Klassennamen gefüllt, die überself.<name>aus einer Funktion in ihrem Körper zugewiesen werden. (Beigesteuert von Irit Katriel in gh-115775.)Der Compiler erstellt nun ein Attribut
__firstlineno__für Klassen mit der Zeilennummer der ersten Zeile der Klassendefinition. (Beigesteuert von Serhiy Storchaka in gh-118465.)Die Builtin-Funktionen
exec()undeval()akzeptieren nun die Argumente globals und locals als Schlüsselwörter. (Beigesteuert von Raphael Gaschignard in gh-105879)Die Builtin-Funktion
compile()akzeptiert nun ein neues Flag,ast.PyCF_OPTIMIZED_AST, dasast.PyCF_ONLY_ASTähnlich ist, mit der Ausnahme, dass das zurückgegebene AST gemäß dem Wert des optimize-Arguments optimiert wird. (Beigesteuert von Irit Katriel in gh-108113).Hinzufügen eines Attributs
__name__zuproperty-Objekten. (Beigesteuert von Eugene Toder in gh-101860.)Hinzufügen von
PythonFinalizationError, einer neuen Ausnahme, die vonRuntimeErrorabgeleitet ist und verwendet wird, um zu signalisieren, wenn Operationen während der Finalisierung blockiert sind. Die folgenden aufrufbaren Elemente lösen nunPythonFinalizationErroranstelle vonRuntimeErroraus:(Beigesteuert von Victor Stinner in gh-114570.)
Erlauben, dass das count-Argument von
str.replace()ein Schlüsselwort ist. (Beigesteuert von Hugo van Kemenade in gh-106487.)Viele Funktionen geben nun eine Warnung aus, wenn ein boolescher Wert als Dateideskriptor-Argument übergeben wird. Dies kann helfen, einige Fehler früher zu erkennen. (Beigesteuert von Serhiy Storchaka in gh-82626.)
Hinzugefügt wurden die Attribute
nameundmodefür komprimierte und archivierte dateiähnliche Objekte in den Modulenbz2,lzma,tarfileundzipfile. (Beigesteuert von Serhiy Storchaka in gh-115961.)
Neue Module¶
dbm.sqlite3: Ein SQLite-Backend fürdbm. (Beigesteuert von Raymond Hettinger und Erlend E. Aasland in gh-100414.)
Verbesserte Module¶
argparse¶
Hinzufügen des Parameters deprecated zu den Methoden
add_argument()undadd_parser(), um die Deprecation von Befehlszeilenoptionen, Positionsargumenten und Unterbefehlen zu ermöglichen. (Beigesteuert von Serhiy Storchaka in gh-83648.)
array¶
Hinzufügen des Typs `'w'` (Code
Py_UCS4) für Unicode-Zeichen. Er sollte anstelle des veralteten Typs `'u'` verwendet werden. (Beigesteuert von Inada Naoki in gh-80480.)Registrieren von
array.arrayalsMutableSequencedurch Implementierung der Methodeclear(). (Beigesteuert von Mike Zimin in gh-114894.)
ast¶
Die Konstruktoren von Knotentypen im
ast-Modul sind nun strenger bei den akzeptierten Argumenten, mit intuitiverem Verhalten, wenn Argumente weggelassen werden.Wenn ein optionales Feld eines AST-Knotens nicht als Argument beim Erstellen einer Instanz enthalten ist, wird das Feld nun auf
Nonegesetzt. Ebenso wird, wenn ein Listenfeld weggelassen wird, dieses Feld nun auf eine leere Liste gesetzt, und wenn einexpr_context-Feld weggelassen wird, ist es standardmäßigLoad(). (Zuvor war in allen Fällen das Attribut auf der neu erstellten AST-Knoteninstanz nicht vorhanden.)In allen anderen Fällen, in denen ein erforderliches Argument weggelassen wird, gibt der Knotenkonstruktor eine
DeprecationWarningaus. Dies löst in Python 3.15 eine Ausnahme aus. Ebenso ist das Übergeben eines Schlüsselwortarguments an den Konstruktor, das keinem Feld auf dem AST-Knoten zugeordnet ist, nun veraltet und löst in Python 3.15 eine Ausnahme aus.Diese Änderungen gelten nicht für benutzerdefinierte Unterklassen von
ast.AST, es sei denn, die Klasse optiert für das neue Verhalten, indem sie dieAST._field_types-Zuordnung definiert.(Beigesteuert von Jelle Zijlstra in gh-105858, gh-117486 und gh-118851.)
ast.parse()akzeptiert nun ein optionales Argument optimize, das ancompile()weitergegeben wird. Dies ermöglicht die Erzielung eines optimierten AST. (Beigesteuert von Irit Katriel in gh-108113.)
asyncio¶
asyncio.as_completed()gibt nun ein Objekt zurück, das sowohl ein asynchroner Iterator als auch ein normaler Iterator von Awaitables ist. Die von der asynchronen Iteration erzeugten Awaitables enthalten die ursprünglichen Task- oder Future-Objekte, die übergeben wurden, was die Zuordnung von Ergebnissen zu den abgeschlossenen Tasks erleichtert. (Beigesteuert von Justin Arthur in gh-77714.)asyncio.loop.create_unix_server()entfernt nun automatisch den Unix-Socket, wenn der Server geschlossen wird. (Beigesteuert von Pierre Ossman in gh-111246.)DatagramTransport.sendto()sendet nun Null-Längen-Datagramme, wenn es mit einem leeren Bytes-Objekt aufgerufen wird. Die Transportflusskontrolle berücksichtigt nun auch den Datagramm-Header bei der Berechnung der Puffergröße. (Beigesteuert von Jamie Phan in gh-115199.)Hinzufügen von
Queue.shutdownundQueueShutDownzur Verwaltung der Warteschlangenterminierung. (Beigesteuert von Laurie Opperman und Yves Duprat in gh-104228.)Hinzufügen der Methoden
Server.close_clients()undServer.abort_clients(), die einen Asyncio-Server stärker schließen. (Beigesteuert von Pierre Ossman in gh-113538.)Akzeptieren eines Tupels von Trennzeichen in
StreamReader.readuntil(), wobei die Funktion stoppt, sobald eines davon angetroffen wird. (Beigesteuert von Bruce Merry in gh-81322.)Verbesserung des Verhaltens von
TaskGroup, wenn eine externe Stornierung mit einer internen Stornierung kollidiert. Wenn beispielsweise zwei Task-Gruppen verschachtelt sind und beide gleichzeitig eine Ausnahme in einem Kind-Task erleben, war es möglich, dass die äußere Task-Gruppe hängt, da ihre interne Stornierung von der inneren Task-Gruppe verschluckt wurde.In dem Fall, dass eine Task-Gruppe extern storniert wird und auch eine
ExceptionGroupauslösen muss, wird nun die Methodecancel()des Eltern-Tasks aufgerufen. Dies stellt sicher, dass bei der nächstenawaiteineCancelledErrorausgelöst wird, sodass die Stornierung nicht verloren geht.Ein zusätzlicher Vorteil dieser Änderungen ist, dass Task-Gruppen nun die Stornierungszahl (
cancelling()) beibehalten.Um einige Eckfälle zu behandeln, kann
uncancel()nun das undokumentierte Flag_must_cancelzurücksetzen, wenn die Stornierungszahl Null erreicht.(Inspiriert von einem von Arthur Tacca gemeldeten Problem in gh-116720.)
Wenn
TaskGroup.create_task()auf einer inaktivenTaskGroupaufgerufen wird, wird die übergebene Koroutine geschlossen (was eineRuntimeWarningdarüber verhindert, dass die übergebene Koroutine nie awaitet wurde). (Beigesteuert von Arthur Tacca und Jason Zhang in gh-115957.)Die Funktionen und Methoden mit dem Namen
create_taskhaben ein neues**kwargs-Argument erhalten, das an den Task-Konstruktor weitergegeben wird. Diese Änderung wurde versehentlich in 3.13.3 hinzugefügt und brach die API-Vereinbarung für benutzerdefinierte Task-Fabriken. Mehrere benutzerdefinierte Task-Fabriken implementierten Workarounds dafür. In 3.13.4 und späteren Versionen wird die alte Fabrikvereinbarung wieder eingehalten (bis 3.14). Um die Workarounds funktionsfähig zu halten, erlaubt das zusätzliche**kwargs-Argument weiterhin die Übergabe zusätzlicher Schlüsselwortargumente anTaskund an benutzerdefinierte Task-Fabriken.Dies betrifft die folgenden Funktionen und Methoden:
asyncio.create_task(),asyncio.loop.create_task(),asyncio.TaskGroup.create_task(). (Beigesteuert von Thomas Grainger in gh-128307.)
base64¶
Hinzufügen der Funktionen
z85encode()undz85decode()zum Kodieren vonbytesals Z85-Daten und zum Dekodieren von Z85-kodierten Daten zubytes. (Beigesteuert von Matan Perelman in gh-75299.)
compileall¶
Die Standardanzahl von Worker-Threads und -Prozessen wird nun mit
os.process_cpu_count()anstelle vonos.cpu_count()ausgewählt. (Beigesteuert von Victor Stinner in gh-109649.)
concurrent.futures¶
Die Standardanzahl von Worker-Threads und -Prozessen wird nun mit
os.process_cpu_count()anstelle vonos.cpu_count()ausgewählt. (Beigesteuert von Victor Stinner in gh-109649.)
configparser¶
ConfigParserunterstützt nun unbenannte Abschnitte, was Schlüssel-Wert-Paare auf oberster Ebene ermöglicht. Dies kann mit dem neuen Parameter allow_unnamed_section aktiviert werden. (Beigesteuert von Pedro Sousa Lacerda in gh-66449.)
copy¶
Die neue Funktion
replace()und dasreplace Protokollmachen die Erstellung modifizierter Kopien von Objekten viel einfacher. Dies ist besonders nützlich bei der Arbeit mit unveränderlichen Objekten. Die folgenden Typen unterstützen die Funktionreplace()und implementieren das Replace-Protokoll:Jede benutzerdefinierte Klasse kann
copy.replace()ebenfalls unterstützen, indem sie die Methode__replace__()definiert. (Beigesteuert von Serhiy Storchaka in gh-108751.)
ctypes¶
Als Folge notwendiger interner Refaktorierungen erfolgt die Initialisierung interner Metaklassen nun in
__init__anstelle von__new__. Dies betrifft Projekte, die diese internen Metaklassen unterklassifizieren, um benutzerdefinierte Initialisierung bereitzustellen. Im Allgemeinen:Benutzerdefinierte Logik, die in
__new__nach dem Aufruf vonsuper().__new__durchgeführt wurde, sollte nach__init__verschoben werden.Um eine Klasse zu erstellen, rufen Sie die Metaklasse auf, nicht nur die
__new__-Methode der Metaklasse.
Siehe gh-124520 für Diskussionen und Links zu Änderungen in einigen betroffenen Projekten.
ctypes.Structure-Objekte haben ein neues Attribut_align_, mit dem die Ausrichtung der Struktur beim Packen/Entpacken aus dem Speicher explizit angegeben werden kann. (Beigetragen von Matt Sanderson in gh-112433)
dbm¶
Fügen Sie
dbm.sqlite3hinzu, ein neues Modul, das ein SQLite-Backend implementiert, und machen Sie es zum Standard-Backend fürdbm. (Beigetragen von Raymond Hettinger und Erlend E. Aasland in gh-100414.)Ermöglicht das Entfernen aller Elemente aus der Datenbank über die neuen
clear()-Methoden der GDBM- und NDBM-Datenbankobjekte. (Beigetragen von Donghee Na in gh-107122.)
dis¶
Ändert die Ausgabe der Funktionen des Moduls
dis, um logische Bezeichnungen für Sprungziele und Ausnahmebehandler anstelle von Offsets anzuzeigen. Die Offsets können mit der neuen Befehlszeilenoption-Ooder dem Argument show_offsets hinzugefügt werden. (Beigetragen von Irit Katriel in gh-112137.)get_instructions()stellt Cache-Einträge nicht mehr als separate Anweisungen dar. Stattdessen werden sie als Teil derInstructionim neuen Feld cache_info zurückgegeben. Das Argument show_caches fürget_instructions()ist veraltet und hat keine Auswirkung mehr. (Beigetragen von Irit Katriel in gh-112962.)
doctest¶
doctest-Ausgaben werden jetzt standardmäßig farbig angezeigt. Dies kann über die neue UmgebungsvariablePYTHON_COLORSsowie die kanonischen UmgebungsvariablenNO_COLORundFORCE_COLORgesteuert werden. Siehe auch Farbe steuern. (Beigetragen von Hugo van Kemenade in gh-117225.)Die Methode
DocTestRunner.run()zählt jetzt die Anzahl der übersprungenen Tests. Hinzugefügt wurden die AttributeDocTestRunner.skipsundTestResults.skipped. (Beigetragen von Victor Stinner in gh-108794.)
email¶
Kopfzeilen mit eingebetteten Zeilenumbrüchen werden nun bei der Ausgabe in Anführungszeichen gesetzt. Der
generatorweigert sich nun, Kopfzeilen zu serialisieren (schreiben), die falsch gefaltet oder getrennt sind, so dass sie als mehrere Kopfzeilen analysiert oder mit benachbarten Daten verbunden würden. Wenn Sie diese Sicherheitsfunktion deaktivieren müssen, setzen Sieverify_generated_headers. (Beigetragen von Bas Bloemsaat und Petr Viktorin in gh-121650.)getaddresses()undparseaddr()geben nun in mehr Situationen, in denen ungültige E-Mail-Adressen angetroffen werden, statt potenziell ungenauer Werte('', '')-Paare zurück. Die beiden Funktionen haben einen neuen optionalen Parameter strict (StandardTrue). Um das alte Verhalten zu erhalten (Akzeptieren von fehlerhaften Eingaben), verwenden Siestrict=False.getattr(email.utils, 'supports_strict_parsing', False)kann verwendet werden, um zu prüfen, ob der Parameter strict verfügbar ist. (Beigetragen von Thomas Dwyer und Victor Stinner für gh-102988 zur Verbesserung der CVE 2023-27043-Korrektur.)
enum¶
fractions¶
Fraction-Objekte unterstützen nun die Standardregeln der Format-Spezifikations-Minisprache für Füllzeichen, Ausrichtung, Vorzeichenbehandlung, minimale Breite und Gruppierung. (Beigetragen von Mark Dickinson in gh-111320.)
glob¶
Fügen Sie
translate()hinzu, eine Funktion zur Konvertierung einer Pfadangabe mit Shell-Wildcards in einen regulären Ausdruck. (Beigetragen von Barney Gale in gh-72904.)
importlib¶
Die folgenden Funktionen in
importlib.resourceserlauben nun den Zugriff auf ein Verzeichnis (oder einen Baum) von Ressourcen, unter Verwendung mehrerer Positionsargumente (die Argumente encoding und errors in den Textlesefunktionen sind jetzt nur noch Schlüsselwortargumente)Diese Funktionen sind nicht mehr veraltet und werden nicht zur Entfernung eingeplant. (Beigetragen von Petr Viktorin in gh-116608.)
contents()bleibt zugunsten der voll ausgestattetenTraversableAPI veraltet. Es gibt jedoch derzeit keine Pläne, sie zu entfernen. (Beigetragen von Petr Viktorin in gh-116608.)
io¶
Der finalisierende Code für
IOBaseprotokolliert nun alle Fehler, die von der Methodeclose()ausgelöst werden, übersys.unraisablehook. Zuvor wurden Fehler standardmäßig stillschweigend ignoriert und nur im Python Development Mode oder bei Verwendung einer Python-Debug-Build protokolliert. (Beigetragen von Victor Stinner in gh-62948.)
ipaddress¶
Fügen Sie die Eigenschaft
IPv4Address.ipv6_mappedhinzu, die die IPv4-mapped IPv6-Adresse zurückgibt. (Beigetragen von Charles Machalow in gh-109466.)Behebt das Verhalten von
is_globalundis_privateinIPv4Address,IPv6Address,IPv4NetworkundIPv6Network. (Beigetragen von Jakub Stasiak in gh-113171.)
itertools¶
batched()hat einen neuen Parameter strict, der einenValueErrorauslöst, wenn der letzte Batch kürzer als die angegebene Batch-Größe ist. (Beigetragen von Raymond Hettinger in gh-113202.)
marshal¶
Fügen Sie den Parameter allow_code in Modulfunktionen hinzu. Die Übergabe von
allow_code=Falseverhindert die Serialisierung und Deserialisierung von Code-Objekten, die zwischen Python-Versionen inkompatibel sind. (Beigetragen von Serhiy Storchaka in gh-113626.)
math¶
Die neue Funktion
fma()führt Fused Multiply-Add-Operationen durch. Diese berechnetx * y + zmit nur einer einzigen Rundung und vermeidet so jeglichen Zwischenverlust an Präzision. Sie wrappt die von C99 bereitgestellte Funktionfma()und folgt der Spezifikation der IEEE 754 "fusedMultiplyAdd"-Operation für Sonderfälle. (Beigetragen von Mark Dickinson und Victor Stinner in gh-73468.)
mimetypes¶
Fügen Sie die Funktion
guess_file_type()hinzu, um einen MIME-Typ aus einem Dateisystempfad zu erraten. Die Verwendung von Pfaden mitguess_type()ist nun soft-deprecated. (Beigetragen von Serhiy Storchaka in gh-66543.)
mmap¶
mmapist nun vor Abstürzen unter Windows geschützt, wenn der zugeordnete Speicher aufgrund von Dateisystemfehlern oder Zugriffsverletzungen unzugänglich ist. (Beigetragen von Jannis Weigend in gh-118209.)mmaphat eine neue Methodeseekable(), die verwendet werden kann, wenn ein suchbares dateiähnliches Objekt benötigt wird. Die Methodeseek()gibt nun die neue absolute Position zurück. (Beigetragen von Donghee Na und Sylvie Liberman in gh-111835.)Der neue UNIX-spezifische Parameter trackfd für
mmapsteuert die Duplizierung des Dateideskriptors; wenn false, wird der durch fileno angegebene Dateideskriptor nicht dupliziert. (Beigetragen von Zackery Spytz und Petr Viktorin in gh-78502.)
multiprocessing¶
Die Standardanzahl von Worker-Threads und -Prozessen wird nun mit
os.process_cpu_count()anstelle vonos.cpu_count()ausgewählt. (Beigesteuert von Victor Stinner in gh-109649.)
os¶
Fügen Sie die Funktion
process_cpu_count()hinzu, um die Anzahl der logischen CPU-Kerne zu ermitteln, die vom aufrufenden Thread des aktuellen Prozesses verwendet werden können. (Beigetragen von Victor Stinner in gh-109649.)cpu_count()undprocess_cpu_count()können über die neue UmgebungsvariablePYTHON_CPU_COUNToder die neue Befehlszeilenoption-X cpu_countüberschrieben werden. Diese Option ist nützlich für Benutzer, die CPU-Ressourcen eines Containertsystems begrenzen müssen, ohne den Anwendungscode oder den Container selbst ändern zu müssen. (Beigetragen von Donghee Na in gh-109595.)Fügen Sie eine Low-Level-Schnittstelle zu den Timer-Dateideskriptoren von Linux über
timerfd_create(),timerfd_settime(),timerfd_settime_ns(),timerfd_gettime(),timerfd_gettime_ns(),TFD_NONBLOCK,TFD_CLOEXEC,TFD_TIMER_ABSTIMEundTFD_TIMER_CANCEL_ON_SEThinzu (Beigetragen von Masaru Tsuchiyama in gh-108277.)lchmod()und das Argument follow_symlinks vonchmod()sind beide nun unter Windows verfügbar. Beachten Sie, dass der Standardwert von follow_symlinks inlchmod()unter WindowsFalseist. (Beigetragen von Serhiy Storchaka in gh-59616.)fchmod()und die Unterstützung für Dateideskriptoren inchmod()sind beide nun unter Windows verfügbar. (Beigetragen von Serhiy Storchaka in gh-113191.)Unter Windows unterstützen
mkdir()undmakedirs()nun die Übergabe eines mode-Wertes von0o700, um Zugriffskontrollen auf das neue Verzeichnis anzuwenden. Dies wirkt sich implizit auftempfile.mkdtemp()aus und ist eine Abmilderung für CVE 2024-4030. Andere Werte für mode werden weiterhin ignoriert. (Beigetragen von Steve Dower in gh-118486.)posix_spawn()akzeptiert nunNonefür das Argument env, wodurch der neu erzeugte Prozess die Umgebung des aktuellen Prozesses verwendet. (Beigetragen von Jakub Kulik in gh-113119.)posix_spawn()kann nun das AttributPOSIX_SPAWN_CLOSEFROMim Parameter file_actions auf Plattformen verwenden, dieposix_spawn_file_actions_addclosefrom_np()unterstützen. (Beigetragen von Jakub Kulik in gh-113117.)
os.path¶
Fügen Sie
isreserved()hinzu, um zu prüfen, ob ein Pfad auf dem aktuellen System reserviert ist. Diese Funktion ist nur unter Windows verfügbar. (Beigetragen von Barney Gale in gh-88569.)Unter Windows betrachtet
isabs()Pfade, die mit genau einem Schrägstrich (\oder/) beginnen, nicht mehr als absolut. (Beigetragen von Barney Gale und Jon Foster in gh-44626.)realpath()löst nun MS-DOS-Stil-Dateinamen auf, auch wenn die Datei nicht zugänglich ist. (Beigetragen von Moonsik Park in gh-82367.)
pathlib¶
Fügen Sie
UnsupportedOperationhinzu, das anstelle vonNotImplementedErrorausgelöst wird, wenn eine Pfadoperation nicht unterstützt wird. (Beigetragen von Barney Gale in gh-89812.)Fügen Sie einen neuen Konstruktor hinzu, um
Path-Objekte aus "file"-URIs (file:///) zu erstellen:Path.from_uri(). (Beigetragen von Barney Gale in gh-107465.)Fügen Sie
PurePath.full_match()zum Abgleichen von Pfaden mit Shell-Wildcards hinzu, einschließlich des rekursiven Wildcards „**“. (Beigetragen von Barney Gale in gh-73435.)Fügen Sie das Klassenattribut
PurePath.parserhinzu, um die Implementierung vonos.pathfür Low-Level-Pfadparsing und -verknüpfung zu speichern. Dies wird entwederposixpathoderntpathsein.Fügen Sie das schlüsselwort-only Argument recurse_symlinks zu
Path.glob()undrglob()hinzu. (Beigetragen von Barney Gale in gh-77609.)Path.glob()undrglob()geben nun Dateien und Verzeichnisse zurück, wenn ein Muster angegeben wird, das mit „**“ endet. Zuvor wurden nur Verzeichnisse zurückgegeben. (Beigetragen von Barney Gale in gh-70303.)Fügen Sie das schlüsselwort-only Argument follow_symlinks zu
Path.is_file,Path.is_dir,Path.owner()undPath.group()hinzu. (Beigetragen von Barney Gale in gh-105793 und Kamil Turek in gh-107962.)
pdb¶
breakpoint()undset_trace()betreten nun sofort den Debugger und nicht erst in der nächsten auszuführenden Codezeile. Diese Änderung verhindert, dass der Debugger außerhalb des Kontexts unterbrochen wird, wennbreakpoint()am Ende des Kontexts platziert ist. (Beigetragen von Tian Gao in gh-118579.)sys.path[0]wird nicht mehr durch das Verzeichnis des zu debuggenden Skripts ersetzt, wennsys.flags.safe_pathgesetzt ist. (Beigetragen von Tian Gao und Christian Walther in gh-111762.)zipappwird nun als Debugging-Ziel unterstützt. (Beigetragen von Tian Gao in gh-118501.)Fügen Sie die Möglichkeit hinzu, zwischen verketteten Ausnahmen während des Post-Mortem-Debuggings in
pm()zu wechseln, indem Sie den neuen Befehlexceptions [exc_number]für Pdb verwenden. (Beigetragen von Matthias Bussonnier in gh-106676.)Ausdrücke und Anweisungen, deren Präfix ein pdb-Befehl ist, werden nun korrekt identifiziert und ausgeführt. (Beigetragen von Tian Gao in gh-108464.)
queue¶
Fügen Sie
Queue.shutdownundShutDownzur Verwaltung der Warteschlangenbeendigung hinzu. (Beigetragen von Laurie Opperman und Yves Duprat in gh-104750.)
random¶
Fügen Sie eine Kommandozeilenschnittstelle hinzu. (Beigetragen von Hugo van Kemenade in gh-118131.)
re¶
Benennen Sie
re.errorinPatternErrorum, um die Klarheit zu verbessern.re.errorwird aus Gründen der Abwärtskompatibilität beibehalten.
shutil¶
site¶
.pth-Dateien werden nun zuerst mit UTF-8 dekodiert und dann mit der Locale-Kodierung, wenn die UTF-8-Dekodierung fehlschlägt. (Beigetragen von Inada Naoki in gh-117802.)
sqlite3¶
Eine
ResourceWarningwird nun ausgegeben, wenn einConnection-Objekt nicht explizitgeschlossenwird. (Beigetragen von Erlend E. Aasland in gh-105539.)Fügen Sie den schlüsselwort-only Parameter filter zu
Connection.iterdump()hinzu, um Datenbankobjekte zu filtern, die gedumpt werden sollen. (Beigetragen von Mariusz Felisiak in gh-91602.)
ssl¶
Die API
create_default_context()beinhaltet nunVERIFY_X509_PARTIAL_CHAINundVERIFY_X509_STRICTin ihren Standardflags.Hinweis
VERIFY_X509_STRICTkann Zertifikate vor-RFC 5280 oder fehlerhafte Zertifikate ablehnen, die die zugrunde liegende OpenSSL-Implementierung möglicherweise andernfalls akzeptieren würde. Obwohl die Deaktivierung nicht empfohlen wird, können Sie dies tun mitimport ssl ctx = ssl.create_default_context() ctx.verify_flags &= ~ssl.VERIFY_X509_STRICT
(Beigetragen von William Woodruff in gh-112389.)
statistics¶
Fügen Sie
kde()für die Kernel-Dichteschätzung hinzu. Dies ermöglicht die Schätzung einer kontinuierlichen Wahrscheinlichkeitsdichtefunktion aus einer festen Anzahl von diskreten Stichproben. (Beigetragen von Raymond Hettinger in gh-115863.)Fügen Sie
kde_random()zum Stichprobenziehen aus einer geschätzten Wahrscheinlichkeitsdichtefunktion hinzu, die vonkde()erstellt wurde. (Beigetragen von Raymond Hettinger in gh-115863.)
subprocess¶
Das Modul
subprocessverwendet nun die Funktionposix_spawn()in mehr Situationen.Bemerkenswerterweise wird, wenn close_fds auf
True(der Standardwert) gesetzt ist,posix_spawn()verwendet, wenn die C-Bibliothekposix_spawn_file_actions_addclosefrom_np()bereitstellt, was aktuelle Versionen von Linux, FreeBSD und Solaris einschließt. Unter Linux sollte dies ähnlich wie der bestehendevfork()-basierte Code funktionieren.Ein privater Steuerknopf
subprocess._USE_POSIX_SPAWNkann aufFalsegesetzt werden, wenn Sie erzwingen möchten, dasssubprocessniemalsposix_spawn()verwendet. Bitte melden Sie Ihren Grund und Ihre Plattformdetails im Issue Tracker, wenn Sie dies tun, damit wir unsere API-Auswahllogik für alle verbessern können. (Beigetragen von Jakub Kulik in gh-113117.)
sys¶
Fügen Sie die Funktion
_is_interned()hinzu, um zu testen, ob ein String interniert wurde. Diese Funktion ist nicht garantiert in allen Implementierungen von Python vorhanden. (Beigetragen von Serhiy Storchaka in gh-78573.)
tempfile¶
Unter Windows beschränkt der Standardmodus
0o700, der vontempfile.mkdtemp()verwendet wird, aufgrund von Änderungen anos.mkdir()den Zugriff auf das neue Verzeichnis. Dies ist eine Abhilfemaßnahme für CVE 2024-4030. (Beigetragen von Steve Dower in gh-118486.)
time¶
Unter Windows verwendet
monotonic()nun dieQueryPerformanceCounter()-Uhr für eine Auflösung von 1 Mikrosekunde, anstelle derGetTickCount64()-Uhr, die eine Auflösung von 15,6 Millisekunden hat. (Beigetragen von Victor Stinner in gh-88494.)Unter Windows verwendet
time()nun dieGetSystemTimePreciseAsFileTime()-Uhr für eine Auflösung von 1 Mikrosekunde, anstelle derGetSystemTimeAsFileTime()-Uhr, die eine Auflösung von 15,6 Millisekunden hat. (Beigetragen von Victor Stinner in gh-63207.)
tkinter¶
Fügen Sie die
tkinter-Widget-Methoden hinzu: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()akzeptiert nun den Attributnamen ohne das Minus-Präfix, um Fensterattribute abzurufen, z. B.w.wm_attributes('alpha'), und ermöglicht die Angabe von Attributen und Werten als Schlüsselwortargumente, z. B.w.wm_attributes(alpha=0.5). (Beigetragen von Serhiy Storchaka in gh-43457.)wm_attributes()kann nun Attribute alsdictzurückgeben, indem der neue optionale schlüsselwortexklusive Parameter return_python_dict verwendet wird. (Beigetragen von Serhiy Storchaka in gh-43457.)Text.count()kann nun ein einfachesintzurückgeben, wenn der neue optionale schlüsselwortexklusive Parameter return_ints verwendet wird. Andernfalls wird die einzelne Anzahl als 1-Tupel oderNonezurückgegeben. (Beigetragen von Serhiy Storchaka in gh-97928.)Unterstützen Sie den Elementtyp „vsapi“ in der Methode
element_create()vontkinter.ttk.Style. (Beigetragen von Serhiy Storchaka in gh-68166.)Fügen Sie die Methode
after_info()für Tkinter-Widgets hinzu. (Beigetragen von Cheryl Sabella in gh-77020.)Fügen Sie der
PhotoImage-Methodecopy_replace()eine neue Methode hinzu, um einen Bereich von einem Bild in ein anderes zu kopieren, möglicherweise mit Pixel-Zoom, Subsampling oder beidem. (Beigetragen von Serhiy Storchaka in gh-118225.)Fügen Sie den Parameter from_coords zu den
PhotoImage-Methodencopy(),zoom()undsubsample()hinzu. Fügen Sie die Parameter zoom und subsample zurPhotoImage-Methodecopy()hinzu. (Beigetragen von Serhiy Storchaka in gh-118225.)Fügen Sie die
PhotoImage-Methodenread()zum Lesen eines Bildes aus einer Datei unddata()zum Abrufen der Bilddaten hinzu. Fügen Sie die Parameter background und grayscale zur Methodewrite()hinzu. (Beigetragen von Serhiy Storchaka in gh-118271.)
traceback¶
Fügen Sie das Attribut
exc_type_strzuTracebackExceptionhinzu, das eine Zeichenfolgendarstellung des exc_type enthält. Deprecieren Sie das Attributexc_type, das das Typobjekt selbst enthält. Fügen Sie den Parameter save_exc_type (StandardwertTrue) hinzu, um anzugeben, ob exc_type gespeichert werden soll. (Beigetragen von Irit Katriel in gh-112332.)Fügen Sie einen neuen schlüsselwortexklusiven Parameter show_group zu
TracebackException.format_exception_only()hinzu, um die verschachtelten Ausnahmen einer Instanz vonBaseExceptionGroup(rekursiv) zu formatieren. (Beigetragen von Irit Katriel in gh-105292.)
types¶
SimpleNamespacekann nun ein einzelnes Positionsargument zur Initialisierung der Argumente des Namespace entgegennehmen. Dieses Argument muss entweder eine Abbildung oder ein Iterable von Schlüssel-Wert-Paaren sein. (Beigetragen von Serhiy Storchaka in gh-108191.)
typing¶
PEP 705: Fügen Sie
ReadOnlyhinzu, einen speziellen Typkonstruktor, um einTypedDict-Element für Typüberprüfer als schreibgeschützt zu markieren.PEP 742: Fügen Sie
TypeIshinzu, einen Typkonstruktor, der verwendet werden kann, um einem Typüberprüfer mitzuteilen, wie ein Typ eingeschränkt werden kann.Fügen Sie
NoDefaulthinzu, ein Sentinel-Objekt, das verwendet wird, um die Standardwerte einiger Parameter im Modultypingdarzustellen. (Beigetragen von Jelle Zijlstra in gh-116126.)Fügen Sie
get_protocol_members()hinzu, um die Menge der Mitglieder zurückzugeben, die eintyping.Protocoldefinieren. (Beigetragen von Jelle Zijlstra in gh-104873.)Fügen Sie
is_protocol()hinzu, um zu prüfen, ob eine Klasse einProtocolist. (Beigetragen von Jelle Zijlstra in gh-104873.)ClassVarkann nun inFinalverschachtelt werden und umgekehrt. (Beigetragen von Mehdi Drissi in gh-89547.)
unicodedata¶
Aktualisieren Sie die Unicode-Datenbank auf Version 15.1.0. (Beigetragen von James Gerity in gh-109559.)
venv¶
Fügen Sie Unterstützung für die Erstellung von Source Control Management (SCM) Ignore-Dateien im Verzeichnis einer virtuellen Umgebung hinzu. Standardmäßig wird Git unterstützt. Dies wird als Opt-in über die API implementiert, die erweitert werden kann, um andere SCMs zu unterstützen (
EnvBuilderundcreate()) und als Opt-out über die CLI mit--without-scm-ignore-files. (Beigetragen von Brett Cannon in gh-108125.)
warnings¶
PEP 702: Der neue Dekorator
warnings.deprecated()bietet eine Möglichkeit, Deprecations an einen statischen Typüberprüfer zu kommunizieren und auf die Verwendung veralteter Klassen und Funktionen hinzuweisen. EineDeprecationWarningkann auch zur Laufzeit emittiert werden, wenn eine dekorierte Funktion oder Klasse verwendet wird. (Beigetragen von Jelle Zijlstra in gh-104003.)
xml¶
Ermöglichen Sie die Steuerung der Wiederholungsumschreibung von Expat >= 2.6.0 (CVE 2023-52425) durch Hinzufügen von fünf neuen Methoden
xml.sax.expatreader.ExpatParser.flush()
(Beigetragen von Sebastian Pipping in gh-115623.)
Fügen Sie die Methode
close()für den voniterparse()zurückgegebenen Iterator für die explizite Bereinigung hinzu. (Beigetragen von Serhiy Storchaka in gh-69893.)
zipimport¶
Optimierungen¶
Mehrere Standardbibliotheksmodule haben deutlich verbesserte Importzeiten. Zum Beispiel wurde die Importzeit des Moduls
typingum etwa ein Drittel reduziert, indem Abhängigkeiten vonreundcontextlibentfernt wurden. Andere Module, die von Importzeit-Beschleunigungen profitieren, sindemail.utils,enum,functools,importlib.metadataundthreading. (Beigetragen von Alex Waygood, Shantanu Jain, Adam Turner, Daniel Hollas und anderen in gh-109653.)textwrap.indent()ist jetzt bei großen Eingaben etwa 30 % schneller als zuvor. (Beigetragen von Inada Naoki in gh-107369.)Das Modul
subprocessverwendet nun die Funktionposix_spawn()in mehr Situationen, einschließlich, wenn close_fdsTrue(der Standardwert) auf vielen modernen Plattformen ist. Dies sollte zu einer deutlichen Leistungssteigerung beim Starten von Prozessen unter FreeBSD und Solaris führen. Einzelheiten finden Sie im Abschnitt subprocess oben. (Beigetragen von Jakub Kulik in gh-113117.)
Entfernte Module und APIs¶
PEP 594: Entfernen von „toten Batterien“ aus der Standardbibliothek¶
PEP 594 schlug die Entfernung von 19 Modulen aus der Standardbibliothek vor, die umgangssprachlich als „tote Batterien“ bezeichnet werden, da sie historisch, veraltet oder unsicher sind. Alle folgenden Module wurden in Python 3.11 als veraltet markiert und sind nun entfernt
aifcstandard-aifc: Verwenden Sie die Weiterverteilung der
aifc-Bibliothek von PyPI.
audioopaudioop-lts: Verwenden Sie die
audioop-lts-Bibliothek von PyPI.
chunkstandard-chunk: Verwenden Sie die Weiterverteilung der
chunk-Bibliothek von PyPI.
cgiundcgitbcgi.FieldStoragekann typischerweise durchurllib.parse.parse_qsl()fürGET- undHEAD-Anfragen ersetzt werden, und das Modulemail.messageoder die Bibliothek multipart fürPOST- undPUT-Anfragen.cgi.parse()kann durch direkten Aufruf vonurllib.parse.parse_qs()auf der gewünschten Query-String ersetzt werden, es sei denn, die Eingabe istmultipart/form-data, die wie unten fürcgi.parse_multipart()beschrieben ersetzt werden sollte.cgi.parse_header()kann durch die Funktionalität des Paketsemailersetzt werden, das die gleichen MIME-RFCs implementiert. Zum Beispiel mitemail.message.EmailMessagefrom 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()kann durch die Funktionalität des Paketsemail, das die gleichen MIME-RFCs implementiert, oder mit der Bibliothek multipart ersetzt werden. Zum Beispiel die Klassenemail.message.EmailMessageundemail.message.Message.standard-cgi: und standard-cgitb: Verwenden Sie die Weiterverteilung der
cgi- undcgitb-Bibliotheken von PyPI.
cryptund die private Erweiterung_crypt. Das Modulhashlibkann ein geeigneter Ersatz sein, wenn einfach nur ein Wert gehasht werden muss. Andernfalls sind verschiedene Drittanbieterbibliotheken auf PyPI verfügbarbcrypt: Moderne Passwort-Hashing für Ihre Software und Ihre Server.
argon2-cffi: Der sichere Argon2-Passwort-Hashing-Algorithmus.
legacycrypt:
ctypesWrapper für den POSIX crypt-Bibliotheksaufruf und zugehörige Funktionalität.crypt_r: Fork des Moduls
crypt, Wrapper für den Bibliotheksaufruf crypt_r(3) und zugehörige Funktionalität.standard-crypt und deprecated-crypt-alternative: Verwenden Sie die Weiterverteilung von
cryptund die Neuimplementierung der Bibliotheken_cryptvon PyPI.
imghdr: Die Bibliotheken filetype, puremagic oder python-magic sollten als Ersatz verwendet werden. Zum Beispiel kann die Funktionpuremagic.what()verwendet werden, um die Funktionimghdr.what()für alle Dateiformate zu ersetzen, die vonimghdrunterstützt wurden.standard-imghdr: Verwenden Sie die Weiterverteilung der
imghdr-Bibliothek von PyPI.
mailcap: Verwenden Sie stattdessen das Modulmimetypes.standard-mailcap: Verwenden Sie die Weiterverteilung der
mailcap-Bibliothek von PyPI.
msilibnisnntplib: Verwenden Sie stattdessen die Bibliothek pynntp von PyPI.standard-nntplib: Verwenden Sie die Weiterverteilung der
nntplib-Bibliothek von PyPI.
ossaudiodev: Für die Audiowiedergabe verwenden Sie stattdessen die Bibliothek pygame von PyPI.pipes: Verwenden Sie stattdessen das Modulsubprocess. Verwenden Sieshlex.quote(), um die undokumentierte Funktionpipes.quotezu ersetzen.standard-pipes: Verwenden Sie die Weiterverteilung der
pipes-Bibliothek von PyPI.
sndhdr: Die Bibliotheken filetype, puremagic oder python-magic sollten als Ersatz verwendet werden.standard-sndhdr: Verwenden Sie die Weiterverteilung der
sndhdr-Bibliothek von PyPI.
spwd: Verwenden Sie stattdessen die Bibliothek python-pam von PyPI.sunaustandard-sunau: Verwenden Sie die Weiterverteilung der
sunau-Bibliothek von PyPI.
telnetlib: Verwenden Sie stattdessen die Bibliotheken telnetlib3 oder Exscript von PyPI.standard-telnetlib: Verwenden Sie die Weiterverteilung der
telnetlib-Bibliothek von PyPI.
uu: Verwenden Sie stattdessen das Modulbase64als moderne Alternative.standard-uu: Verwenden Sie die Weiterverteilung der
uu-Bibliothek von PyPI.
xdrlibstandard-xdrlib: Verwenden Sie die Weiterverteilung der
xdrlib-Bibliothek von PyPI.
(Beigetragen von Victor Stinner und Zachary Ware in gh-104773 und gh-104780.)
2to3¶
Entfernen Sie das Programm 2to3 und das Modul
lib2to3, die zuvor in Python 3.11 als veraltet markiert wurden. (Beigetragen von Victor Stinner in gh-104780.)
builtins¶
Entfernen Sie die Unterstützung für verkettete
classmethod-Deskriptoren (eingeführt in gh-63272). Diese können nicht mehr verwendet werden, um andere Deskriptoren wiepropertyzu umschließen. Das Kernkonzept dieser Funktion war fehlerhaft und führte zu mehreren Problemen. Um einenclassmethodzu „durchleiten“, sollten Sie das Attribut__wrapped__verwenden, das in Python 3.10 hinzugefügt wurde. (Beigetragen von Raymond Hettinger in gh-89519.)Lösen Sie einen
RuntimeErroraus, wennframe.clear()für einen angehaltenen Frame aufgerufen wird (wie es für einen ausführenden Frame immer der Fall war). (Beigetragen von Irit Katriel in gh-79932.)
configparser¶
Entfernen Sie die undokumentierte Klasse
LegacyInterpolation, die seit Python 3.2 in der Dokumentation und seit Python 3.11 zur Laufzeit als veraltet markiert war. (Beigetragen von Hugo van Kemenade in gh-104886.)
importlib.metadata¶
Entfernen Sie den veralteten Subskriptzugriff (
__getitem__()) für EntryPoint-Objekte. (Beigetragen von Jason R. Coombs in gh-113175.)
locale¶
Entfernen Sie die Funktion
locale.resetlocale(), die in Python 3.11 als veraltet markiert wurde. Verwenden Sie stattdessenlocale.setlocale(locale.LC_ALL, ""). (Beigetragen von Victor Stinner in gh-104783.)
opcode¶
Verschieben Sie
opcode.ENABLE_SPECIALIZATIONnach_opcode.ENABLE_SPECIALIZATION. Dieses Feld wurde in 3.12 hinzugefügt, wurde nie dokumentiert und ist nicht für die externe Verwendung bestimmt. (Beigetragen von Irit Katriel in gh-105481.)Entfernen Sie
opcode.is_pseudo(),opcode.MIN_PSEUDO_OPCODEundopcode.MAX_PSEUDO_OPCODE, die in Python 3.12 hinzugefügt wurden, aber weder dokumentiert noch überdisverfügbar waren und nicht für die externe Verwendung bestimmt waren. (Beigetragen von Irit Katriel in gh-105481.)
optparse¶
Dieses Modul gilt nicht mehr als soft deprecated. Obwohl
argparsefür neue Projekte, die keine Befehlszeilenargumentverarbeitungsbibliothek eines Drittanbieters verwenden, weiterhin bevorzugt wird, gibt es Aspekte der Funktionsweise vonargparse, die dazu führen, dass das Low-Level-Moduloptparseeine bessere Grundlage für das *Schreiben* von Argumentverarbeitungsbibliotheken und die Implementierung von Befehlszeilenanwendungen bieten kann, die sich strikter alsargparsean verschiedene Konventionen zur Verarbeitung von Befehlszeilen halten, die im Verhalten der C-Funktiongetopt()ihren Ursprung haben. (Beigetragen von Alyssa Coghlan und Serhiy Storchaka in gh-126180.)
pathlib¶
re¶
Entfernen Sie die undokumentierte, veraltete und fehlerhafte Funktion
re.template()sowie das Flagre.TEMPLATE/re.T. (Beigetragen von Serhiy Storchaka und Nikita Sobolev in gh-105687.)
tkinter.tix¶
Entfernen Sie das Modul
tkinter.tix, das seit Python 3.6 als veraltet markiert war. Die Tix-Bibliothek von Drittanbietern, die das Modul umschloss, ist nicht mehr gepflegt. (Beigetragen von Zachary Ware in gh-75552.)
turtle¶
Entfernen Sie die Methode
RawTurtle.settiltangle(), die seit Python 3.1 in der Dokumentation und seit Python 3.11 zur Laufzeit als veraltet markiert war. (Beigetragen von Hugo van Kemenade in gh-104876.)
typing¶
Entfernen Sie die Namespaces
typing.ioundtyping.re, die seit Python 3.8 als veraltet markiert sind. Die Elemente in diesen Namespaces können direkt aus dem Modultypingimportiert werden. (Beigetragen von Sebastian Rittau in gh-92871.)Entfernen Sie die Methode zur Erstellung von
TypedDict-Typen über Schlüsselwortargumente, die seit Python 3.11 als veraltet markiert ist. (Beigetragen von Tomas Roun in gh-104786.)
unittest¶
Entfernen Sie die folgenden Funktionen von
unittest, die seit Python 3.11 als veraltet markiert sindunittest.findTestCases()unittest.makeSuite()unittest.getTestCaseNames()
Verwenden Sie stattdessen Methoden von
TestLoader(Beigetragen von Hugo van Kemenade in gh-104835.)
Entfernen Sie die nicht getestete und undokumentierte Methode
TestProgram.usageExit(), die seit Python 3.11 als veraltet markiert ist. (Beigetragen von Hugo van Kemenade in gh-104992.)
urllib¶
Entfernen Sie die Parameter cafile, capath und cadefault der Funktion
urllib.request.urlopen(), die seit Python 3.6 als veraltet markiert sind. Verwenden Sie stattdessen den Parameter context mit einer Instanz vonSSLContext. Die Funktionssl.SSLContext.load_cert_chain()kann verwendet werden, um spezifische Zertifikate zu laden, oder Sie könnenssl.create_default_context()die vertrauenswürdigen Zertifizierungsstellen (CA) des Betriebssystems auswählen lassen. (Beigetragen von Victor Stinner in gh-105382.)
webbrowser¶
Entfernen Sie die nicht getestete und undokumentierte Klasse
MacOSX, die seit Python 3.11 als veraltet markiert ist. Verwenden Sie stattdessen die KlasseMacOSXOSAScript(eingeführt in Python 3.2). (Beigetragen von Hugo van Kemenade in gh-104804.)Entfernen Sie das veraltete Attribut
MacOSXOSAScript._name. Verwenden Sie stattdessen das AttributMacOSXOSAScript.name. (Beigetragen von Nikita Sobolev in gh-105546.)
Neue veraltete Funktionen¶
Benutzerdefinierte Funktionen:
Markieren Sie die Zuweisung zum Attribut
__code__einer Funktion als veraltet, wenn der Typ des neuen Codeobjekts nicht mit dem Typ der Funktion übereinstimmt. Die verschiedenen Typen sind: normale Funktion, Generator, asynchroner Generator und Koroutine. (Beigetragen von Irit Katriel in gh-81137.)
-
Markieren Sie den Formatcode
'u'(wchar_t) zur Laufzeit als veraltet. Dieser Formatcode ist seit Python 3.3 in der Dokumentation als veraltet markiert und wird in Python 3.16 entfernt. Verwenden Sie stattdessen den Formatcode'w'(Py_UCS4) für Unicode-Zeichen. (Beigetragen von Hugo van Kemenade in gh-80480.)
-
Markieren Sie die undokumentierte Funktion
SetPointerType()als veraltet, die in Python 3.15 entfernt wird. (Beigetragen von Victor Stinner in gh-105733.)Soft-deprecate die Funktion
ARRAY()zugunsten der Multiplikationtype * length. (Beigetragen von Victor Stinner in gh-105733.)
dis:-
Markieren Sie nicht-ganzzahlige Zahlen als Argumente für Funktionen und Methoden, die Pluralformen im Modul
gettextberücksichtigen, als veraltet, selbst wenn keine Übersetzung gefunden wurde. (Beigetragen von Serhiy Storchaka in gh-88434.)
glob:Markieren Sie die undokumentierten Funktionen
glob0()undglob1()als veraltet. Verwenden Sie stattdessenglob()und übergeben Sie ein pfadähnliches Objekt, das das Stammverzeichnis angibt, an den Parameter root_dir. (Beigetragen von Barney Gale in gh-117337.)
-
Markieren Sie
CGIHTTPRequestHandlerals veraltet, die in Python 3.15 entfernt wird. Prozessbasierte CGI-HTTP-Server sind seit langem veraltet. Dieser Code war veraltet, wurde nicht gepflegt und selten verwendet. Er hat ein hohes Potenzial für Sicherheits- und Funktionsfehler. (Beigetragen von Gregory P. Smith in gh-109096.)Markieren Sie das Flag
--cgifür die Befehlszeilenschnittstelle python -m http.server als veraltet, die in Python 3.15 entfernt wird. (Beigetragen von Gregory P. Smith in gh-109096.)
-
Soft-deprecate Datei-Pfad-Argumente für
guess_type(), verwenden Sie stattdessenguess_file_type(). (Beigetragen von Serhiy Storchaka in gh-66543.)
re:Markieren Sie das Übergeben der optionalen Argumente maxsplit, count oder flags als positionsbezogene Argumente an die Modul-Level-Funktionen
split(),sub()undsubn()als veraltet. Diese Parameter werden in einer zukünftigen Version von Python keyword-only sein. (Beigetragen von Serhiy Storchaka in gh-56166.)
-
Markieren Sie
PurePath.is_reserved()als veraltet, die in Python 3.15 entfernt wird. Verwenden Sieos.path.isreserved(), um reservierte Pfade unter Windows zu erkennen. (Beigetragen von Barney Gale in gh-88569.)
-
Markieren Sie
java_ver()als veraltet, die in Python 3.15 entfernt wird. Diese Funktion ist nur für die Jython-Unterstützung nützlich, hat eine verwirrende API und ist weitgehend ungetestet. (Beigetragen von Nikita Sobolev in gh-116349.)
-
Markieren Sie die undokumentierte Funktion
ispackage()als veraltet. (Beigetragen von Zackery Spytz in gh-64020.)
-
Markieren Sie das Übergeben von mehr als einem positionsbezogenen Argument an die Funktion
connect()und den KonstruktorConnectionals veraltet. Die verbleibenden Parameter werden in Python 3.15 zu keyword-only. (Beigetragen von Erlend E. Aasland in gh-107948.)Markieren Sie das Übergeben von Name, Anzahl der Argumente und der aufrufbaren Funktion als Schlüsselwortargumente für
Connection.create_function()undConnection.create_aggregate()als veraltet. Diese Parameter werden in Python 3.15 zu positional-only. (Beigetragen von Erlend E. Aasland in gh-108278.)Markieren Sie das Übergeben der Callback-Funktion per Schlüsselwort für die Methoden
set_authorizer(),set_progress_handler()undset_trace_callback()der KlasseConnectionals veraltet. Die Callback-Funktionen werden in Python 3.15 zu positional-only. (Beigetragen von Erlend E. Aasland in gh-108278.)
sys:Markieren Sie die Funktion
_enablelegacywindowsfsencoding()als veraltet, die in Python 3.16 entfernt wird. Verwenden Sie stattdessen die UmgebungsvariablePYTHONLEGACYWINDOWSFSENCODING. (Beigetragen von Inada Naoki in gh-73427.)
-
Markieren Sie das undokumentierte und ungenutzte Attribut
TarFile.tarfileals veraltet, das in Python 3.16 entfernt wird. (Beigetragen in gh-115256.)
-
Markieren Sie das Attribut
TracebackException.exc_typeals veraltet. Verwenden Sie stattdessenTracebackException.exc_type_str. (Beigetragen von Irit Katriel in gh-112332.)
-
Markieren Sie die undokumentierte Schlüsselwortargument-Syntax für die Erstellung von
NamedTuple-Klassen (z. B.Point = NamedTuple("Point", x=int, y=int)) als veraltet, die in Python 3.15 entfernt wird. Verwenden Sie stattdessen die klassenbasierte Syntax oder die funktionale Syntax. (Beigetragen von Alex Waygood in gh-105566.)Markieren Sie das Auslassen des Parameters fields bei der Erstellung einer
NamedTuple- odertyping.TypedDict-Klasse sowie das Übergeben vonNonean den Parameter fields beider Typen als veraltet. Python 3.15 erfordert eine gültige Sequenz für den Parameter fields. Um eine NamedTuple-Klasse mit null Feldern zu erstellen, verwenden Sieclass NT(NamedTuple): passoderNT = NamedTuple("NT", ()). Um eine TypedDict-Klasse mit null Feldern zu erstellen, verwenden Sieclass TD(TypedDict): passoderTD = TypedDict("TD", {}). (Beigetragen von Alex Waygood in gh-105566 und gh-105570.)Markieren Sie die Decorator-Funktion
typing.no_type_check_decorator()als veraltet, die in Python 3.15 entfernt wird. Nach acht Jahren im Modultypingwurde sie noch von keinem großen Typenprüfer unterstützt. (Beigetragen von Alex Waygood in gh-106309.)Markieren Sie
typing.AnyStrals veraltet. In Python 3.16 wird es austyping.__all__entfernt, und beim Importieren oder Zugreifen wird zur Laufzeit eineDeprecationWarningausgelöst. Es wird in Python 3.18 vollständig entfernt. Verwenden Sie stattdessen die neue Typenparametrisierungssyntax. (Beigetragen von Michael The in gh-107116.)
wave:Markieren Sie die Methoden
getmark(),setmark()undgetmarkers()der KlassenWave_readundWave_writeals veraltet, die in Python 3.15 entfernt werden. (Beigetragen von Victor Stinner in gh-105096.)
Wird in Python 3.14 entfernt¶
argparse: Die Parameter type, choices und metavar vonargparse.BooleanOptionalActionsind veraltet und werden in 3.14 entfernt. (Beigetragen von Nikita Sobolev in gh-92248.)ast: Die folgenden Funktionen sind seit Python 3.8 in der Dokumentation als veraltet markiert, lösen nun zur Laufzeit eineDeprecationWarningaus, wenn sie aufgerufen oder verwendet werden, und werden in Python 3.14 entferntast.Numast.Strast.Bytesast.NameConstantast.Ellipsis
Verwenden Sie 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. (Beigetragen von Kumar Aditya in 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. (Beigetragen von Kumar Aditya in gh-94597.)Die Methode
get_event_loop()der Standard-Eventloop-Policy löst nun eineDeprecationWarningaus, wenn kein aktueller Eventloop gesetzt ist und dieser einen erstellt. (Beigetragen von Serhiy Storchaka und Guido van Rossum in gh-100160.)
email: Das Argument isdst inemail.utils.localtime()ist veraltet. (Beigetragen von Alan Williams in gh-72346.)importlib.abc: veraltete Klassen
importlib.abc.ResourceReaderimportlib.abc.Traversableimportlib.abc.TraversableResources
Verwenden Sie stattdessen die Klassen von
importlib.resources.abc(Beigetragen von Jason R. Coombs und Hugo van Kemenade in gh-93963.)
itertoolshatte undokumentierte, ineffiziente, historisch fehlerhafte und inkonsistente Unterstützung für Copy-, Deepcopy- und Pickle-Operationen. Dies wird in 3.14 entfernt, um den Codeumfang und den Wartungsaufwand erheblich zu reduzieren. (Beigetragen von Raymond Hettinger in gh-101588.)multiprocessing: Die Standard-Startmethode wird auf Linux, BSDs und anderen Nicht-macOS-POSIX-Plattformen, auf denen'fork'derzeit die Standardmethode ist, auf eine sicherere umgestellt (gh-84559). Das Hinzufügen einer Laufzeitwarnung hierzu wurde als zu störend erachtet, da die Mehrheit des Codes voraussichtlich keine Probleme haben wird. Verwenden Sie die APIsget_context()oderset_start_method(), um explizit anzugeben, wann Ihr Code'fork'*benötigt*. Siehe Kontexte und Startmethoden.pathlib:is_relative_to()undrelative_to(): das Übergeben zusätzlicher Argumente ist veraltet.pkgutil:pkgutil.find_loader()undpkgutil.get_loader()lösen nunDeprecationWarningaus; verwenden Sie stattdessenimportlib.util.find_spec(). (Beigetragen von Nikita Sobolev in gh-97850.)pty:master_open(): verwenden Siepty.openpty().slave_open(): verwenden Siepty.openpty().
-
versionundversion_info.execute()undexecutemany(), wenn benannte Platzhalter verwendet werden und parameters eine Sequenz anstelle einesdictist.
urllib:urllib.parse.Quoterist veraltet: es war nicht als öffentliche API gedacht. (Beigetragen von Gregory P. Smith in gh-88168.)
Zur Entfernung vorgesehen in Python 3.15¶
Das Importsystem
Das Setzen von
__cached__für ein Modul, während__spec__.cachednicht gesetzt wird, ist veraltet. In Python 3.15 wird__cached__vom Import-System oder der Standardbibliothek nicht mehr gesetzt oder berücksichtigt. (gh-97879)Das Setzen von
__package__für ein Modul, während__spec__.parentnicht gesetzt wird, ist veraltet. In Python 3.15 wird__package__vom Import-System oder der Standardbibliothek nicht mehr gesetzt oder berücksichtigt. (gh-97879)
-
Die undokumentierte Funktion
ctypes.SetPointerType()ist seit Python 3.13 veraltet.
-
Die veraltete und selten genutzte
CGIHTTPRequestHandlerist seit Python 3.13 veraltet. Es gibt keinen direkten Ersatz. *Alles* ist besser als CGI, um einen Webserver mit einem Request-Handler zu verbinden.Das Flag
--cgifür die Kommandozeilenschnittstelle python -m http.server ist seit Python 3.13 veraltet.
-
Methode
load_module(): verwenden Sie stattdessenexec_module().
-
Die Funktion
getdefaultlocale()ist seit Python 3.11 veraltet. Ihre Entfernung war ursprünglich für Python 3.13 (gh-90817) geplant, wurde aber auf Python 3.15 verschoben. Verwenden Sie stattdessengetlocale(),setlocale()undgetencoding(). (Beigetragen von Hugo van Kemenade in gh-111187.)
-
PurePath.is_reserved()ist seit Python 3.13 veraltet. Verwenden Sieos.path.isreserved(), um reservierte Pfade unter Windows zu erkennen.
-
java_ver()ist seit Python 3.13 veraltet. Diese Funktion ist nur für die Jython-Unterstützung nützlich, hat eine verwirrende API und wird weitgehend nicht getestet.
-
Das Argument check_home von
sysconfig.is_python_build()ist seit Python 3.12 veraltet.
-
RLock()wird in Python 3.15 keine Argumente mehr akzeptieren. Das Übergeben von Argumenten ist seit Python 3.14 veraltet, da die Python-Version keine Argumente zulässt, die C-Version jedoch beliebige Positions- oder Schlüsselwortargumente zulässt und alle ignoriert.
-
types.CodeType: Der Zugriff aufco_lnotabwurde in PEP 626 seit 3.10 als veraltet markiert und sollte in 3.12 entfernt werden, erhielt aber erst in 3.12 eine ordnungsgemäßeDeprecationWarning. Kann in 3.15 entfernt werden. (Beigetragen von Nikita Sobolev in gh-101866.)
-
Die undokumentierte Schlüsselwortargument-Syntax für die Erstellung von
NamedTuple-Klassen (z. B.Point = NamedTuple("Point", x=int, y=int)) ist seit Python 3.13 veraltet. Verwenden Sie stattdessen die klassenbasierte Syntax oder die funktionale Syntax.Bei Verwendung der funktionalen Syntax von
TypedDicts ist das Nicht-Übergeben eines Werts an den Parameter fields (TD = TypedDict("TD")) oder das Übergeben vonNone(TD = TypedDict("TD", None)) seit Python 3.13 als veraltet markiert. Verwenden Sieclass TD(TypedDict): passoderTD = TypedDict("TD", {}), um einen TypedDict mit null Feldern zu erstellen.Der Dekorator
typing.no_type_check_decorator()ist seit Python 3.13 veraltet. Nach acht Jahren im Modultypingwurde er von keinem wichtigen Typ-Checker unterstützt.
wave:Die Methoden
getmark(),setmark()undgetmarkers()der KlassenWave_readundWave_writesind seit Python 3.13 veraltet.
-
load_module()ist seit Python 3.10 veraltet. Verwenden Sie stattdessenexec_module(). (Beigetragen von Jiahao Li in gh-125746.)
Vorschlag zur Entfernung in Python 3.16¶
Das Importsystem
Das Setzen von
__loader__für ein Modul, während gleichzeitig__spec__.loadernicht gesetzt wird, ist veraltet. In Python 3.16 wird__loader__vom Importsystem und der Standardbibliothek weder gesetzt noch berücksichtigt.
-
Der Formatcode
'u'(wchar_t) ist seit Python 3.3 in der Dokumentation und seit Python 3.13 zur Laufzeit veraltet. Verwenden Sie stattdessen den Formatcode'w'(Py_UCS4) für Unicode-Zeichen.
-
asyncio.iscoroutinefunction()ist veraltet und wird in Python 3.16 entfernt; verwenden Sie stattdesseninspect.iscoroutinefunction(). (Beigetragen von Jiahao Li und Kumar Aditya in gh-122875.)Das Richtliniensystem von
asyncioist veraltet und wird in Python 3.16 entfernt. Insbesondere sind die folgenden Klassen und Funktionen veraltet:Benutzer sollten
asyncio.run()oderasyncio.Runnermit loop_factory verwenden, um die gewünschte Event-Loop-Implementierung zu nutzen.Zum Beispiel, um
asyncio.SelectorEventLoopunter Windows zu verwendenimport asyncio async def main(): ... asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)
(Beigetragen von Kumar Aditya in gh-127949.)
-
Bitweise Inversion auf booleschen Typen,
~Trueoder~False, ist seit Python 3.12 veraltet, da sie überraschende und unintuitive Ergebnisse liefert (-2und-1). Verwenden Sie stattdessennot xfür die logische Negation eines Boole-Wertes. In dem seltenen Fall, dass Sie die bitweise Inversion der zugrunde liegenden Ganzzahl benötigen, konvertieren Sie explizit zuint(~int(x)).
-
Das Aufrufen der Python-Implementierung von
functools.reduce()mit function oder sequence als Schlüsselwortargumente ist seit Python 3.14 veraltet.
-
Die Unterstützung für benutzerdefinierte Logging-Handler mit dem Argument strm ist veraltet und soll in Python 3.16 entfernt werden. Definieren Sie Handler stattdessen mit dem Argument stream. (Beigetragen von Mariusz Felisiak in gh-115032.)
-
Gültige Erweiterungen beginnen mit einem Punkt oder sind leer für
mimetypes.MimeTypes.add_type(). Nicht-punktierte Erweiterungen 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 wurde seit Python 3.4 von keiner Funktion inshutilverwendet und ist nun ein Alias fürRuntimeError.
-
Die Methode
Class.get_methodsist seit Python 3.14 veraltet.
sys:Die Funktion
_enablelegacywindowsfsencoding()ist seit Python 3.13 veraltet. Verwenden Sie stattdessen die UmgebungsvariablePYTHONLEGACYWINDOWSFSENCODING.
-
Die Funktion
sysconfig.expand_makefile_vars()ist seit Python 3.14 veraltet. Verwenden Sie stattdessen das Argument vars vonsysconfig.get_paths().
-
Das undokumentierte und ungenutzte Attribut
TarFile.tarfileist seit Python 3.13 veraltet.
Zur Entfernung vorgesehen in Python 3.17¶
-
collections.abc.ByteStringist für die Entfernung in Python 3.17 geplant.Verwenden Sie
isinstance(obj, collections.abc.Buffer), um zur Laufzeit zu testen, obobjdas Buffer-Protokoll implementiert. Für die Verwendung in Typ-Annotationen verwenden Sie entwederBufferoder eine Union, die explizit die von Ihrem Code unterstützten Typen angibt (z. B.bytes | bytearray | memoryview).ByteStringwar ursprünglich als abstrakte Klasse gedacht, die als Oberklasse sowohl fürbytesals auch fürbytearraydienen sollte. Da die ABC jedoch nie Methoden hatte, wusste man nie wirklich etwas Nützliches über ein Objekt, nur weil es eine Instanz vonByteStringwar. Andere gängige Puffertypen wiememoryviewwurden auch nie als Untertypen vonByteStringverstanden (weder zur Laufzeit noch von statischen Typprüfern).Weitere Details finden Sie in PEP 688. (Beigetragen von Shantanu Jain in gh-91896.)
-
Vor Python 3.14 wurden alte Unions mit der privaten Klasse
typing._UnionGenericAliasimplementiert. Diese Klasse wird für die Implementierung nicht mehr benötigt, wurde aber zur Abwärtskompatibilität beibehalten und soll spätestens in Python 3.17 entfernt werden. Benutzer sollten dokumentierte Introspektionshilfen wietyping.get_origin()undtyping.get_args()verwenden, anstatt sich auf private Implementierungsdetails zu verlassen.typing.ByteString, das seit Python 3.9 veraltet ist, ist für die Entfernung in Python 3.17 geplant.Verwenden Sie
isinstance(obj, collections.abc.Buffer), um zur Laufzeit zu testen, obobjdas Buffer-Protokoll implementiert. Für die Verwendung in Typ-Annotationen verwenden Sie entwederBufferoder eine Union, die explizit die von Ihrem Code unterstützten Typen angibt (z. B.bytes | bytearray | memoryview).ByteStringwar ursprünglich als abstrakte Klasse gedacht, die als Oberklasse sowohl fürbytesals auch fürbytearraydienen sollte. Da die ABC jedoch nie Methoden hatte, wusste man nie wirklich etwas Nützliches über ein Objekt, nur weil es eine Instanz vonByteStringwar. Andere gängige Puffertypen wiememoryviewwurden auch nie als Untertypen vonByteStringverstanden (weder zur Laufzeit noch von statischen Typprüfern).Weitere Details finden Sie in PEP 688. (Beigetragen von Shantanu Jain in gh-91896.)
Zur Entfernung vorgesehen in zukünftigen Versionen¶
Die folgenden APIs werden in Zukunft entfernt, obwohl derzeit kein Datum für ihre Entfernung geplant ist.
-
Verschachtelte Argumentgruppen und verschachtelte gegenseitig ausschließende Gruppen sind veraltet.
Das Übergeben des undokumentierten Schlüsselwortarguments prefix_chars an
add_argument_group()ist nun veraltet.Der Typ-Konverter
argparse.FileTypeist veraltet.
-
Generatoren: Die Signatur
throw(type, exc, tb)undathrow(type, exc, tb)ist veraltet: verwenden Sie stattdessenthrow(exc)undathrow(exc), die Signatur mit einem einzigen Argument.Derzeit akzeptiert Python numerische Literale, denen unmittelbar Schlüsselwörter folgen, z. B.
0in x,1or x,0if 1else 2. Dies ermöglicht verwirrende und mehrdeutige Ausdrücke wie[0x1for x in y](was als[0x1 for x in y]oder[0x1f or x in y]interpretiert werden kann). Es wird eine Syntaxwarnung ausgegeben, wenn auf das numerische Literal unmittelbar eines der Schlüsselwörterand,else,for,if,in,isundorfolgt. In einer zukünftigen Version wird dies zu einem Syntaxfehler geändert. (gh-87999)Unterstützung für die Methode
__index__()und__int__(), die einen Nicht-Int-Typ zurückgibt: diese Methoden müssen eine Instanz einer strengen Unterklasse vonintzurückgeben.Unterstützung für die Methode
__float__(), die eine strenge Unterklasse vonfloatzurückgibt: diese Methoden müssen eine Instanz vonfloatzurückgeben.Unterstützung für die Methode
__complex__(), die eine strenge Unterklasse voncomplexzurückgibt: diese Methoden müssen eine Instanz voncomplexzurückgeben.Delegation von
int()an die Methode__trunc__().Das Übergeben einer komplexen Zahl als Argument real oder imag im Konstruktor
complex()ist nun veraltet; sie sollte nur als einzelnes 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: Verwenden Sieopen()anstelle voncodecs.open(). (gh-133038)codeobject.co_lnotab: Verwenden Sie stattdessen die Methodecodeobject.co_lines().-
utcnow(): Verwenden Siedatetime.datetime.now(tz=datetime.UTC).utcfromtimestamp(): Verwenden Siedatetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC).
gettext: Der Pluralwert muss eine ganze Zahl sein.-
Der Parameter debug_override von
cache_from_source()ist veraltet: verwenden Sie stattdessen den Parameter optimization.
-
Schnittstelle des
EntryPoints-Tupels.Implizites
Nonebei Rückgabewerten.
logging: Die Methodewarn()ist seit Python 3.3 veraltet, verwenden Sie stattdessenwarning().mailbox: Die Verwendung von StringIO-Eingabe und Textmodus ist veraltet, verwenden Sie stattdessen BytesIO und Binärmodus.os: Aufruf vonos.register_at_fork()in einem Multithreading-Prozess.pydoc.ErrorDuringImport: Die Übergabe eines Tupelwerts für den Parameter exc_info ist veraltet, verwenden Sie stattdessen eine Ausnahmeinstanz.re: Für numerische Gruppennummern und Gruppennamen in regulären Ausdrücken werden nun strengere Regeln angewendet. Nur eine Sequenz von ASCII-Ziffern wird nun als numerische Referenz akzeptiert. Der Gruppenname in Byte-Mustern und Ersetzungszeichenfolgen darf nun nur ASCII-Buchstaben, Ziffern und Unterstriche enthalten. (Beigetragen von Serhiy Storchaka in gh-91760.)Module
sre_compile,sre_constantsundsre_parse.shutil: Das Parameter onerror vonrmtree()ist in Python 3.12 veraltet; verwenden Sie stattdessen den Parameter onexc.SSL-Optionen und -Protokolle
ssl.SSLContextohne Protokollargument ist veraltet.ssl.SSLContext:set_npn_protocols()undselected_npn_protocol()sind veraltet: verwenden Sie 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
threadingthreading.Condition.notifyAll(): verwenden Sienotify_all().threading.Event.isSet(): verwenden Sieis_set().threading.Thread.isDaemon(),threading.Thread.setDaemon(): verwenden Sie das Attributthreading.Thread.daemon.threading.Thread.getName(),threading.Thread.setName(): verwenden Sie das Attributthreading.Thread.name.threading.currentThread(): verwenden Siethreading.current_thread().threading.activeCount(): verwenden Siethreading.active_count().
Die interne Klasse
typing._UnionGenericAliaswird nicht mehr zur Implementierung vontyping.Unionverwendet. Um die Kompatibilität mit Benutzern dieser privaten Klasse zu erhalten, wird bis mindestens Python 3.17 ein Kompatibilitäts-Shim bereitgestellt. (Beigetragen von Jelle Zijlstra in gh-105499.)unittest.IsolatedAsyncioTestCase: Es ist veraltet, einen Wert zurückzugeben, der nichtNoneist, von einem Testfall.Veraltete Funktionen in
urllib.parse: stattdessenurlparse()splitattr()splithost()splitnport()splitpasswd()splitport()splitquery()splittag()splittype()splituser()splitvalue()to_bytes()
wsgiref:SimpleHandler.stdout.write()sollte keine Teil-Schreibvorgänge durchführen.xml.etree.ElementTree: Das Testen des Wahrheitswerts einesElementist veraltet. In einer zukünftigen Version wird dies immerTruezurückgeben. Bevorzugen Sie explizite Tests mitlen(elem)oderelem is not None.sys._clear_type_cache()ist veraltet: verwenden Sie stattdessensys._clear_internal_caches().
CPython Bytecode-Änderungen¶
Der `oparg` von
YIELD_VALUEist jetzt1, wenn das Yield Teil eines Yield-From oder await ist, und0sonst. Der `oparg` vonRESUMEwurde geändert, um ein Bit hinzuzufügen, das angibt, ob die Ausnahme-Tiefe 1 ist, was zur Optimierung des Schließens von Generatoren erforderlich ist. (Beigetragen von Irit Katriel in gh-111354.)
C-API-Änderungen¶
Neue Funktionen¶
Fügt die PyMonitoring C API zur Erzeugung von PEP 669 Monitoring-Ereignissen hinzu
PyMonitoring_FireBranchEvent
(Beigetragen von Irit Katriel in gh-111997).
Fügt
PyMutexhinzu, eine leichtgewichtige Mutex, die ein einzelnes Byte belegt, sowie die neuen FunktionenPyMutex_Lock()undPyMutex_Unlock().PyMutex_Lock()gibt die GIL frei (falls derzeit gehalten), wenn die Operation blockieren muss. (Beigetragen von Sam Gross in gh-108724.)Fügt die PyTime C API hinzu, um Zugriff auf Systemuhren zu ermöglichen
PyTime_MINundPyTime_MAX.
(Beigetragen von Victor Stinner und Petr Viktorin in gh-110850.)
Fügt die Funktion
PyDict_ContainsString()hinzu, die das gleiche Verhalten wiePyDict_Contains()hat, aber key als UTF-8-kodierten Byte-String (const char*) und nicht als PyObject* spezifiziert. (Beigetragen von Victor Stinner in gh-108314.)Fügt die Funktionen
PyDict_GetItemRef()undPyDict_GetItemStringRef()hinzu, die sich ähnlich wiePyDict_GetItemWithError()verhalten, aber eine starke Referenz anstelle einer geliehenen Referenz zurückgeben. Darüber hinaus geben diese Funktionen bei einem Fehler-1zurück, wodurch die Notwendigkeit,PyErr_Occurred()zu überprüfen, entfällt. (Beigetragen von Victor Stinner in gh-106004.)Fügt die Funktion
PyDict_SetDefaultRef()hinzu, die sich ähnlich wiePyDict_SetDefault()verhält, aber eine starke Referenz anstelle einer geliehenen Referenz zurückgibt. Diese Funktion gibt bei einem Fehler-1, bei einer Einfügung0und1zurück, wenn der Schlüssel bereits im Dictionary vorhanden war. (Beigetragen von Sam Gross in gh-112066.)Fügt die Funktionen
PyDict_Pop()undPyDict_PopString()hinzu, um einen Schlüssel aus einem Dictionary zu entfernen und optional den entfernten Wert zurückzugeben. Dies ähneltdict.pop(), obwohl es keinen Standardwert gibt und bei fehlenden Schlüsseln keinKeyErrorausgelöst wird. (Beigetragen von Stefan Behnel und Victor Stinner in gh-111262.)Fügt die Funktionen
PyMapping_GetOptionalItem()undPyMapping_GetOptionalItemString()als Alternativen zuPyObject_GetItem()bzw.PyMapping_GetItemString()hinzu. Die neuen Funktionen lösen keinenKeyErroraus, wenn der angeforderte Schlüssel im Mapping fehlt. Diese Varianten sind bequemer und schneller, wenn ein fehlender Schlüssel nicht als Fehler behandelt werden soll. (Beigetragen von Serhiy Storchaka in gh-106307.)Fügt die Funktionen
PyObject_GetOptionalAttr()undPyObject_GetOptionalAttrString()als Alternativen zuPyObject_GetAttr()bzw.PyObject_GetAttrString()hinzu. Die neuen Funktionen lösen keineAttributeErroraus, wenn das angeforderte Attribut nicht auf dem Objekt gefunden wird. Diese Varianten sind bequemer und schneller, wenn das fehlende Attribut nicht als Fehler behandelt werden soll. (Beigetragen von Serhiy Storchaka in gh-106521.)Fügt die Funktion
PyErr_FormatUnraisable()als Erweiterung zuPyErr_WriteUnraisable()hinzu, die es ermöglicht, die Warnmeldung anzupassen. (Beigetragen von Serhiy Storchaka in gh-108082.)Fügt neue Funktionen hinzu, die eine starke Referenz anstelle einer geliehenen Referenz für Frame-Locals, Globals und Builtins zurückgeben, als Teil von PEP 667
(Beigetragen von Mark Shannon und Tian Gao in gh-74929.)
Fügt die Funktionen
Py_GetConstant()undPy_GetConstantBorrowed()hinzu, um starke oder geliehene Referenzen auf Konstanten zu erhalten. Zum Beispiel gibtPy_GetConstant(Py_CONSTANT_ZERO)eine starke Referenz auf die Konstante Null zurück. (Beigetragen von Victor Stinner in gh-115754.)Fügt die Funktion
PyImport_AddModuleRef()als Ersatz fürPyImport_AddModule()hinzu, die eine starke Referenz anstelle einer geliehenen Referenz zurückgibt. (Beigetragen von Victor Stinner in gh-105922.)Fügt die Funktion
Py_IsFinalizing()hinzu, um zu überprüfen, ob der Haupt-Python-Interpreter heruntergefahren wird. (Beigetragen von Victor Stinner in gh-108014.)Fügt die Funktion
PyList_GetItemRef()als Ersatz fürPyList_GetItem()hinzu, die eine starke Referenz anstelle einer geliehenen Referenz zurückgibt. (Beigetragen von Sam Gross in gh-114329.)Fügt die Funktionen
PyList_Extend()undPyList_Clear()hinzu, die den Python-Methodenlist.extend()undlist.clear()entsprechen. (Beigetragen von Victor Stinner in gh-111138.)Fügt die Funktion
PyLong_AsInt()hinzu. Sie verhält sich ähnlich wiePyLong_AsLong(), speichert das Ergebnis jedoch in einem C-int anstelle eines C-long. (Beigetragen von Victor Stinner in gh-108014.)Fügt die Funktionen
PyLong_AsNativeBytes(),PyLong_FromNativeBytes()undPyLong_FromUnsignedNativeBytes()hinzu, um die Konvertierung zwischen nativen Ganzzahltypen und Pythonint-Objekten zu vereinfachen. (Beigetragen von Steve Dower in gh-111140.)Fügt die Funktion
PyModule_Add()hinzu, diePyModule_AddObjectRef()undPyModule_AddObject()ähnelt, aber immer eine Referenz auf den Wert stiehlt. (Beigetragen von Serhiy Storchaka in gh-86493.)Fügt die Funktion
PyObject_GenericHash()hinzu, die die Standard-Hash-Funktion eines Python-Objekts implementiert. (Beigetragen von Serhiy Storchaka in gh-113024.)Fügt die Funktion
Py_HashPointer()hinzu, um einen Rohzeiger zu hashen. (Beigetragen von Victor Stinner in gh-111545.)Fügt die Funktionen
PyObject_VisitManagedDict()undPyObject_ClearManagedDict()hinzu, die von den Traverse- und Clear-Funktionen eines Typs mit dem FlagPy_TPFLAGS_MANAGED_DICTaufgerufen werden müssen. Das Projekt pythoncapi-compat kann verwendet werden, um diese Funktionen mit Python 3.11 und 3.12 zu nutzen. (Beigetragen von Victor Stinner in gh-107073.)Fügt die Funktionen
PyRefTracer_SetTracer()undPyRefTracer_GetTracer()hinzu, die das Nachverfolgen der Objekterstellung und -zerstörung auf die gleiche Weise wie das Modultracemallocermöglichen. (Beigetragen von Pablo Galindo in gh-93502.)Fügt die Funktion
PySys_AuditTuple()hinzu, die eine Alternative zuPySys_Audit()darstellt und Ereignisargumente als Python-tuple-Objekt entgegennimmt. (Beigetragen von Victor Stinner in gh-85283.)Fügt die Funktion
PyThreadState_GetUnchecked()als Alternative zuPyThreadState_Get()hinzu, die den Prozess nicht mit einem fatalen Fehler beendet, wenn sieNULList. Der Aufrufer ist dafür verantwortlich, zu überprüfen, ob das ErgebnisNULList. (Beigetragen von Victor Stinner in gh-108867.)Fügt die Funktion
PyType_GetFullyQualifiedName()hinzu, um den vollständig qualifizierten Namen eines Typs zu erhalten. Der Modulname wird vorangestellt, wenntype.__module__ein String ist und weder'builtins'noch'__main__'ist. (Beigetragen von Victor Stinner in gh-111696.)Fügt die Funktion
PyType_GetModuleName()hinzu, um den Modulnamen eines Typs zu erhalten. Dies entspricht dem Abrufen des Attributstype.__module__. (Beigetragen von Eric Snow und Victor Stinner in gh-111696.)Fügen Sie die Funktionen
PyUnicode_EqualToUTF8AndSize()undPyUnicode_EqualToUTF8()hinzu, um ein Unicode-Objekt mit einem UTF-8-kodierten String (const char*) zu vergleichen und1zurückzugeben, wenn sie gleich sind, oder0andernfalls. Diese Funktionen lösen keine Ausnahmen aus. (Beigetragen von Serhiy Storchaka in gh-110289.)Fügen Sie die Funktion
PyWeakref_GetRef()als Alternative zuPyWeakref_GetObject()hinzu, die eine starke Referenz zurückgibt oderNULL, wenn das referenzierte Objekt nicht mehr existiert. (Beigetragen von Victor Stinner in gh-105927.)Fügen Sie feste Varianten von Funktionen hinzu, die Fehler stillschweigend ignorieren
PyObject_HasAttrStringWithError()ersetztPyObject_HasAttrString().PyMapping_HasKeyStringWithError()ersetztPyMapping_HasKeyString().
Die neuen Funktionen geben
-1für Fehler und die Standardwerte1für wahr und0für falsch zurück.(Beigetragen von Serhiy Storchaka in gh-108511.)
Geänderte C-APIs¶
Der Parameter keywords von
PyArg_ParseTupleAndKeywords()undPyArg_VaParseTupleAndKeywords()hat nun in C den Typ char *const* und in C++ den Typ char *const*, anstelle von char**. In C++ macht dies diese Funktionen kompatibel mit Argumenten vom Typ const char *const*, const char** oder char *const* ohne expliziten Typ-Cast. In C unterstützen die Funktionen nur Argumente vom Typ char *const*. Dies kann mit dem MakroPY_CXX_CONSTüberschrieben werden. (Beigetragen von Serhiy Storchaka in gh-65210.)PyArg_ParseTupleAndKeywords()unterstützt nun Nicht-ASCII-Namen für Schlüsselwortparameter. (Beigetragen von Serhiy Storchaka in gh-110815.)Die Funktion
PyCode_GetFirstFree()ist nun eine 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 aufgetretenen Fehler beim Aufruf löschen, melden diese Fehler nun übersys.unraisablehook(). Sie können sie durch andere Funktionen ersetzen, wie in der Dokumentation empfohlen. (Beigetragen von Serhiy Storchaka in gh-106672.)Unterstützung für die Formate
%T,%#T,%Nund%#NfürPyUnicode_FromFormat()hinzufügen%T: Ruft den vollqualifizierten Namen eines Objekttyps ab%#T: Wie oben, aber verwendet einen Doppelpunkt als Trennzeichen%N: Ruft den vollqualifizierten Namen eines Typs ab%#N: Wie oben, aber verwendet einen Doppelpunkt als Trennzeichen
Siehe PEP 737 für weitere Informationen. (Beigetragen von Victor Stinner in gh-111696.)
Sie müssen das Makro
PY_SSIZE_T_CLEANnicht mehr definieren, bevor SiePython.heinschließen, wenn Sie#Formate in Formatcodes verwenden. APIs, die die Formatcodes akzeptieren, verwenden immerPy_ssize_tfür#Formate. (Beigetragen von Inada Naoki in gh-104922.)Wenn Python im Debug-Modus oder
mit Assertionskompiliert wird, prüfenPyTuple_SET_ITEM()undPyList_SET_ITEM()nun das Index-Argument mit einer Assertion. (Beigetragen von Victor Stinner in gh-106168.)
Begrenzte C-API-Änderungen¶
Die folgenden Funktionen sind nun in der begrenzten C-API enthalten
(Beigetragen von Victor Stinner in gh-85283, gh-85283 und gh-116936.)
Python, kompiliert mit
--with-trace-refs(Referenzverfolgung), unterstützt nun die Begrenzte API. (Beigetragen von Victor Stinner in gh-108634.)
Entfernte C-APIs¶
Entfernen Sie mehrere Funktionen, Makros, Variablen usw. mit Namen, die mit
_Pyoder_PYbeginnen (die als privat gelten). Wenn Ihr Projekt von einer dieser Entfernungen betroffen ist und Sie glauben, dass die entfernte API verfügbar bleiben sollte, öffnen Sie bitte ein neues Issue, um eine öffentliche C-API zu beant সুপারিশ, und fügen Siecc: @vstinnerzu dem Issue hinzu, um Victor Stinner zu benachrichtigen. (Beigetragen von Victor Stinner in gh-106320.)Entfernen Sie die in Python 3.0 deprecate alten Pufferprotokolle. Verwenden Sie stattdessen das Pufferprotokoll.
PyObject_CheckReadBuffer(): Verwenden SiePyObject_CheckBuffer(), um zu prüfen, ob das Objekt das Pufferprotokoll unterstützt. Beachten Sie, dassPyObject_CheckBuffer()nicht garantiert, dassPyObject_GetBuffer()erfolgreich sein wird. Um zu prüfen, ob das Objekt tatsächlich lesbar ist, siehe das nächste Beispiel fürPyObject_GetBuffer().PyObject_AsCharBuffer(),PyObject_AsReadBuffer(): Verwenden Sie 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(): Verwenden Sie 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.)
Entfernen Sie verschiedene Funktionen, die in Python 3.9 deprecate wurden
PyEval_CallObject(),PyEval_CallObjectWithKeywords(): Verwenden Sie stattdessenPyObject_CallNoArgs()oderPyObject_Call().Warnung
In
PyObject_Call()müssen Positionsargumente eintuplesein und dürfen nichtNULLsein, und Schlüsselwortargumente müssen eindictoderNULLsein, während die entfernten Funktionen die Argumenttypen prüften undNULLfür Positions- und Schlüsselwortargumente akzeptierten. UmPyEval_CallObjectWithKeywords(func, NULL, kwargs)durchPyObject_Call()zu ersetzen, übergeben Sie ein leeres Tupel als Positionsargumente mitPyTuple_New(0).PyEval_CallFunction(): Verwenden Sie stattdessenPyObject_CallFunction().PyEval_CallMethod(): Verwenden Sie stattdessenPyObject_CallMethod().PyCFunction_Call(): Verwenden Sie stattdessenPyObject_Call().
(Beigetragen von Victor Stinner in gh-105107.)
Entfernen Sie die folgenden alten Funktionen zur Konfiguration der Python-Initialisierung, die in Python 3.11 deprecate wurden
PySys_AddWarnOptionUnicode(): Verwenden Sie stattdessenPyConfig.warnoptions.PySys_AddWarnOption(): Verwenden Sie stattdessenPyConfig.warnoptions.PySys_AddXOption(): Verwenden Sie stattdessenPyConfig.xoptions.PySys_HasWarnOptions(): Verwenden Sie stattdessenPyConfig.xoptions.PySys_SetPath(): Setzen Sie stattdessenPyConfig.module_search_paths.Py_SetPath(): Setzen Sie stattdessenPyConfig.module_search_paths.Py_SetStandardStreamEncoding(): Setzen Sie stattdessenPyConfig.stdio_encodingund setzen Sie möglicherweise auchPyConfig.legacy_windows_stdio(unter Windows)._Py_SetProgramFullPath(): Setzen Sie stattdessenPyConfig.executable.
Verwenden Sie die neue
PyConfigAPI der Python-Initialisierungskonfiguration stattdessen (PEP 587), hinzugefügt zu Python 3.8. (Beigetragen von Victor Stinner in gh-105145.)Entfernen Sie die Funktionen
PyEval_AcquireLock()undPyEval_ReleaseLock(), die in Python 3.2 deprecate wurden. Sie aktualisierten den aktuellen Thread-Status nicht. Sie können ersetzt werden durchlow-level
PyEval_AcquireThread()undPyEval_RestoreThread();oder
PyGILState_Ensure()undPyGILState_Release().
(Beigetragen von Victor Stinner in gh-105182.)
Entfernen Sie die Funktion
PyEval_ThreadsInitialized(), die in Python 3.9 deprecate wurde. Seit Python 3.7 erstelltPy_Initialize()immer den GIL: der Aufruf vonPyEval_InitThreads()tut nichts undPyEval_ThreadsInitialized()gibt immer einen Wert ungleich Null zurück. (Beigetragen von Victor Stinner in gh-105182.)Entfernen Sie den Alias
_PyInterpreterState_Get()zuPyInterpreterState_Get(), der zur Abwärtskompatibilität mit Python 3.8 beibehalten wurde. Das Projekt pythoncapi-compat kann verwendet werden, umPyInterpreterState_Get()unter Python 3.8 und älter zu erhalten. (Beigetragen von Victor Stinner in gh-106320.)Entfernen Sie die private Funktion
_PyObject_FastCall(): verwenden Sie stattdessenPyObject_Vectorcall(), das seit Python 3.8 verfügbar ist (PEP 590). (Beigetragen von Victor Stinner in gh-106023.)Entfernen Sie die Header-Datei
cpython/pytime.h, die nur private Funktionen enthielt. (Beigetragen von Victor Stinner in gh-106316.)Entfernen Sie die undokumentierte Konstante
PY_TIMEOUT_MAXaus der begrenzten C-API. (Beigetragen von Victor Stinner in gh-110014.)Entfernen Sie die alten Trashcan-Makros
Py_TRASHCAN_SAFE_BEGINundPy_TRASHCAN_SAFE_END. Ersetzen Sie beide durch die neuen MakrosPy_TRASHCAN_BEGINundPy_TRASHCAN_END. (Beigetragen von Irit Katriel in gh-105111.)
Deprecate C APIs¶
Veraltete Python-Initialisierungsfunktionen deprecaten
PySys_ResetWarnOptions(): Leeren Sie stattdessensys.warnoptionsundwarnings.filters.Py_GetExecPrefix(): Verwenden Sie stattdessensys.exec_prefix.Py_GetPath(): Verwenden Sie stattdessensys.path.Py_GetPrefix(): Verwenden Sie stattdessensys.prefix.Py_GetProgramFullPath(): Verwenden Sie stattdessensys.executable.Py_GetProgramName(): Verwenden Sie stattdessensys.executable.Py_GetPythonHome(): Verwenden Sie stattdessenPyConfig.homeoder die UmgebungsvariablePYTHONHOME.
(Beigetragen von Victor Stinner in gh-105145.)
Soft deprecate die Funktionen
PyEval_GetBuiltins(),PyEval_GetGlobals()undPyEval_GetLocals(), die eine ausgeliehene Referenz zurückgeben. (Soft deprecate als Teil von PEP 667.)Deprecate die Funktion
PyImport_ImportModuleNoBlock(), die seit Python 3.3 nur ein Alias fürPyImport_ImportModule()ist. (Beigetragen von Victor Stinner in gh-105396.)Soft deprecate die Funktion
PyModule_AddObject(). Sie sollte durchPyModule_Add()oderPyModule_AddObjectRef()ersetzt werden. (Beigetragen von Serhiy Storchaka in gh-86493.)Deprecate die alten Typen
Py_UNICODEundPY_UNICODE_TYPEsowie die DefinitionPy_UNICODE_WIDE. Verwenden Sie stattdessen direkt den Typwchar_t. Seit Python 3.3 sindPy_UNICODEundPY_UNICODE_TYPEnur Aliase fürwchar_t. (Beigetragen von Victor Stinner in gh-105156.)Deprecate die Funktionen
PyWeakref_GetObject()undPyWeakref_GET_OBJECT(), die eine ausgeliehene Referenz zurückgeben. Ersetzen Sie sie durch die neue FunktionPyWeakref_GetRef(), die eine starke Referenz zurückgibt. Das Projekt pythoncapi-compat kann verwendet werden, umPyWeakref_GetRef()unter Python 3.12 und älter zu erhalten. (Beigetragen von Victor Stinner in gh-105927.)
Zur Entfernung in Python 3.14 vorgesehen¶
Das Feld
ma_version_taginPyDictObjectfür Erweiterungsmodule (PEP 699; gh-101193).Erstellung von
unveränderlichen Typenmit veränderlichen Basen (gh-95388).
Zur Entfernung in Python 3.15 vorgesehen¶
PyImport_ImportModuleNoBlock(): Verwenden Sie stattdessenPyImport_ImportModule().PyWeakref_GetObject()undPyWeakref_GET_OBJECT(): Verwenden Sie stattdessenPyWeakref_GetRef(). Das Projekt pythoncapi-compat kann verwendet werden, umPyWeakref_GetRef()unter Python 3.12 und älter zu erhalten.Typ
Py_UNICODEund MakroPy_UNICODE_WIDE: Verwenden Sie stattdessenwchar_t.PyUnicode_AsDecodedObject(): Verwenden Sie stattdessenPyCodec_Decode().PyUnicode_AsDecodedUnicode(): Verwenden Sie stattdessenPyCodec_Decode(); Beachten Sie, dass einige Codecs (z. B. „base64“) einen anderen Typ alsstrzurückgeben können, z. B.bytes.PyUnicode_AsEncodedObject(): Verwenden Sie stattdessenPyCodec_Encode().PyUnicode_AsEncodedUnicode(): Verwenden Sie stattdessenPyCodec_Encode(); Beachten Sie, dass einige Codecs (z. B. „base64“) einen anderen Typ alsbyteszurückgeben können, z. B.str.Python-Initialisierungsfunktionen, veraltet in Python 3.13
Py_GetPath(): Verwenden Sie stattdessenPyConfig_Get("module_search_paths")(sys.path).Py_GetPrefix(): Verwenden Sie stattdessenPyConfig_Get("base_prefix")(sys.base_prefix). Verwenden SiePyConfig_Get("prefix")(sys.prefix), wenn virtuelle Umgebungen behandelt werden müssen.Py_GetExecPrefix(): Verwenden Sie stattdessenPyConfig_Get("base_exec_prefix")(sys.base_exec_prefix). Verwenden SiePyConfig_Get("exec_prefix")(sys.exec_prefix), wenn virtuelle Umgebungen behandelt werden müssen.Py_GetProgramFullPath(): Verwenden Sie stattdessenPyConfig_Get("executable")(sys.executable).Py_GetProgramName(): Verwenden Sie stattdessenPyConfig_Get("executable")(sys.executable).Py_GetPythonHome(): Verwenden Sie stattdessenPyConfig_Get("home")oder die UmgebungsvariablePYTHONHOME.
Das Projekt pythoncapi-compat kann verwendet werden, um
PyConfig_Get()auf Python 3.13 und älter zu erhalten.Funktionen zur Konfiguration der Python-Initialisierung, veraltet in Python 3.11
PySys_SetArgvEx(): Setzen Sie stattdessenPyConfig.argv.PySys_SetArgv(): Setzen Sie stattdessenPyConfig.argv.Py_SetProgramName(): Setzen Sie stattdessenPyConfig.program_name.Py_SetPythonHome(): Setzen Sie stattdessenPyConfig.home.PySys_ResetWarnOptions(): Leeren Sie stattdessensys.warnoptionsundwarnings.filters.
Die API
Py_InitializeFromConfig()sollte stattdessen mitPyConfigverwendet werden.Globale Konfigurationsvariablen
Py_DebugFlag: Verwenden Sie stattdessenPyConfig.parser_debugoderPyConfig_Get("parser_debug").Py_VerboseFlag: Verwenden Sie stattdessenPyConfig.verboseoderPyConfig_Get("verbose").Py_QuietFlag: Verwenden Sie stattdessenPyConfig.quietoderPyConfig_Get("quiet").Py_InteractiveFlag: Verwenden Sie stattdessenPyConfig.interactiveoderPyConfig_Get("interactive").Py_InspectFlag: Verwenden Sie stattdessenPyConfig.inspectoderPyConfig_Get("inspect").Py_OptimizeFlag: Verwenden Sie stattdessenPyConfig.optimization_leveloderPyConfig_Get("optimization_level").Py_NoSiteFlag: Verwenden Sie stattdessenPyConfig.site_importoderPyConfig_Get("site_import").Py_BytesWarningFlag: Verwenden Sie stattdessenPyConfig.bytes_warningoderPyConfig_Get("bytes_warning").Py_FrozenFlag: Verwenden Sie stattdessenPyConfig.pathconfig_warningsoderPyConfig_Get("pathconfig_warnings").Py_IgnoreEnvironmentFlag: Verwenden Sie stattdessenPyConfig.use_environmentoderPyConfig_Get("use_environment").Py_DontWriteBytecodeFlag: Verwenden Sie stattdessenPyConfig.write_bytecodeoderPyConfig_Get("write_bytecode").Py_NoUserSiteDirectory: Verwenden Sie stattdessenPyConfig.user_site_directoryoderPyConfig_Get("user_site_directory").Py_UnbufferedStdioFlag: Verwenden Sie stattdessenPyConfig.buffered_stdiooderPyConfig_Get("buffered_stdio").Py_HashRandomizationFlag: Verwenden Sie stattdessenPyConfig.use_hash_seedundPyConfig.hash_seedoderPyConfig_Get("hash_seed").Py_IsolatedFlag: Verwenden Sie stattdessenPyConfig.isolatedoderPyConfig_Get("isolated").Py_LegacyWindowsFSEncodingFlag: Verwenden Sie stattdessenPyPreConfig.legacy_windows_fs_encodingoderPyConfig_Get("legacy_windows_fs_encoding").Py_LegacyWindowsStdioFlag: Verwenden Sie stattdessenPyConfig.legacy_windows_stdiooderPyConfig_Get("legacy_windows_stdio").Py_FileSystemDefaultEncoding,Py_HasFileSystemDefaultEncoding: Verwenden Sie stattdessenPyConfig.filesystem_encodingoderPyConfig_Get("filesystem_encoding").Py_FileSystemDefaultEncodeErrors: Verwenden Sie stattdessenPyConfig.filesystem_errorsoderPyConfig_Get("filesystem_errors").Py_UTF8Mode: Verwenden Sie stattdessenPyPreConfig.utf8_modeoderPyConfig_Get("utf8_mode"). (SiehePy_PreInitialize())
Die API
Py_InitializeFromConfig()sollte mitPyConfigverwendet werden, um diese Optionen zu setzen. OderPyConfig_Get()kann verwendet werden, um diese Optionen zur Laufzeit abzurufen.
Zur Entfernung in Python 3.16 vorgesehen¶
Die gebündelte Kopie von
libmpdec.
Anstehende Entfernung in Python 3.18¶
Die folgenden privaten Funktionen sind veraltet und für die Entfernung in Python 3.18 geplant
_PyBytes_Join(): verwenden Sie stattdessenPyBytes_Join()._PyDict_GetItemStringWithError(): verwenden Sie stattdessenPyDict_GetItemStringRef()._PyDict_Pop(): verwenden Sie stattdessenPyDict_Pop()._PyLong_Sign(): verwenden Sie stattdessenPyLong_GetSign()._PyLong_FromDigits()und_PyLong_New(): verwenden Sie stattdessenPyLongWriter_Create()._PyThreadState_UncheckedGet(): verwenden Sie stattdessenPyThreadState_GetUnchecked()._PyUnicode_AsString(): verwenden Sie stattdessenPyUnicode_AsUTF8()._PyUnicodeWriter_Init(): Ersetzen Sie_PyUnicodeWriter_Init(&writer)durchwriter = PyUnicodeWriter_Create(0)._PyUnicodeWriter_Finish(): Ersetzen Sie_PyUnicodeWriter_Finish(&writer)durchPyUnicodeWriter_Finish(writer)._PyUnicodeWriter_Dealloc(): Ersetzen Sie_PyUnicodeWriter_Dealloc(&writer)durchPyUnicodeWriter_Discard(writer)._PyUnicodeWriter_WriteChar(): Ersetzen Sie_PyUnicodeWriter_WriteChar(&writer, ch)durchPyUnicodeWriter_WriteChar(writer, ch)._PyUnicodeWriter_WriteStr(): Ersetzen Sie_PyUnicodeWriter_WriteStr(&writer, str)durchPyUnicodeWriter_WriteStr(writer, str)._PyUnicodeWriter_WriteSubstring(): Ersetzen Sie_PyUnicodeWriter_WriteSubstring(&writer, str, start, end)durchPyUnicodeWriter_WriteSubstring(writer, str, start, end)._PyUnicodeWriter_WriteASCIIString(): Ersetzen Sie_PyUnicodeWriter_WriteASCIIString(&writer, str)durchPyUnicodeWriter_WriteASCII(writer, str)._PyUnicodeWriter_WriteLatin1String(): Ersetzen Sie_PyUnicodeWriter_WriteLatin1String(&writer, str)durchPyUnicodeWriter_WriteUTF8(writer, str)._PyUnicodeWriter_Prepare(): (kein Ersatz)._PyUnicodeWriter_PrepareKind(): (kein Ersatz)._Py_HashPointer(): verwenden Sie stattdessenPy_HashPointer()._Py_fopen_obj(): verwenden Sie stattdessenPy_fopen().
Das Projekt pythoncapi-compat kann verwendet werden, um diese neuen öffentlichen Funktionen auf Python 3.13 und älter zu erhalten. (Beigetragen von Victor Stinner in gh-128863.)
Zur Entfernung in zukünftigen Versionen vorgesehen¶
Die folgenden APIs sind veraltet und werden entfernt, obwohl derzeit kein Termin für ihre Entfernung geplant ist.
Py_TPFLAGS_HAVE_FINALIZE: Seit Python 3.8 nicht mehr benötigt.PyErr_Fetch(): Verwenden Sie stattdessenPyErr_GetRaisedException().PyErr_NormalizeException(): Verwenden Sie stattdessenPyErr_GetRaisedException().PyErr_Restore(): Verwenden Sie stattdessenPyErr_SetRaisedException().PyModule_GetFilename(): Verwenden Sie stattdessenPyModule_GetFilenameObject().PyOS_AfterFork(): Verwenden Sie stattdessenPyOS_AfterFork_Child().PySlice_GetIndicesEx(): Verwenden Sie stattdessenPySlice_Unpack()undPySlice_AdjustIndices().PyUnicode_READY(): Seit Python 3.12 nicht mehr benötigt.PyErr_Display(): Verwenden Sie stattdessenPyErr_DisplayException()._PyErr_ChainExceptions(): Verwenden Sie stattdessen_PyErr_ChainExceptions1().PyBytesObject.ob_shashmember: Rufen Sie stattdessenPyObject_Hash()auf.Thread Local Storage (TLS) API
PyThread_create_key(): Verwenden Sie stattdessenPyThread_tss_alloc().PyThread_delete_key(): Verwenden Sie stattdessenPyThread_tss_free().PyThread_set_key_value(): Verwenden Sie stattdessenPyThread_tss_set().PyThread_get_key_value(): Verwenden Sie stattdessenPyThread_tss_get().PyThread_delete_key_value(): Verwenden Sie stattdessenPyThread_tss_delete().PyThread_ReInitTLS(): Seit Python 3.7 nicht mehr benötigt.
Build-Änderungen¶
arm64-apple-iosundarm64-apple-ios-simulatorsind beide nun PEP 11 Tier 3 Plattformen. (PEP 730 geschrieben und Implementierung beigetragen von Russell Keith-Magee in gh-114099.)aarch64-linux-androidundx86_64-linux-androidsind jetzt beide PEP 11 Tier-3-Plattformen. (PEP 738 geschrieben und Implementierung beigesteuert von Malcolm Smith in gh-116622.)wasm32-wasiist jetzt eine PEP 11 Tier-2-Plattform. (Beigesteuert von Brett Cannon in gh-115192.)wasm32-emscriptenist keine unterstützte PEP 11-Plattform mehr. (Beigesteuert von Brett Cannon in gh-115192.)Das Kompilieren von CPython erfordert nun einen Compiler mit Unterstützung für die C11-Atomic-Bibliothek, GCC-eingebaute Atomic-Funktionen oder MSVC-interlocked-Intrinsics.
Autoconf 2.71 und aclocal 1.16.5 sind nun erforderlich, um das
configure-Skript neu zu generieren. (Beigesteuert von Christian Heimes in gh-89886 und von Victor Stinner in gh-112090.)SQLite 3.15.2 oder neuer ist erforderlich, um das
sqlite3-Erweiterungsmodul zu kompilieren. (Beigesteuert von Erlend Aasland in gh-105875.)CPython bündelt jetzt standardmäßig die mimalloc-Bibliothek. Sie steht unter der MIT-Lizenz; siehe mimalloc license. Das gebündelte mimalloc enthält benutzerdefinierte Änderungen, siehe gh-113141 für Details. (Beigesteuert von Dino Viehland in gh-109914.)
Die
configure-Option--with-system-libmpdechat nun standardmäßigyes. Die gebündelte Kopie vonlibmpdecwird in Python 3.16 entfernt.Mit
configure--with-trace-refs(Referenzverfolgung) erstelltes Python ist nun ABI-kompatibel mit dem Python-Release-Build und dem Debug-Build. (Beigesteuert von Victor Stinner in gh-108634.)Auf POSIX-Systemen enthalten die pkg-config (
.pc)-Dateinamen nun die ABI-Flags. Zum Beispiel generiert der Free-Threaded-Buildpython-3.13t.pcund der Debug-Build generiertpython-3.13d.pc.Die C-Erweiterungen
errno,fcntl,grp,md5,pwd,resource,termios,winsound,_ctypes_test,_multiprocessing.posixshmem,_scproxy,_stat,_statistics,_testconsole,_testimportmultipleund_uuidwerden nun mit der Limited C API erstellt. (Beigesteuert von Victor Stinner in gh-85283.)
Portierung auf Python 3.13¶
Dieser Abschnitt listet zuvor beschriebene Änderungen und weitere Fehlerbehebungen auf, die möglicherweise Änderungen an Ihrem Code erfordern.
Änderungen in der Python-API¶
PEP 667 führt mehrere Änderungen an der Semantik von
locals()undf_localsein.Der Aufruf von
locals()in einem optimierten Gültigkeitsbereich erzeugt nun bei jedem Aufruf einen unabhängigen Schnappschuss und aktualisiert daher nicht mehr implizit zuvor zurückgegebene Referenzen. Das Erhalten des Legacy-CPython-Verhaltens erfordert nun explizite Aufrufe, um das anfänglich zurückgegebene Wörterbuch mit den Ergebnissen nachfolgender Aufrufe vonlocals()zu aktualisieren. Codeausführungsfunktionen, die implizit auflocals()abzielen (wieexecundeval), müssen einen expliziten Namespace übergeben, um auf ihre Ergebnisse in einem optimierten Gültigkeitsbereich zuzugreifen. (Geändert als Teil von PEP 667.)Der Aufruf von
locals()aus einer Comprehension im Modul- oder Klassengültigkeitsbereich (einschließlich überexecodereval) verhält sich wieder so, als würde die Comprehension als unabhängige verschachtelte Funktion ausgeführt (d.h. die lokalen Variablen aus dem übergeordneten Gültigkeitsbereich sind nicht enthalten). In Python 3.12 wurde dies geändert, um die lokalen Variablen aus dem übergeordneten Gültigkeitsbereich beim Implementieren von PEP 709 einzuschließen. (Geändert als Teil von PEP 667.)Der Zugriff auf
FrameType.f_localsin einem optimierten Gültigkeitsbereich gibt nun einen Write-Through-Proxy zurück, anstatt eines Schnappschusses, der zu schlecht spezifizierten Zeiten aktualisiert wird. Wenn ein Schnappschuss gewünscht ist, muss dieser explizit mitdictoder der.copy()-Methode des Proxys erstellt werden. (Geändert als Teil von PEP 667.)
functools.partialgibt nun eineFutureWarningaus, wenn es als Methode verwendet wird. Das Verhalten wird sich in zukünftigen Python-Versionen ändern. Wickeln Sie es instaticmethod(), wenn Sie das alte Verhalten beibehalten möchten. (Beigesteuert von Serhiy Storchaka in gh-121027.)Eine
OSErrorwird nun vongetpass.getuser()bei jedem Fehler bei der Abfrage eines Benutzernamens ausgelöst, anstelle vonImportErrorauf Nicht-Unix-Plattformen oderKeyErrorauf Unix-Plattformen, bei denen die Passwortdatenbank leer ist.Der Wert des
mode-Attributs vongzip.GzipFileist nun ein String ('rb'oder'wb') anstelle einer Ganzzahl (1oder2). Der Wert desmode-Attributs des lesbaren dateiähnlichen Objekts, das vonzipfile.ZipFile.open()zurückgegeben wird, ist nun'rb'anstelle von'r'. (Beigesteuert von Serhiy Storchaka in gh-115961.)mailbox.Maildirignoriert nun Dateien mit einem führenden Punkt (.). (Beigesteuert von Zackery Spytz in gh-65559.)pathlib.Path.glob()undrglob()geben nun sowohl Dateien als auch Verzeichnisse zurück, wenn ein Muster angegeben wird, das mit „**“ endet, anstatt nur Verzeichnisse. Fügen Sie einen abschließenden Schrägstrich hinzu, um das vorherige Verhalten beizubehalten und nur Verzeichnisse abzugleichen.Das Modul
threadingerwartet nun, dass das Modul_threadeine Funktion_is_main_interpreter()hat. Diese Funktion nimmt keine Argumente und gibtTruezurück, wenn der aktuelle Interpreter der Hauptinterpreter ist.Jede Bibliothek oder Anwendung, die ein benutzerdefiniertes Modul
_threadbereitstellt, muss_is_main_interpreter()bereitstellen, genau wie die anderen „privaten“ Attribute des Moduls. (gh-112826.)
Änderungen in der C-API¶
Python.hschließt nicht mehr die Standard-Headerdatei<ieeefp.h>ein. Sie wurde für die Funktionfinite()eingebunden, die nun von der Headerdatei<math.h>bereitgestellt wird. Sie sollte nun explizit eingebunden werden, falls erforderlich. Entfernen Sie auch das MakroHAVE_IEEEFP_H. (Beigesteuert von Victor Stinner in gh-108765.)Python.hschließt nicht mehr diese Standard-Headerdateien ein:<time.h>,<sys/select.h>und<sys/time.h>. Falls erforderlich, sollten diese nun explizit eingebunden werden. Zum Beispiel stellt<time.h>die Funktionenclock()undgmtime()bereit,<sys/select.h>stellt die Funktionselect()bereit und<sys/time.h>stellt die Funktionenfutimes(),gettimeofday()undsetitimer()bereit. (Beigesteuert von Victor Stinner in gh-108765.)Unter Windows schließt
Python.hnicht mehr die Standard-Headerdatei<stddef.h>ein. Falls erforderlich, sollte diese nun explizit eingebunden werden. Sie stellt zum Beispiel die Funktionoffsetof()sowie die Typensize_tundptrdiff_tbereit. Das explizite Einbinden von<stddef.h>war für alle anderen Plattformen bereits erforderlich, das MakroHAVE_STDDEF_Hist nur unter Windows definiert. (Beigesteuert von Victor Stinner in gh-108765.)Wenn das Makro
Py_LIMITED_APIdefiniert ist, werden die MakrosPy_BUILD_CORE,Py_BUILD_CORE_BUILTINundPy_BUILD_CORE_MODULEnun von<Python.h>undefiniert. (Beigesteuert von Victor Stinner in gh-85283.)Die alten Trashcan-Makros
Py_TRASHCAN_SAFE_BEGINundPy_TRASHCAN_SAFE_ENDwurden entfernt. Sie sollten durch die neuen MakrosPy_TRASHCAN_BEGINundPy_TRASHCAN_ENDersetzt werden.Eine
tp_dealloc-Funktion, die die alten Makros verwendet, wie zum Beispielstatic void mytype_dealloc(mytype *p) { PyObject_GC_UnTrack(p); Py_TRASHCAN_SAFE_BEGIN(p); ... Py_TRASHCAN_SAFE_END }
sollte wie folgt 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 }
Beachten Sie, dass
Py_TRASHCAN_BEGINein zweites Argument hat, das die Deallocationsfunktion sein sollte, in der es sich befindet. Die neuen Makros wurden in Python 3.8 hinzugefügt und die alten Makros wurden in Python 3.11 als veraltet markiert. (Beigesteuert von Irit Katriel in gh-105111.)
PEP 667 führt mehrere Änderungen an rahmenbezogenen Funktionen ein.
Die Auswirkungen der Mutation des Wörterbuchs, das von
PyEval_GetLocals()in einem optimierten Gültigkeitsbereich zurückgegeben wird, haben sich geändert. Neue Wörterbucheinträge, die auf diese Weise hinzugefügt werden, sind nun **nur** für nachfolgende Aufrufe vonPyEval_GetLocals()in diesem Frame sichtbar, daPyFrame_GetLocals(),locals()undFrameType.f_localsnicht mehr auf dasselbe zugrunde liegende zwischengespeicherte Wörterbuch zugreifen. Änderungen an Einträgen für tatsächliche Variablennamen und über die Write-Through-Proxy-Schnittstellen hinzugefügte Namen werden bei nachfolgenden Aufrufen vonPyEval_GetLocals()in diesem Frame überschrieben. Die empfohlene Code-Aktualisierung hängt davon ab, wie die Funktion verwendet wurde, daher beachten Sie die Deprecation-Mitteilung zur Funktion für Details.Der Aufruf von
PyFrame_GetLocals()in einem optimierten Gültigkeitsbereich gibt nun einen Write-Through-Proxy zurück, anstatt eines Schnappschusses, der zu schlecht spezifizierten Zeiten aktualisiert wird. Wenn ein Schnappschuss gewünscht ist, muss er explizit erstellt werden (z. B. mitPyDict_Copy()) oder durch Aufruf der neuenPyEval_GetFrameLocals()-API.PyFrame_FastToLocals()undPyFrame_FastToLocalsWithError()haben keine Auswirkung mehr. Der Aufruf dieser Funktionen war seit Python 3.11, alsPyFrame_GetLocals()erstmals eingeführt wurde, redundant.PyFrame_LocalsToFast()hat keine Auswirkung mehr. Der Aufruf dieser Funktion ist redundant, daPyFrame_GetLocals()für optimierte Gültigkeitsbereiche einen Write-Through-Proxy zurückgibt.
Python 3.13 hat viele private Funktionen entfernt. Einige davon können durch die folgenden Alternativen ersetzt werden
_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().
Das Projekt pythoncapi-compat kann verwendet werden, um die meisten dieser neuen Funktionen in Python 3.12 und älteren Versionen zu erhalten.
Änderungen bei Regressionstests¶
Python, das mit
configure--with-pydebugkompiliert wurde, unterstützt nun die Kommandozeilenoption-X presite=package.module. Wenn sie verwendet wird, gibt sie ein Modul an, das früh im Lebenszyklus des Interpreters importiert werden sollte, bevorsite.pyausgeführt wird. (Beigesteuert von Łukasz Langa in gh-110769.)