Share
Beitragsbild zu Neuer PEP 810 bringt Vorschlag für explizite Lazy Imports in Python 3.15

Neuer PEP 810 bringt Vorschlag für explizite Lazy Imports in Python 3.15

6. Oktober 2025

Wie Socket berichtet, schlägt PEP 810 explizite Lazy Imports für Python 3.15 vor. Ein optionales Lazy-Import-Schlüsselwort soll den Start von Python beschleunigen, insbesondere bei Kommandozeilenanwendungen, ohne die ecosystemweiten Risiken, die PEP 690 scheitern ließen.

Laut Socket steht das Import-System von Python damit vor seiner größten Veränderung seit Jahren. Der am 2. Oktober 2025 veröffentlichte Vorschlag PEP 810 führt das Schlüsselwort lazy ein, mit dem Importe bis zur ersten Verwendung aufgeschoben werden können. Bereits kurz nach der Veröffentlichung sorgte die Idee für große Aufmerksamkeit: Ein Thread auf Hacker News erreichte innerhalb der ersten 24 Stunden 353 Punkte und fast 200 Kommentare. Entwickler diskutierten darin, ob schnellere Startzeiten das Risiko einer verzögerten Codeausführung rechtfertigen.

Was PEP 810 hinzufügt

PEP 810 definiert eine explizite Syntax für Lazy-Importe:

lazy import json
lazy from json import dumps

Im Gegensatz zu normalen Importen binden diese Anweisungen ein Proxy-Objekt, das erst bei der ersten Verwendung aufgelöst wird. Bis dahin wird das Modul nicht geladen oder zu sys.moduleshinzugefügt. Das Design ist lokal, explizit und granular: Nur Importe, die mit lazy gekennzeichnet sind, sind betroffen, und nichts wird in Submodule kaskadiert, sofern nicht angegeben:

Lazy-Importe werden insofern kontrolliert, als das verzögerte Laden nur durch den importierenden Code selbst ausgelöst wird. Im Allgemeinen werden Lazy-Importe in einer Bibliothek nur dann verwendet, wenn ihre Autoren sie als solche kennzeichnen. Dadurch wird vermieden, dass die Verantwortung auf nachgelagerte Benutzer verlagert wird, und es werden unerwartete Überraschungen im Verhalten der Bibliothek verhindert. Da Bibliotheksautoren in der Regel ihre eigenen Import-Subgraphen verwalten, behalten sie eine vorhersehbare Kontrolle darüber, wann und wie Lazy-Importe angewendet werden.

Der Mechanismus ist außerdem granular. Er wird durch eine explizite Syntax für einzelne Importe eingeführt und nicht durch ein globales Flag oder eine implizite Einstellung. Dies ermöglicht es Entwicklern, ihn schrittweise einzuführen, beginnend mit den leistungssensitivsten Bereichen einer Codebasis. Da diese Funktion der Community vorgestellt wird, möchten wir die Einführung optional, schrittweise und an die Bedürfnisse jedes Projekts anpassbar gestalten.

Für große Anwendungen oder Tools mit weitläufigen Abhängigkeitsgraphen bietet dies den Vorteil eines schnelleren Starts und eines geringeren Basis-Speicherbedarfs. Bei Typ-Hinweisen macht lazy auch die Verwendung von if TYPE_CHECKING:-Schutzvorrichtungen überflüssig, da ungenutzte Importe keine Laufzeitkosten mehr verursachen.

Unterschiede zu PEP 690

Python hat bereits 2022 einen ähnlichen Ansatz verfolgt: PEP 690 schlug globale Lazy-Importe vor, wurde jedoch vom Lenkungsausschuss aufgrund der Komplexität und Unvorhersehbarkeit abgelehnt. PEP 810 geht den umgekehrten Weg: Lazy Imports sind optional und explizit. Standardmäßig bleiben Importe „eifrig“, es sei denn, das Schlüsselwort lazy wird verwendet.

Die neue PEP verzichtet zudem auf die Integration in Core-Dictionary-Lookups, eine umstrittene Designentscheidung von PEP 690, und setzt stattdessen auf leichtgewichtige Proxy-Objekte. Für experimentierfreudige Entwickler gibt es ein globales Flag und eine Filter-API, das Basismodell bleibt jedoch opt-in – ein Import nach dem anderen.

Vorteile für CLI-Tools

Besonders für Befehlszeilenanwendungen könnten Lazy Imports Vorteile bringen. Selbst einfache Kommandos wie --help laden häufig Dutzende Module, die durch große Abhängigkeiten wie PyTorch den Start verzögern können.

Simon Willison, Entwickler des CLI-Tools llm.datasette.io, kommentierte: „Leute beschwerten sich über sehr langsame Startzeiten, selbst bei Befehlen wie llm --help. Beliebte Plugins importierten Dinge wie PyTorch auf Basisebene, sodass der gesamte Start durch umfangreiche Importe blockiert wurde. Eine Kernfunktion der Python-Sprache für diesen Zweck wäre wirklich schön.“

In der PEP wird darauf hingewiesen, dass Lazy Imports die Startzeit in der Praxis um 50 bis 70 % verkürzen können – eine deutliche Verbesserung für CLIs, Testrunner und andere Tools, bei denen schnelle Reaktionszeiten entscheidend sind. Befürworter sehen darin die Chance, Python in Bereichen wettbewerbsfähiger zu machen, in denen Startlatenz traditionell ein Nachteil war.

Risiken und Kompromisse

Nicht alle Entwickler sind überzeugt. Kritiker warnen, dass Ausnahmen, die normalerweise beim Start auftreten würden, nun bis zur ersten Nutzung eines Imports verschoben werden – manchmal tief in lang laufende Prozesse hinein. Auch die Thread-Sicherheit wird als potenzielles Problem gesehen: Code, der früher vorhersehbar beim Single-Thread-Start ausgeführt wurde, kann nun in jedem Thread auftreten, der zuerst auf den Lazy Import zugreift.

Ein Kommentator auf Hacker News schrieb: „Ich denke, sie unterschätzen hier die Risiken für die Thread-Sicherheit. Lazy Loading wird diese Fehler auf die unangenehmste Weise (als Heisenbugs) aufdecken.“

Auch die Syntax wird diskutiert. Während einige das neue Schlüsselwort als unnötige Verkomplizierung sehen, betonen andere, dass Explizität der Python-Philosophie entspricht. Ein Nutzer kommentierte: „Ich hasse es nicht, aber ich liebe es auch nicht. Es klingt so, als würde jeder anfangen, lazy vor praktisch jedem Import zu schreiben… Das macht Python-Code optisch unübersichtlicher.“

Gemischte Reaktionen aus der Community

Der Hacker-News-Thread zu PEP 810 zeigt eine Mischung aus Begeisterung und Vorsicht. Befürworter lobten die PEP als „eine der saubersten seit langem“ und hoben das scoped Opt-in-Design hervor. Skeptiker warnen hingegen, dass Python-Importe unvermeidbare Nebenwirkungen haben und eine Verschiebung ihrer Ausführung das Risiko subtiler Fehler erhöhe.

Ein Kritiker kommentierte: „Das wird jede Menge Code zerstören und eine Reihe von Footguns einführen. Import-Anweisungen haben grundsätzlich Nebenwirkungen, und wann und wie diese zum Tragen kommen, wird mysteriöse Probleme und Fehler verursachen, die den Leuten viele schlaflose Nächte bereiten werden.“

Trotz der Debatte herrscht Einigkeit in einem Punkt: CLI-Tools dürften am meisten profitieren. Ein weiterer Nutzer schrieb: „Die Startzeit ist für mich sehr wichtig. Ich werde es auf jeden Fall in meinem eigenen Code verwenden, wenn die PEP angenommen wird.“

Entwurfsstatus und nächste Schritte

PEP 810 befindet sich derzeit noch im Entwurfsstadium für Python 3.15. Der Lenkungsausschuss wird sie nach Diskussionen in der Community auf Discourse und anderswo prüfen. Angesichts der Ablehnung von PEP 690 könnte das explizite Opt-in-Design diesem Vorschlag bessere Chancen verschaffen.

Die lebhafte Debatte auf Hacker News zeigt, dass die Importleistung, die oft im Hintergrund bleibt, für Python-Entwickler nach wie vor ein zentrales Thema ist.

Lesen Sie auch