Workiva Skripting und Ende der Unterstützung für Python 3.9
Um Ihre Automatisierungen zukunftssicher zu machen, führt Workiva Unterstützung für Python 3.13 ein, zusammen mit einer Einstellung auf Skript-Ebene, mit der Sie die Laufzeitversion für jedes Skript auswählen können. Dieser Leitfaden erklärt, wie Sie sicher von 3.9 auf 3.13 umsteigen, was Sie testen müssen und wie Sie die Änderungen mit minimalen Unterbrechungen einführen.
Bis Oktober 2025 verließ sich Workiva Scripting auf die offizielle Python 3.9 Version der Python Software Foundation, die nun das Ende ihrer Lebensdauer erreicht hat und keine Sicherheitsupdates oder Fehlerbehebungen mehr erhält.
Als Reaktion auf diese Änderung ist Workiva Scripting dazu übergegangen, das Amazon Linux 2023 (AL2023) Image zu verwenden, das seine eigenen Builds von Python 3.9 und 3.13 bereitstellt. Diese Änderung stellt sicher, dass Python 3.9 durch Amazons Update-Zyklus laufend Sicherheits-Patches und Wartung erhält, auch wenn die Upstream-Python-Version nicht mehr von der Open-Source-Community gepatcht wird.
Als Ergebnis dieser Umstellung wird Workiva Scripting weiterhin die sichere Ausführung von Skripten auf Python 3.9 bis Oktober 2026 unterstützen.
Wer sollte über diese Umstellung nachdenken? Alle, die derzeit Workiva Scripting-Automationen auf Python 3.9ausführen - egal ob manuell, aus Chains oder über Integrated Automations ausgelöst.
Was ist, wenn ich nichts tue? Ihre Skripte bleiben durch AL2023-Patches bis Oktober 2026 sicher, aber es wird empfohlen, auf die neueste unterstützte Laufzeitversion (3.13) zu migrieren.
Weitere Hintergrundinformationen zu End-of-Life-Terminen und unterstützten Versionen finden Sie auf der offiziellen Python release status webpage.
Wie Workiva diese Änderung unterstützt
Workiva bringt ein Update heraus, das Entwicklern die Kontrolle darüber gibt, welche Python-Laufzeit ihre Skripte nutzen. Dieses Update bringt die folgenden Änderungen:
- Unterstützung für Python 3.13 - Alle neuen Skripte werden standardmäßig auf Python 3.13, die neueste stabile Version, eingestellt.
- Laufzeitkonfiguration pro Skript - Bei jedem Skript können Sie nun die Python-Laufzeitversion (3.9 oder 3.13) auswählen, die das Skript zur Nutzung verwenden soll.
- Abwärtskompatibilität – Alle bestehenden Skripte werden weiterhin Python 3.9 verwenden, bis Sie sie aktualisieren.
- Editor & API-Unterstützung - Sie können die Laufzeit direkt im Workiva Skript-Editor oder über die Skripting-API festlegen oder aktualisieren.
So können Sie nach Ihrem eigenen Zeitplan migrieren, sicher testen und die Produktionsskripte erst dann wechseln, wenn Sie sicher sind, dass sie bereit sind.
Zeitplan für diese Umstellung
Um Ihnen bei der Planung zu helfen, finden Sie hier den Zeitplan für die Markteinführung:
- Python 3.13 in Workiva verfügbar (September 2025) - Alle Kunden können Skripte zur Nutzung von Python 3.9 oder Python 3.13 konfigurieren, indem sie die Scripting-API oder den Scripting-Editor verwenden.
- Ende der Lebensdauer von Python 3.9 (Oktober 2025) - Die offizielle Unterstützung der Python-Community endet. Workiva setzt den Support über AL2023 bis Oktober 2026 fort, aber eine Migration wird dringend empfohlen.
- Oktober 2026 - Workiva plant, den Support für Python 3.9 im Oktober 2026 zu beenden. Danach werden alle Skripte mit Python 3.13 laufen.
Sie sollten so bald wie möglich mit dem Testen von Skripten unter Python 3.13 beginnen und die Produktion nur vorübergehend auf 3.9 belassen. Sobald Sie mit der Nutzung von Python 3.13 vertraut sind, sollten Sie Ihre produktiven Skripte unverzüglich zur Nutzung von Python 3.13 umstellen.
Wechseln eines Skripts zu Python 3.13
Unser empfohlenes Einführungsmuster: eine Kopie erstellen, die Version aktualisieren, testen und dann veröffentlichen. Dadurch wird das Risiko für die Produktion minimiert und Sie können den Verlauf behalten, wenn Sie ihn benötigen.
Schritt 1 – Erstellen Sie eine Kopie
- Erstellen Sie in Workiva eine Kopie Ihres Produktionsskripts.
Die Kopie wird weiterhin auf Python 3.9 eingestellt sein. - Setzen Sie die Laufzeit für die Kopie auf Python 3.13.
Schritt 2 - Testen Sie die Kopie und passen Sie sie an.
- Führen Sie die Kopie in einem sicheren/Testkontext aus.
- Korrigieren Sie alle fehlerhaften Änderungen (siehe "Allgemeine Probleme und Korrekturen").
- Validierung von Ergebnissen, Nebenwirkungen und Leistung.
Schritt 3 - Ändern zu: 3.13 (zwei Optionen)
Option A - Dies wird den Verlauf des Produktionslaufs beibehalten
- Übertragen Sie den aktualisierten Code aus der Kopie zurück in das Originalskript durch Kopieren und Einfügen.
- Ändern Sie die Laufzeit des originalen Skripts auf Python 3.13.
- Führen Sie Ihre Tests erneut aus und fortsetzen Sie dann die normale Planung/Triggerung des Originals.
- (Optional) Archivieren Sie die Kopie oder stellen Sie sie ein.
Option B - Dadurch wird der Verlauf des Produktionslaufs nicht beibehalten
- Ändern Sie den Produktions-Trigger (d. h. den Chains-Trigger) so, dass er vom Originalskript auf das Skript der Kopie verweist.
- Die Kopie wird zum neuen Produktionsskript (das auf Python 3.13 läuft).
- (Optional) Archivieren Sie das Original oder ziehen Sie es zurück.
Aufruf zur Aktion: Für welche Option Sie sich auch entscheiden, verschieben Sie alle Ihre aktiven Skripte bis Oktober 2025 auf Python 3.13.
Aktualisiert die Python-Laufzeitversion
Verwendung der Skripting-API
-
Bestimmen Sie die Laufzeit des Skripts.
GET /v1/scripts/{script_id}Prüfen Sie den Wert für
runtimein der Antwort. -
Aktualisieren Sie das Skript auf Python 3.13.
PATCH /v1/scripts/{script_id} Content-Type: application/json [{ "op": "replace", "path": "/runtime", "value": "python3.13" }]
Weitere Einzelheiten finden Sie in der Dokumentation Scripting Prototype API.
Beispiel: Ändern und Lesen der Python-Laufzeitversion
Der folgende Beispielcode zeigt, wie die Laufzeitversion eines Skripts (3.9 oder 3.13) mithilfe der Skripting-API aktualisiert wird und wie die aktuell konfigurierte Version bestätigt wird.
import os import requests CLIENT_ID = os.environ.get("CLIENT_ID") CLIENT_SECRET = os.environ.get("CLIENT_SECRET") SCRIPT_ID = os.environ.get("SCRIPT_ID") VERSION = os.environ.get("VERSION") #VERSION = "python3.9" #VERSION = "python3.13" SCRIPTS_V1_URL = "https://api.app.wdesk.com/prototype/platform/scripts" AUTH_URL = "https://api.app.wdesk.com/iam/v1/oauth2/token" def change_version(clientId, clientSecret, scriptId, version): auth_header = get_auth_header(clientId, clientSecret) # Change Python Version req_body = [ { "op": "replace", "path": "/runtime", "value": version } ] resp = requests.patch( f"{SCRIPTS_V1_URL}/{scriptId}", json=req_body, headers=auth_header ) name = resp.json().get("name") new_version = resp.json().get("runtime") print("Python version for '" + name + "' script changed to: " + new_version.replace("python", "")) def read_version(client_id, client_secret): auth_header = get_auth_header(client_id, client_secret) # read Python Version resp = requests.get( f"{SCRIPTS_V1_URL}/{SCRIPT_ID}", headers=auth_header ) name = resp.json().get("name") configured_version = resp.json().get("runtime") print("Python version for '" + name + "' script: " + configured_version.replace("python", "")) # Fetches the auth headers for a given client id and secret def get_auth_header(client_id, client_secret): token_headers = {"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"} data_field = ( f"client_id={client_id}&client_secret={client_secret}" f"&grant_type=client_credentials" ) auth_resp = requests.post(f"{AUTH_URL}", data=data_field, headers=token_headers) auth_json = auth_resp.json() bearer_token = "Bearer " + auth_json.get("access_token") return {"Authorization": bearer_token} change_version(CLIENT_ID, CLIENT_SECRET, SCRIPT_ID, VERSION) #read_version(CLIENT_ID, CLIENT_SECRET)Verwenden des Skripteditors
Mit dem Skript-Editor können Sie die Laufzeit direkt in der Benutzeroberfläche konfigurieren. Unter Eigenschaften → Laufzeitversion ist ein neues Dropdown-Menü verfügbar, wo Sie zwischen Python 3.9 und Python 3.13 wählen können.
So aktualisieren Sie ein Skript im Editor:
- Öffnen Sie das Skript im Skript-Editor.
- Rufen Sie das Panel Eigenschaften auf der rechten Seite auf.
- Wählen Sie unter Runtime Version aus dem Dropdown-Menü Python 3.13.
- Speichern Sie Ihre Änderungen.
- Führen Sie das Skript in einer sicheren Umgebung/Testumgebung aus, bevor Sie es in die Produktion übernehmen.
Tipps
- Stellen Sie sicher, dass alle Drittanbieter-Pakete in Ihren Skripten mit Python 3.13 kompatibel sind.
- Aktualisieren Sie alle angehefteten Paketversionen in Ihrer
requirements.txt-Datei (zum Beispiel, anders als in Python 3.9,requests==2.28wird in 3.13 nicht benötigt). - Lesen Sie die offizielle Python-Dokumentation für Details zu den wichtigsten Änderungen in den Python-Versionen 3.10, 3.11, 3.12 und 3.13, einschließlich:
- Struktureller Musterabgleich, f-string Aktualisierungen, verbesserte Fehlermeldungen
- Signifikante Leistungsverbesserungen (Funktionsaufrufe, Zeichenfolgenoperationen, Speicherverwaltung, JSON-Serialisierung/Deserialisierung)
- Veraltete Pakete und bestimmte Paketparameter entfernt (
cgi,cgitb,distutils, etc. wurden veraltet; derasyncio"loop" Parameter wurde entfernt)
Gemeinsame Probleme beim Verschieben von 3.9 nach 3.13 und deren Behebung
Hier finden Sie einige häufige Probleme, die beim Verschieben von Skripten von Python 3.9 nach 3.13 auftreten können, zusammen mit Vorschlägen zur Behebung dieser Probleme:
- Bibliotheken von Drittanbietern - Einige Pakete unterstützen möglicherweise noch nicht Python 3.13.
- Fix: Aktualisieren Sie auf die neueste kompatible Version oder ersetzen Sie sie durch eine Alternative. Testen Sie alle festgehaltenen Anforderungen sorgfältig. Sie können die Unterstützung für Ihre Bibliotheken unter pyreadiness.org/3.13 überprüfen und den Hilfe-Artikel "Unterstützte Skript-Bibliotheken und Abhängigkeiten" lesen, um weitere Informationen zu erhalten.
- Requests-Bibliothek Version – Die
Requests-Bibliothek ist die am weitesten verbreitete Drittanbieter-Bibliothek in Workiva Scripting. In frühen Versionen von Python 3.9 brechen Skripte beiAnfragenVersion 2.30.0 oder neuer ab. Sobald Sie auf Python 3.13 umgestiegen sind, können Sie die neuesten Versionen vonRequestsohne Probleme verwenden. - Python 3.13 hat Unterschiede im Umgang mit Zeichenfolgen und Bytes - Strengere Typüberprüfungen können ausgeblendete Probleme aufdecken.
- Fix: Prüfen Sie auf Code, der
strundbytesmischt und stellen Sie eine explizite Codierung/Decodierung sicher.
- Fix: Prüfen Sie auf Code, der
- Datetime & timezone behavior - Python 3.13 hat Unterschiede in der
zoneinfoBibliothek und ein strengeres Parsing.- Fix: Testen Sie die gesamte Logik für Datum und Zeit, insbesondere die Formatierung und die Konvertierung von Zeitzonen.
- JSON-Serialisierung - Bei einigen Objekten kann die Serialisierung aufgrund strengerer Regeln fehlschlagen.
- Fix: Sicherstellen, dass benutzerdefinierte Objekte konvertiert werden, bevor
json.dumpsoder verwenden Sie Standard-Encoder.
- Fix: Sicherstellen, dass benutzerdefinierte Objekte konvertiert werden, bevor
- Veraltete APIs - Einige Funktionen von Python
stdlib(z.B.asyncio.get_event_loop,distutilsund bestimmte locale APIs), die in Python 3.9 veraltet sind, wurden entfernt.- Fix: Aktualisieren Sie den Code zur Nutzung von unterstützten Alternativen.
- Änderungen der Leistung - Schleifen und asynchrone Aufgaben verhalten sich möglicherweise anders.
- Reparieren: Ausführen von Lasttests auf kritischen Pfaden; Aktualisierung der Gleichzeitigkeitslogik, falls erforderlich.
Tipp: Testen Sie immer zuerst Kopien Ihrer Produktionsskripte. Korrekturen, die in einer kontrollierten Testumgebung angewendet werden, verringern das Risiko von Problemen in der Produktion.
Was ist neu in Python 3.13
Hier ein paar Hervorhebungen der Änderungen für Python 3.13:
- Verbesserter interaktiver Interpreter - Mehrzeilige Bearbeitung, Farben und kolorierte Rückverfolgungen.
- Experimenteller Free-Threaded Modus - Erlaubt echte parallele Threads (keine GIL) auf einigen Plattformen.
- Experimentelle JIT - Erste Vorarbeiten für Leistungsverbesserungen.
- Bessere Debugging-Tools -
locals()Mutationen funktionieren jetzt mit einer klar definierten Semantik. - Neuer Speicherallokator: – Modifiziertes mimalloc enthalten und standardmäßig aktiviert, wenn unterstützt.
- Kleinere Dateien - Docstrings entfernen führende Leerzeichen, was den Speicherverbrauch und die Größe der .pyc-Dateien reduziert.
- Neues dbm-Backend - Verwendet standardmäßig
dbm.sqlite3. - Plattform-Updates - macOS mindestens 10.13, iOS/Android Tier 3, WASI Tier 2.
- Verbesserungen bei der Typisierung - Standardwerte für Typen, Eingrenzung, schreibgeschützte Elemente und Veraltungskommentare.
- Entfernt - Veraltete Module entfernt (z.B.
cgi,telnetlib,imghdr,lib2to3, usw.).
Die vollständigen Versionshinweise finden Sie auf "What's New in Python 3.13" von Python.org.
Wenn Sie sich die spezifischen Änderungen zwischen 3.9 und 3.13 ansehen möchten, lesen Sie bitte nach:
Häufig gestellte Fragen
F: Muss ich alle meine Skripte sofort migrieren?
Nein. Beginnen Sie jetzt mit dem Testen von Skripten mit Python 3.13 und belassen Sie die Produktion nur vorübergehend auf 3.9. Alle Skripte müssen vor Oktober 2026 auf Python 3.13 migriert werden.
F: Werden meine vorhandenen Skripte automatisch abbrechen, wenn Python 3.9 das Ende seiner Lebensdauer erreicht?
Nein. Workiva Scripting wird sich bis Oktober 2026 auf Amazons Python 3.9 Version unter Amazon Linux 2023 (AL2023) verlassen, die weiterhin Sicherheitspatches erhält. Ihre Skripte sind von dem offiziellen Ende der Lebensdauer von Python 3.9 nicht betroffen.
F: Kann ich Skripte auf 3.13 testen, während die Produktion auf 3.9 bleibt?
Ja. Erstellen Sie eine Kopie Ihres Skripts und aktualisieren Sie es zu Testzwecken, damit es unter Python 3.13 läuft. Beheben Sie alle Probleme in der Kopie, bevor Sie sie für die Produktion freigeben. Um Kompatibilitätsverluste zu vermeiden, sollten Sie getrennte Versionen aufbewahren - eine für 3.9 und eine für 3.13 -, so dass Sie bei Bedarf leicht zwischen ihnen wechseln können.
F: Wird der Skripting-Editor das Ändern der Laufzeit unterstützen?
Ja. Die Unterstützung des Editors für Python 3.13 wird zur gleichen Zeit wie die API-Unterstützung im September 2025 verfügbar sein.
F: Wo kann ich mehr über die Unterstützung von Bibliotheken erfahren?
Siehe pyreadiness.org/3.13 und den Workiva-Hilfe-Artikel "Unterstützte Skriptbibliotheken und Abhängigkeiten".
F: Was passiert mit meinen historischen Laufdaten, wenn ich das Skript wechsle?
Wenn Sie das ursprüngliche Skript überschreiben, behalten Sie den Verlauf der Ausführung bei. Wenn Sie Auslöser auf eine Kopie verweisen, bleibt der Verlauf des Originals mit dem alten Skript erhalten.
Q: Was passiert, wenn ich nicht bis Oktober 2026 migriere?
Ihre Skripte werden nach Oktober 2026 automatisch auf Python 3.13 umgestellt, wenn Workiva die Unterstützung für die Ausführung von Skripten unter Python 3.9 unter AL2023 einstellt. Um Unterbrechungen zu vermeiden, sollten Sie Skripte testen und auf Python 3.13 migrieren, und zwar lange vor Oktober 2026.
F: Muss ich meine Chains oder integrierten Automatisierungen ändern, wenn ich migriere?
Nein. Ihre Chains und integrierten Automatisierungen werden weiterhin wie erwartet ausgeführt, solange die zugrunde liegenden Skripte auf Python 3.13 aktualisiert werden. Der wichtigste Schritt besteht darin, sicherzustellen, dass das Skript selbst migriert wird.
F: Kann ich ein Skript von Python 3.13 auf 3.9 zurücksetzen, wenn Probleme auftreten?
Benutzer können die Laufzeit eines Skripts vorübergehend auf Python 3.9 zurückstellen, aber alle Codeänderungen, die zur Anpassung an Python 3.13 vorgenommen wurden, werden nicht automatisch rückgängig gemacht. Sie müssten das Skript manuell anpassen, um es wieder mit 3.9 kompatibel zu machen. Ein besserer Ansatz ist es, getrennte Kopien zu pflegen - eine für Python 3.9 und eine für Python 3.13 -, damit Sie bei Problemen sicher zwischen den Versionen wechseln können.