Workiva Skripting und Ende der Unterstützung für Python 3.9
Um Ihre Automatisierungen zukunftssicher zu machen, hat Workiva die Unterstützung für Python 3.13 eingeführt sowie eine 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 zum . Oktober 2025 stützte sich Workiva Scripting auf die offizielle Python-3.9-Version der Python Software Foundation ; diese erreichte im Oktober 2025 das Ende ihres Lebenszyklus und erhält daher keine Sicherheitsupdates oder Fehlerbehebungen mehr.
Als Reaktion darauf ist Workiva Scripting auf die Verwendung des Images „ “ von Amazon Linux 2023 (AL2023) umgestiegen, das eigene Builds sowie Unterstützung sowohl für Python 3.9 als auch für Python 3.13 bietet. Diese Änderung stellt sicher, dass Python 3.9 im Rahmen des Amazon-Updatezyklus weiterhin Sicherheitspatches und Wartungsmaßnahmen erhält, auch wenn die Open-Source-Community für die Upstream-Version von Python keine Patches mehr bereitstellt.
Im Zuge dieser Umstellung wird Workiva Scripting die sichere Ausführung von Skripten unter Python 3.9 bis zum . Oktober 2027 weiterhin 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 die AL2023-Patches bis Oktober 2027 sicher, wir empfehlen Ihnen jedoch, auf Python 3.13 umzusteigen, da dies die aktuellste unterstützte Laufzeitumgebung ist.
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 hat ein Update veröffentlicht, mit dem Entwickler festlegen können, welche Python-Laufzeitumgebung ihre Skripte verwenden. Dieses Update brachte folgende Änderungen mit sich:
- Unterstützung für Python 3.13: Alle neuen Skripte verwenden nun standardmäßig Python 3.13, die aktuellste stabile Version.
- Migration zur Laufzeit pro Skript: Bestehende Python-3.9-Skripte können auf Python 3.13 migriert werden. Nachdem ein Skript auf Python 3.13 migriert wurde, kann es nicht mehr auf Python 3.9 zurückgesetzt werden.
- Abwärtskompatibilität: Alle vorhandenen Skripte verwenden weiterhin Python 3.9, bis Sie sie aktualisieren.
- Editor und API-Unterstützung: Sie können die Laufzeit direkt im Workiva-Skript-Editor oder über die Scripting-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): Vorhandene Python-3.9-Skripte können mithilfe der Scripting-API oder des Scripting-Editors auf Python 3.13 migriert werden. Neue Skripte verwenden Python 3.13.
- Ende der Lebensdauer von Python 3.9 (Oktober 2025): Der offizielle Support durch die Python-Community endet. Workiva wird den Support für AL2023 bis Oktober 2027 fortsetzen, eine Migration wird jedoch dringend empfohlen.
- Oktober 2027: Workiva plant, den Support für Python 3.9 im Oktober 2027 einzustellen; danach werden alle Skripte unter Python 3.13 ausgeführt.
Den Übergang gestalten
Sie sollten so bald wie möglich damit beginnen, Skripte unter Python 3.13 zu testen, während Sie die Produktionsumgebung vorerst weiterhin ausschließlich auf 3.9 laufen lassen, bis Sie sichergestellt haben, dass die Skripte unter 3.13 einwandfrei funktionieren. 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 Instanz wird auf Python 3.13 eingestellt.
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 zum Handeln: Unabhängig davon, für welche Option Sie sich entscheiden, sollten Sie alle Ihre aktiven Skripte bis Oktober 2027 auf Python 3.13 umstellen.
Aktualisiert die Python-Laufzeitversion
Verwendung der Skripting-API
Bevor Sie beginnen, stellen Sie sicher, dass Ihre API-Berechtigung die Bereiche „ script:read “ und „ script:write “ umfasst. Anleitungen zum Erstellen oder Aktualisieren einer API-Berechtigung finden Sie unter Workiva API Setup .
-
Bestimmen Sie die Laufzeit des Skripts.
GET /scripts/{scriptId} Authorization: Bearer {token} X-Version: 2026-01-01Prüfen Sie den Wert für
runtimein der Antwort. -
Aktualisieren Sie das Skript auf Python 3.13.
PATCH /scripts/{scriptId} Authorization: Bearer {token} X-Version: 01.01.2026 Content-Type: application/json [{ „op“: „replace“, „path“: „/runtime“, „value“: „python3.13“ }]
Durch das Ändern der Laufzeit wird das Abhängigkeitspaket des Skripts nicht automatisch neu generiert. Wenn das Skript eine Quelle vom Typ „ “ aus der Datei „requirements.txt“ enthält ( ), starten Sie die Generierung der Abhängigkeiten nach der Aktualisierung der Laufzeitumgebung und warten Sie, bis der Vorgang abgeschlossen ist, bevor Sie das Skript ausführen. Skripte ohne „ “, „requirements.txt“ und „ “ erfordern keine Generierung von Abhängigkeiten.
Weitere Informationen finden Sie auf diesen Workiva-Entwicklerseiten:
Beispiel: Ändern und Lesen der Python-Laufzeitversion
Der folgende Beispielcode ermittelt die aktuelle Laufzeit eines Skripts, migriert es auf Python 3.13 und generiert dessen Abhängigkeitspaket mithilfe der Scripting-API neu.
import os import time import requests CLIENT_ID = os.environ["CLIENT_ID"] CLIENT_SECRET = os.environ["CLIENT_SECRET"] SCRIPT_ID = os.environ["SCRIPT_ID"] API_VERSION = "2026-01-01" API_BASE_URL = "https://api.app.wdesk.com" SCRIPTS_API_URL = f"{API_BASE_URL}/scripts" AUTH_URL = f"{API_BASE_URL}/oauth2/token" def get_auth_headers(client_id, client_secret): response = requests.post( AUTH_URL, headers={ "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8", "X-Version": API_VERSION, }, data={ "client_id": client_id, "client_secret": client_secret, "grant_type": "client_credentials", }, timeout=30, ) response.raise_for_status() return { "Authorization": f"Bearer {response.json()['access_token']}", "X-Version": API_VERSION, } def read_version(script_id, headers): response = requests.get( f"{SCRIPTS_API_URL}/{script_id}", headers=headers, timeout=30, ) response.raise_for_status() script = response.json() print( f"Python-Version für das Skript '{script['name']}': " f"{script['runtime'].replace('python', '')}" ) def change_to_python_313(script_id, headers): response = requests.patch( f"{SCRIPTS_API_URL}/{script_id}", headers={ **headers, "Content-Type": "application/json", }, json=[{ "op": "replace", "path": "/runtime", "value": "python3.13", }], timeout=30, ) response.raise_for_status() script = response.json() print( f"Python-Version für das Skript '{script['name']}' geändert auf: " f"{script['runtime'].replace('python', '')}" ) def has_requirements(script_id, headers): response = requests.get( f"{SCRIPTS_API_URL}/{script_id}/sources", headers=headers, timeout=30, ) response.raise_for_status() return any( source["path"] == "requirements.txt" for source in response.json()["data"] ) def regenerate_dependencies(script_id, headers): response = requests.post( f"{SCRIPTS_API_URL}/{script_id}/dependencies/generation", headers=headers, timeout=30, ) response.raise_for_status() operation_url = response.json()["operationLocation"] while True: operation_response = requests.get( operation_url, headers=headers, timeout=30, ) operation_response.raise_for_status() operation = operation_response.json() if operation["status"] in {"completed", "failed", "cancelled"}: break time.sleep( int(operation_response.headers.get("Retry-After", "5")) ) if operation["status"] != "completed": raise RuntimeError( f"Die Generierung der Abhängigkeiten endete mit dem Status " f"{operation['status']}: {operation}" ) headers = get_auth_headers(CLIENT_ID, CLIENT_SECRET) read_version(SCRIPT_ID, headers) change_to_python_313(SCRIPT_ID, headers) if has_requirements(SCRIPT_ID, headers): regenerate_dependencies(SCRIPT_ID, headers) print("Abhängigkeiten erfolgreich neu generiert.") else: print("Keine „requirements.txt“-Quelle gefunden; Generierung der Abhängigkeiten übersprungen.")Verwenden des Skripteditors
Mit dem Scripting Editor können Sie die Laufzeitumgebung direkt in der Benutzeroberfläche konfigurieren. Um ein bestehendes Skript, das Python 3.9 verwendet, auf Python 3.13 zu migrieren, wählen Sie „ -Eigenschaften“ → „Laufzeitversion“ . Nach dem Speichern kann das Skript nicht mehr auf Python 3.9 zurückgesetzt werden.
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 Python 3.13 möglicherweise noch nicht.
- 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.
- Erfordert die Bibliothek „ “ Die
Bibliothek „ “ von ist die am häufigsten verwendete 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 weist Unterschiede bei der Verarbeitung von Zeichenketten und Bytes auf: Strengere Typüberprüfungen können verborgene 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
- Verhalten von Datums- und Zeitangaben sowie Zeitzonen: Python 3.13 weist Unterschiede in der Bibliothek „ “ („
zoneinfo“ ) auf und verfügt über strengere Parsing-Regeln.- 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 Python- -
stdlib- -Funktionen (zum Beispiel ,asyncio.get_event_loop ,,distutilssowie bestimmte Locale-APIs), die in Python 3.9 als veraltet markiert wurden, wurden entfernt.- Fix: Aktualisieren Sie den Code zur Nutzung von unterstützten Alternativen.
- Leistungsänderungen: 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 farblich hervorgehobene Tracebacks.
- Experimenteller „Free-Threaded“-Build-Modus: Ermöglicht auf einigen Plattformen echte parallele Threads (ohne GIL).
- Experimentelles JIT: Erste Grundlagen für Leistungsverbesserungen.
- Bessere Debugging-Tools:
locals()Mutationen funktionieren nun mit klar definierter Semantik. - Neuer Speicherzuordner: Eine modifizierte Version von mimalloc ist enthalten und standardmäßig aktiviert, sofern sie unterstützt wird.
- Kleinere Dateien: Docstrings entfernen führende Leerzeichen, wodurch der Speicherbedarf und die Größe der .pyc-Dateien reduziert werden.
- 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: Typ-Standardwerte, Typ-Einschränkung, schreibgeschützte Elemente und Anmerkungen zur Veralterung.
- Entfernungen: Veraltete Module wurden entfernt (zum Beispiel
cgi,telnetlib,imghdr,lib2to3usw.).
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. Sie können ab sofort damit beginnen, Skripte unter Python 3.13 zu testen und dabei die Produktionsumgebung weiterhin auf 3.9 laufen lassen. Alle Skripte müssen bis zum . Oktober 2027 auf Python 3.13 umgestellt werden .
F: Sind meine bestehenden Skripte automatisch nicht mehr funktionsfähig geworden, als Python 3.9 das Ende seiner Lebensdauer erreicht hat?
Nein. Workiva Scripting basiert auf der Python-Version 3.9 von Amazon unter Amazon Linux 2023 (AL2023), für die bis Oktober 2027 weiterhin Sicherheitspatches bereitgestellt werden. Ihre Skripte sind vom offiziellen Ende des Lebenszyklus 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 zu Testzwecken – die Kopie wird automatisch so eingestellt, dass sie unter Python 3.13 ausgeführt wird. 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: Unterstützt der Skript-Editor die Änderung der Laufzeit?
Ja. Sie können die Python-Laufzeitumgebung eines Skripts direkt im Skript-Editor festlegen – öffnen Sie das Skript, wechseln Sie zum Bereich „Eigenschaften“ und wählen Sie unter „Laufzeitversion“ die gewünschte Version aus.
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?
Das kommt darauf an. 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.
F: Was passiert, wenn ich bis Oktober 2027 nicht umsteige?
Ihre Skripte werden nach Oktober 2027 automatisch auf Python 3.13 umgestellt, da Workiva ab diesem Zeitpunkt die Unterstützung für die Ausführung von Skripten unter Python 3.9 im Rahmen von AL2023 einstellt. Um Unterbrechungen zu vermeiden, sollten Sie Ihre Skripte rechtzeitig vor Oktober 2027 testen und auf Python 3.13 umstellen.
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?
Nein. Sobald ein Skript auf Python 3.13 eingestellt ist, kann die Laufzeitumgebung nicht mehr auf Python 3.9 zurückgesetzt werden. Wenn Sie eine Ausweichlösung wünschen, bewahren Sie eine separate Kopie des Skripts unter Python 3.9 auf – pflegen Sie eine Version unter 3.9 und eine weitere unter 3.13 –, damit Sie auf die 3.9-Kopie zurückgreifen können, falls während der Tests Probleme auftreten sollten.