Stilllegungen

Zur Entfernung vorgesehen in Python 3.15

  • Das Importsystem

    • Das Setzen von __cached__ für ein Modul, während __spec__.cached nicht 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__.parent nicht gesetzt wird, ist veraltet. In Python 3.15 wird __package__ vom Import-System oder der Standardbibliothek nicht mehr gesetzt oder berücksichtigt. (gh-97879)

  • ctypes:

    • Die undokumentierte Funktion ctypes.SetPointerType() ist seit Python 3.13 veraltet.

  • http.server:

    • Die veraltete und selten genutzte CGIHTTPRequestHandler ist 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 --cgi für die Kommandozeilenschnittstelle python -m http.server ist seit Python 3.13 veraltet.

  • importlib:

    • Methode load_module(): verwenden Sie stattdessen exec_module().

  • locale:

  • pathlib:

  • platform:

    • 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.

  • sysconfig:

  • threading:

    • 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:

  • typing:

    • 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 es seit Python 3.13 veraltet, keinen Wert für den Parameter fields zu übergeben (TD = TypedDict("TD")) oder None zu übergeben (TD = TypedDict("TD", None)). Verwenden Sie stattdessen class TD(TypedDict): pass oder TD = TypedDict("TD", {}), um ein TypedDict mit null Feldern zu erstellen.

    • Der Dekorator typing.no_type_check_decorator() ist seit Python 3.13 veraltet. Nach acht Jahren im Modul typing wurde er von keinem wichtigen Typ-Checker unterstützt.

  • wave:

  • zipimport:

    • load_module() ist seit Python 3.10 veraltet. Verwenden Sie stattdessen exec_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__.loader nicht gesetzt wird, ist veraltet. In Python 3.16 wird __loader__ vom Importsystem und der Standardbibliothek weder gesetzt noch berücksichtigt.

  • array:

    • 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:

  • builtins:

    • Bitweise Inversion auf booleschen Typen, ~True oder ~False, ist seit Python 3.12 veraltet, da sie überraschende und unintuitive Ergebnisse liefert (-2 und -1). Verwenden Sie stattdessen not x fü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 zu int (~int(x)).

  • functools:

    • Das Aufrufen der Python-Implementierung von functools.reduce() mit function oder sequence als Schlüsselwortargumente ist seit Python 3.14 veraltet.

  • logging:

    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.)

  • mimetypes:

    • 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 einen ValueError aus. (Beigetragen von Hugo van Kemenade in gh-75223.)

  • shutil:

    • Die Ausnahme ExecError ist seit Python 3.14 veraltet. Sie wurde seit Python 3.4 von keiner Funktion in shutil verwendet und ist nun ein Alias für RuntimeError.

  • symtable:

  • sys:

  • sysconfig:

    • Die Funktion sysconfig.expand_makefile_vars() ist seit Python 3.14 veraltet. Verwenden Sie stattdessen das Argument vars von sysconfig.get_paths().

  • tarfile:

    • Das undokumentierte und ungenutzte Attribut TarFile.tarfile ist seit Python 3.13 veraltet.

Zur Entfernung vorgesehen in Python 3.17

  • collections.abc:

    • collections.abc.ByteString ist für die Entfernung in Python 3.17 geplant.

      Verwenden Sie isinstance(obj, collections.abc.Buffer), um zur Laufzeit zu testen, ob obj das Buffer-Protokoll implementiert. Für die Verwendung in Typ-Annotationen verwenden Sie entweder Buffer oder eine Union, die explizit die von Ihrem Code unterstützten Typen angibt (z. B. bytes | bytearray | memoryview).

      ByteString sollte ursprünglich eine abstrakte Klasse sein, die als Obertyp für sowohl bytes als auch bytearray dient. Da die ABC jedoch nie Methoden hatte, wusste man durch die Prüfung, ob ein Objekt eine Instanz von ByteString war, nie etwas Nützliches über das Objekt. Andere gängige Buffer-Typen wie memoryview wurden ebenfalls nie als Untertypen von ByteString verstanden (weder zur Laufzeit noch von statischen Typ-Checkern).

      Siehe PEP 688 für weitere Details. (Beigetragen von Shantanu Jain in gh-91896.)

  • typing:

    • Vor Python 3.14 wurden alte Unions mit der privaten Klasse typing._UnionGenericAlias implementiert. 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 wie typing.get_origin() und typing.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, ob obj das Buffer-Protokoll implementiert. Für die Verwendung in Typ-Annotationen verwenden Sie entweder Buffer oder eine Union, die explizit die von Ihrem Code unterstützten Typen angibt (z. B. bytes | bytearray | memoryview).

      ByteString sollte ursprünglich eine abstrakte Klasse sein, die als Obertyp für sowohl bytes als auch bytearray dient. Da die ABC jedoch nie Methoden hatte, wusste man durch die Prüfung, ob ein Objekt eine Instanz von ByteString war, nie etwas Nützliches über das Objekt. Andere gängige Buffer-Typen wie memoryview wurden ebenfalls nie als Untertypen von ByteString verstanden (weder zur Laufzeit noch von statischen Typ-Checkern).

      Siehe PEP 688 für weitere Details. (Beigetragen von Shantanu Jain in gh-91896.)

Zur Entfernung vorgesehen in Python 3.19

  • ctypes:

    • Implizites Umschalten auf das MSVC-kompatible Struktur-Layout durch Setzen von _pack_, aber nicht von _layout_ auf Nicht-Windows-Plattformen.

Zur Entfernung vorgesehen in zukünftigen Versionen

Die folgenden APIs werden in Zukunft entfernt, obwohl derzeit kein Datum für ihre Entfernung geplant ist.

  • argparse:

    • 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.FileType ist veraltet.

  • builtins:

    • Generatoren: Die Signatur throw(type, exc, tb) und athrow(type, exc, tb) ist veraltet: verwenden Sie stattdessen throw(exc) und athrow(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). Eine Syntaxwarnung wird ausgegeben, wenn dem numerischen Literal unmittelbar eines der Schlüsselwörter and, else, for, if, in, is und or folgt. In einer zukünftigen Version wird dies in einen 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 von int zurückgeben.

    • Unterstützung für die Methode __float__(), die eine strenge Unterklasse von float zurückgibt: diese Methoden müssen eine Instanz von float zurückgeben.

    • Unterstützung für die Methode __complex__(), die eine strenge Unterklasse von complex zurückgibt: diese Methoden müssen eine Instanz von complex zurü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 Konstanten calendar.January und calendar.February sind veraltet und werden durch calendar.JANUARY und calendar.FEBRUARY ersetzt. (Beigetragen von Prince Roshan in gh-103636.)

  • codecs: Verwenden Sie open() anstelle von codecs.open(). (gh-133038)

  • codeobject.co_lnotab: Verwenden Sie stattdessen die Methode codeobject.co_lines().

  • datetime:

    • utcnow(): Verwenden Sie datetime.datetime.now(tz=datetime.UTC).

    • utcfromtimestamp(): Verwenden Sie datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC).

  • gettext: Der Pluralwert muss eine ganze Zahl sein.

  • importlib:

    • Der Parameter debug_override von cache_from_source() ist veraltet: verwenden Sie stattdessen den Parameter optimization.

  • importlib.metadata:

    • Schnittstelle des EntryPoints-Tupels.

    • Implizites None bei Rückgabewerten.

  • logging: Die Methode warn() ist seit Python 3.3 veraltet, verwenden Sie stattdessen warning().

  • mailbox: Die Verwendung von StringIO-Eingabe und Textmodus ist veraltet, verwenden Sie stattdessen BytesIO und Binärmodus.

  • os: Aufruf von os.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_constants und sre_parse.

  • shutil: Das Parameter onerror von rmtree() ist in Python 3.12 veraltet; verwenden Sie stattdessen den Parameter onexc.

  • SSL-Optionen und -Protokolle

    • ssl.SSLContext ohne Protokollargument ist veraltet.

    • ssl.SSLContext: set_npn_protocols() und selected_npn_protocol() sind veraltet: verwenden Sie stattdessen ALPN.

    • Optionen ssl.OP_NO_SSL*

    • Optionen ssl.OP_NO_TLS*

    • ssl.PROTOCOL_SSLv3

    • ssl.PROTOCOL_TLS

    • ssl.PROTOCOL_TLSv1

    • ssl.PROTOCOL_TLSv1_1

    • ssl.PROTOCOL_TLSv1_2

    • ssl.TLSVersion.SSLv3

    • ssl.TLSVersion.TLSv1

    • ssl.TLSVersion.TLSv1_1

  • Methoden von threading

  • typing.Text (gh-92332).

  • Die interne Klasse typing._UnionGenericAlias wird nicht mehr zur Implementierung von typing.Union verwendet. 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 nicht None ist, von einem Testfall.

  • Veraltete Funktionen in urllib.parse: stattdessen urlparse()

    • 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 eines Element ist veraltet. In einer zukünftigen Version wird dies immer True zurückgeben. Bevorzugen Sie explizite Tests mit len(elem) oder elem is not None.

  • sys._clear_type_cache() ist veraltet: verwenden Sie stattdessen sys._clear_internal_caches().

Stilllegungen der C-API

Zur Entfernung vorgesehen in Python 3.15

Anstehende Entfernung in Python 3.18

Anstehende Entfernung in zukünftigen Versionen

Die folgenden APIs sind veraltet und werden entfernt, obwohl derzeit kein Termin für ihre Entfernung geplant ist.