Dev News Daily ENDE

Python 3.15.0: Lazy Imports, frozendict, UTF-8 als Standard und eine Warnung zu macOS 27

Python 3.15.0 ist am 9. Oktober 2026 erschienen — laut Release-Seite 5.643 Commits von 1.012 Mitwirkenden seit 3.14. Von der langen Liste ändern vier Punkte das Verhalten gewöhnlichen Codes, und ein fünfter ist eine Warnung, die in jedes Upgrade-Ticket gehört.

Lazy Imports (PEP 810). Das neue Soft-Keyword lazy verschiebt das Laden eines Moduls auf den ersten Zugriff: lazy import heavy_module bindet beim Import nur einen leichten Platzhalter. Scheitert das Laden später, fliegt die Ausnahme erst an der Stelle der ersten Nutzung; der Traceback zeigt diese Stelle und die ursprüngliche Importzeile. Erlaubt ist das nur auf Modulebene — in Funktionen, Klassenrümpfen oder try-Blöcken gibt es einen SyntaxError, Stern- und __future__-Importe können nicht lazy sein. Global lässt es sich mit -X lazy_imports oder PYTHON_LAZY_IMPORTS einschalten und per sys.set_lazy_imports_filter() eingrenzen, etwa lazy nur für eigene Module.

frozendict (PEP 814). Ein unveränderliches Mapping ist jetzt Builtin. Es ist keine Unterklasse von dict; Prüfungen mit isinstance(x, dict) lehnen es also ab. Die Dokumentation empfiehlt (dict, frozendict) oder collections.abc.Mapping. Die Einfügereihenfolge bleibt erhalten, beim Vergleich spielt sie keine Rolle.

UTF-8 als Standardkodierung (PEP 686). open('datei.txt') ohne encoding liest und schreibt jetzt UTF-8, unabhängig vom System-Locale. Unter Linux und macOS war das meist schon so; auf Windows-Rechnern mit alter Codepage ändert sich das Verhalten jeder Datei, die ohne Kodierung geöffnet wird. Zurück geht es mit -X utf8=0, ausdrücklich das alte Verhalten liefert encoding='locale' (seit 3.10).

Python 3.15.0: Lazy Imports, frozendict, UTF-8 als Standard und eine Warnung zu macOS 27
Python 3.15.0: Lazy Imports, frozendict, UTF-8 als Standard und eine Warnung zu macOS 27 — Dev News Daily

Paket profiling (PEP 799). profiling.tracing enthält den deterministischen Profiler, bisher cProfile (der alte Name bleibt als Alias), profiling.sampling ist Tachyon, ein neuer statistischer Sampling-Profiler mit hoher Frequenz. Das reine Python-Modul profile ist zur Entfernung in 3.17 vorgemerkt. Frame Pointer sind standardmäßig aktiv (PEP 831), laut Release-Seite für bessere Beobachtbarkeit auf Systemebene.

Außerdem: eine stabile ABI für Free-Threading-Builds (PEPs 803, 820, 793), macOS-Installer mit Free-Threading-Unterstützung als Standard, Windows-64-Bit-Binärdateien mit dem Tail-Calling-Interpreter und ein experimenteller JIT, dem die Release-Seite 7–8 % im geometrischen Mittel auf x86-64 Linux und 11–12 % auf AArch64 macOS gegenüber dem jeweiligen Basisinterpreter zuschreibt.

Die Warnung. Unter macOS 27.0 können Tk-Programme — IDLE und alles mit tkinter — hängen bleiben, wenn ein Menübefehl einen Dialog öffnet; am Ende steht der Regenbogen-Cursor und Sofort beenden. Ursache ist laut Release-Seite eine Verhaltensänderung des Betriebssystems, die vermutlich jede aktuelle Tk-Version betrifft — und damit tkinter in allen aktuellen Python-Versionen, nicht nur in 3.15. Wer auf Tk-Programme angewiesen ist, soll mit macOS 27.0 warten oder vorher testen; verfolgt wird das in CPython-Issue #158053.

Quellen: Python.org, Release-Seite zu Python 3.15.0 — https://www.python.org/downloads/release/python-3150/ ; What's new in Python 3.15 — https://docs.python.org/3/whatsnew/3.15.html

Geschrieben von Victoria Shinder.