Python: Pallets veröffentlicht sechs neue Hauptversionen für Flask und Co

Gleich sechs neue Major Releases für Flask, Werkzeug, Jinja, Click, ItsDangerous sowie MarkupSafe stehen Python-Entwicklern zur Verfügung.

In Pocket speichern vorlesen Druckansicht 16 Kommentare lesen

(Bild: donatas1205 / Shutterstock.com)

Lesezeit: 7 Min.
Von
  • Madeleine Domogalla
Inhaltsverzeichnis

Nach zwei Jahren Entwicklungszeit hat das Entwicklerteam hinter Pallets Project gleich sechs neue Hauptversionen veröffentlicht: Flask 2.0, Werkzeug 2.0, Jinja 3.0, Click 8.0, ItsDangerous 2.0 sowie MarkupSafe 2.0. Das Unternehmen bietet eine Sammlung von Open-Source-Bibliotheken zur Webentwicklung mit der Programmiersprache Python.

Mit den neuen Releases nimmt Pallets gleich eine grundlegende Änderung vor: Das Unternehmen schließt sich Projekten wie PSF, CPython und Django an und benennt den Hauptzweig seines Repositories in "main" um. Hintergrund ist eine Sensibilisierung für Begriffe mit einem rassistischen Hintergrund, die in den letzten Monaten in vielen technischen Bereich stattgefunden hat.

Alle sechs Releases nehmen Abschied von Python 2.x und 3.5 und setzen mindestens Version 3.6 der Programmiersprache voraus. Seit Oktober 2020 liegt Python in Version 3.9 vor. Das Pallets-Entwickerteam plant, sich für künftige Versionen an den unterstützten Versionen von CPython zu orientieren. Das Entfernen des Kompatibilitäts-Codes soll die Performance und die Wartbarkeit des Codes positiv beeinflussen. Mit den Releases wurden einst als deprecated (veraltet) gekennzeichnete Funktionen entfernt, aber auch neue Deprecations eingeführt. Testwerkzeuge wie pytest geben Warnungen vor veralteten Versionen automatisch aus, und können diese in Fehler umwandeln, sodass Entwicklerinnen und Entwickler frühzeitig erkennen können, was sie an ihrem Projekt ändern sollten.

Allen Releases gemeinsam hat das Entwicklerteam umfassende Type-Annotationen hinzugefügt, die beim Prüfen von Types im eigenen Code helfen und IDEs eine bessere Completion und Hilfe ermöglichen soll. Darüber hinaus sind Entwickler dazu aufgefordert, Tools wie pre-commit, black, flake8 und pyupgrade zu nutzen, um sicherzustellen, dass der Code und neue Pull Requests konsistent sind.

Version 2.0 des Web Application Framework für Python unterstützt nun Async-Views und andere Callbacks, beispielsweise Error-Handler, die mit asynch def definiert wurden. Reguläre sync-Views funktionieren offenbar unverändert weiter. Neuerdings lassen sich Blueprints unter anderen Blueprints verschachteln, was einen mehrschichtigen Ansatz für die Organisation von Anwendungen ermöglichen soll. Blueprints bieten die Möglichkeit, eine Gruppe von zusammengehörigen Views und anderem Code zu organisieren. Darüber hinaus erhalten Entwicklerinnen und Entwickler die Möglichkeit, gängigen HTTP-API-Methoden Route-Decoratoren hinzuzufügen. Daraus ergibt sich beispielsweise @app.post("/login") als Kurzform für @app.route("/login", methods=["POST"]).

Das Pallets-Entwicklerteam führt mit Config.from_file ein neues Feature zum Laden der Konfigurationen aus einem beliebigen Dateiformat ein. Zudem wird beim Ausliefern von statischen Dateien der Cache von Browsern auf Basis des Inhalts und nicht auf Grundlage eines 12-Stunden-Timers erstellt. Somit berücksichtigt Flask Änderungen an statischen Inhalten, wie am CSS-Stile, beim erneuten Laden sofort, ohne dass der Cache geleert werden muss. Das Entwicklerteam weist darauf hin, dass Entwickler beim Upgrade von Flask die Abhängigkeit zu den anderen Releases berücksichtigen sollten.

Bei Werkzeug handelt es sich um eine Bibliothek für Anwendungen des Web Server Gateway Interface (WSGI). Anfangs war es nur eine einfache Sammlung verschiedener Dienstprogramme für WSGI-Anwendungen, inzwischen ist sie zu einer ganzen Bibliothek herangewachsen. Version 2.0 hält Neuerungen für das Parsen von multipart/form-data bereit, was laut Blogbeitrag zu einer 15-fachen Beschleunigung führen soll, insbesondere beim Upload von großen Dateien. Zudem nutzen Locals ab sofort Pythons ContextVar, um das Arbeiten über asynchrone Coroutines statt nur über Threads zu ermöglichen. Anstatt mehrere Mixin-Klassen zu bilden, führt das Tool den gesamten Request- und Response-Code in einzelnen Klassen zusammen. Eben diese Klassen sollen zum Netzwerkprotokoll (sans-io) übergehen, um sync- und async-Anwendungsfälle künftig besser unterstützen zu können. Zum jetzigen Zeitpunkt ist diese API noch private.

Mit Version 2.0 verabschiedet sich der Debugger von der Verwendung der JavaScript-Bibliothek jQuery, was die Größe des Packages deutlich reduzieren soll. datetime-Objekte, die von einigen Headern und Funktionen zurückgegeben werden, sind ab sofort von Zeitzonen abhängig. Zudem soll Windows Farben im Serverprotokoll nun richtig anzeigen.

Als Release Nummer drei haben die Pallets-Entwickler die neue Hauptversion der Template-Engine Jinja herausgegeben. Spezielle Platzhalter in den Templates ermöglichen das Schreiben von Code ähnlich der Python-Syntax. Jinja 3.0 erfordert für Async-Environments und das Rendering kein Patching mehr. Geplant ist, dieses Feature weiterhin zu aktualisieren, da Ninja asynchrone Programmierung (async) nun auch nativ unterstützt. Des Weiteren lassen sich Blocks ab sofort als required (erforderlich) kennzeichnen. Filter und Tests, die innerhalb von if-Blocks und bedingten (ternär) Anweisungen verwendet werden, können zur Runtime undefiniert sein. Jinja 3.0 hält zudem weitere Tests bereit, die prüfen, ob ein Filter oder ein Test verfügbar ist, damit diese optional zum Einsatz kommen können.

Auch für das Python-Package Click liegt eine neue Hauptversion vor. Click dient dem Erstellen von aus Teilen zusammengesetzten Command Line Interfaces (CLI), mit so wenig Code wie nötig. Es ist in hohem Maße konfigurierbar, bringt aber auch einige Voreinstellungen mit. Das Pallets-Entwicklerteam hat das Shell-Tab-Completion-System von Grund auf neu geschrieben. Es ermöglicht jetzt für jeden Befehl, jede Gruppe, jeden Parameter und jeden Type eine benutzerdefinierte Vervollständigung, unterstützt das Senden von Metadaten wie dem Type an die Shell für eine bessere native Unterstützung und bietet eine Möglichkeit, Support für neue Shells hinzuzufügen. Neben einigen weiteren Neuerungen, ermöglicht Click 8.0 das Anpassen von Core-Objekten durch neu hinzugefügte Klassenattribute.

Zu den vom Umfang her kleineren Releases zählen die Tools ItsDangerous und MarkupSafe. Ersteres bietet diverse Helper, um Daten an nicht vertrauenswürdige Umgebungen weiterzugeben und sie sicher zurückzubekommen. Dabei werden die Daten kryptografisch signiert, um sicherzustellen, dass ein Token nicht manipuliert wurde. Version 2.0 bringt Unterstützung für Schlüsselrotation durch Übergabe einer Liste gültiger Schlüssel, anstelle eines einzelnen Schlüssels. Wie bei Werkzeug 2.0 sind auch hier datetime-Objekte nun zeitzonenabhängig.

MarkupSafe implementiert ein Textobjekt, das Zeichen umgeht, sodass es sicher in HTML und XML verwendet werden kann. Die zweite Hauptversion hat Wheels für 33 Python-Versionen/OS/Architektur-Kombinationen im Gepäck, um die Installation mit Speedups zu erleichtern. Neu hinzugekommen sind ManyLinux 2014 und OSX Universal 2 Wheels.

Alle Releases lassen sich über den Python Package Index PyPI mit pip installieren. Der Befehl für Flask lautet beispielsweise pip install -U Flask. Das Entwicklerteam geht davon aus, dass es unter anderem mit einigen Flask-Erweiterungen noch zu Inkompatibilitätsproblemen kommen kann. Daher soll das Ökosystem rund um die Releases weiter aktualisiert werden. Pallets empfiehlt Entwicklerinnen und Entwicklern, Werkzeuge wie pip-compile und Dependabot zu verwenden, um Upgrades Ihrer Abhängigkeiten festzulegen und zu kontrollieren, um unerwartete Änderungen zu vermeiden. Nähere Informationen zu den Releases finden sich im Beitrag auf dem Blog von The Pallets Projects.

(mdo)