Workiva Scripting et fin du support pour Python 3.9
Pour garantir la pérennité de vos automatisations, Workiva a ajouté la prise en charge de Python 3.13 , ainsi qu’un paramètre au niveau du script qui vous permet de choisir la version d’exécution pour chaque script. Ce guide explique comment passer en toute sécurité de la version 3,9 à la version 3,13, ce qu’il faut tester et comment déployer les changements avec un minimum de perturbations.
Jusqu’au octobre 2025 , Workiva Scripting s’appuyait sur la version officielle de Python 3.9 publiée par la Fondation Python Software ( ) ; celle-ci a atteint sa fin de vie en octobre 2025 et ne bénéficie donc plus de mises à jour de sécurité ni de corrections de bogues.
En réponse à cela, Workiva Scripting est désormais basé sur l'image « » d'Amazon Linux 2023 (AL2023) , qui propose ses propres versions et prend en charge à la fois Python 3.9 et Python 3.13. Cette modification garantit que Python 3.9 continuera de bénéficier de correctifs de sécurité et d'une maintenance dans le cadre du cycle de mise à jour d'Amazon, même si la version en amont de Python ne fait plus l'objet de correctifs de la part de la communauté open source.
À la suite de cette transition, Workiva Scripting continuera à prendre en charge l'exécution sécurisée des scripts sous Python 3.9 jusqu'au octobre 2027 .
Qui devrait penser à cette migration ? Toute personne exécutant actuellement des automates Workiva Scripting sur Python 3,9- qu’ils soient déclenchés manuellement, à partir de Chains ou via Integrated Automations.
Et si je ne fais rien ? Vos scripts resteront sécurisés grâce aux correctifs AL2023 jusqu'en octobre 2027, mais nous vous recommandons de migrer vers Python 3.13, car il s'agit de la version d'exécution la plus récente prise en charge.
Pour en savoir plus sur les délais de fin de vie et les versions prises en charge, consultez la page web officielle sur l’état des versions de Python.
Comment Workiva soutient ce changement
Workiva a déployé une mise à jour permettant aux développeurs de choisir le moteur d'exécution Python utilisé par leurs scripts. Cette mise à jour a apporté les modifications suivantes :
- Prise en charge de Python 3.13 : Tous les nouveaux scripts utilisent désormais Python 3.13 par défaut, la dernière version stable.
- Migration à l'exécution par script : Les scripts Python 3.9 existants peuvent être migrés vers Python 3.13. Une fois qu'un script a été migré vers Python 3.13, il n'est plus possible de le ramener à Python 3.9.
- Compatibilité ascendante : Tous les scripts existants continuent d'utiliser Python 3.9 jusqu'à ce que vous les mettiez à jour.
- Éditeur et prise en charge de l'API : Vous pouvez définir ou mettre à jour le runtime directement dans l'éditeur de scripts Workiva ou via l'API de script.
Cela vous permet de migrer selon votre propre calendrier, de tester en toute sécurité et de ne changer les scripts de production que lorsque vous êtes sûr qu'ils sont prêts.
Calendrier de ce changement
Pour vous aider à planifier, voici le calendrier de déploiement :
- Python 3.13 disponible dans Workiva (septembre 2025) : Les scripts Python 3.9 existants peuvent être migrés vers Python 3.13 à l'aide de l'API de script ou de l'éditeur de script. Les nouveaux scripts utilisent Python 3.13.
- Fin de vie de Python 3.9 (octobre 2025) : La prise en charge officielle par la communauté Python prend fin. Workiva continuera à assurer la prise en charge via AL2023 jusqu'en octobre 2027, mais la migration est vivement recommandée.
- Octobre 2027 : Workiva prévoit de mettre fin à la prise en charge de Python 3.9 en octobre 2027 ; à partir de cette date, tous les scripts s'exécuteront sous Python 3.13.
Opérer la transition
Vous devriez commencer dès que possible à tester vos scripts sous Python 3.13, tout en conservant l'environnement de production sous Python 3.9 jusqu'à ce que vous ayez vérifié qu'ils fonctionnent correctement sous Python 3.13. Une fois que vous vous sentez à l’aise avec Python 3.13, basculez sans tarder vos scripts de production sur le runtime Python 3.13.
Passage d'un script à Python 3.13
Notre schéma de déploiement recommandé : créer une copie, mettre à jour la version, tester, puis promouvoir. Cela minimise les risques pour la production et vous permet de conserver l'historique des exécutions si vous en avez besoin.
Étape 1 — Faire une copie
- Dans Workiva, faites une copie de votre script de production.
La version sera définie sur Python 3.13.
Étape 2 - Tester et adapter le texte
- Exécutez la copie dans un contexte sûr/test.
- Corrigez toutes les ruptures de compatibilité (voir « Problèmes courants et corrections »).
- Validez les résultats, les effets secondaires et les performances.
Étape 3 - Passage à la version 3.13 (deux options)
Option A - Cette option permet de conserver l'historique de la production.
- Poussez le code mis à jour du copier vers le script original en utilisant copier-coller.
- Modifiez la durée d'exécution du script original en Python 3.13.
- Exécutez à nouveau vos tests, puis reprenez la programmation et les déclenchements normaux sur l'original.
- (Facultatif) Archivez ou retirez la copie.
Option B - Cette option ne permet pas de conserver l'historique du cycle de production.
- Modifiez le déclencheur de production (c’est-à-dire le déclencheur Chaînes) pour qu’il pointe du script original vers le script copie.
- Le produit copié devient le nouveau script de production (s’exécutant sur Python 3.13).
- (Facultatif) Archivez ou retirez l'original.
Appel à l'action : Quelle que soit l'option que vous choisissiez, transférez tous vos scripts actifs vers Python 3.13 d'ici octobre 2027.
Mettre à jour la version de Python
Utilisation de l'API de script
Avant de commencer, assurez-vous que votre autorisation API inclut les champs d'application suivants : script:read et script:write . Pour savoir comment créer ou mettre à jour une autorisation d'API, consultez la page « » (Configuration de l'API Workiva) à l'adresse .
-
Déterminez la durée d'exécution du script.
GET /scripts/{scriptId} Authorization: Bearer {token} X-Version: 2026-01-01Vérifiez la valeur de
runtimedans la réponse. -
Mettez à jour le script avec 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" }]
La modification de l'environnement d'exécution n'entraîne pas automatiquement la régénération du bundle de dépendances du script. Si le script contient une source de type « requirements.txt » ( ) , lancez la génération des dépendances après avoir mis à jour l'environnement d'exécution et attendez que l'opération soit terminée avant d'exécuter le script. Les scripts ne comportant pas de fichier « » (requirements.txt, ) ne nécessitent pas la génération des dépendances.
Pour plus d'informations, consultez les pages Workiva dédiées aux développeurs :
Exemple : Modification et lecture de la version d'exécution de Python
L'exemple de code suivant récupère la version d'exécution actuelle d'un script, le migre vers Python 3.13 et régénère son ensemble de dépendances à l'aide de l'API de script.
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"Version Python du script '{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"La version Python du script '{script['name']}' a été modifiée pour : " 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"La génération des dépendances s'est terminée avec le statut " 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("Dépendances régénérées avec succès.") else: print("Aucun fichier source requirements.txt trouvé ; génération des dépendances ignorée.")Utilisation de l'éditeur de script
Grâce à l'éditeur de scripts, vous pouvez configurer l'environnement d'exécution directement dans l'interface utilisateur. Pour un script existant utilisant Python 3.9, accédez à Propriétés → Version d'exécution afin de le migrer vers Python 3.13. Une fois l'enregistrement effectué, il n'est plus possible de revenir à Python 3.9.
Pour mettre à jour un script dans l'éditeur :
- Ouvrez le script dans l’éditeur de script.
- Accédez au panneau Propriétés sur la droite.
- Sous Runtime Version, sélectionnez Python 3.13 dans la liste déroulante.
- Enregistrez vos modifications.
- Exécuter le script dans un environnement sécurisé/de test avant de promouvoir en production.
Astuces
- Assurez-vous que les paquets tiers présents dans vos scripts sont compatibles avec Python 3.13.
- Mettez à jour toutes les versions de paquets épinglées dans votre fichier
requirements.txt(par exemple, contrairement à Python 3.9,requests==2.28n'est pas nécessaire dans la version 3.13). - Lisez la documentation officielle de Python pour obtenir des détails sur les principaux changements apportés aux versions de Python 3.10, 3.11, 3.12, et 3.13, y compris :
- Correspondance de modèles structurels, mises à jour f-string, messages d’erreur améliorés
- Amélioration significative des performances (appels de fonction, opérations sur les chaînes de caractères, gestion de la mémoire, sérialisation/désérialisation JSON)
- Dépréciation de paquets et suppression de certains paramètres de paquets (
cgi,cgitb,distutils, etc. ont été dépréciés ; le paramètreasyncio"loop" a été supprimé)
Problèmes de migration courants et corrections lors du passage de la version 3.9 à la version 3.13
Voici quelques problèmes courants que vous pouvez rencontrer lors de la migration de scripts de Python 3.9 vers 3.13, ainsi que des suggestions pour les résoudre :
- Bibliothèques tierces : Il se peut que certains paquets ne prennent pas encore en charge Python 3.13.
- Correction : Mettez à jour vers la dernière version compatible, ou remplacez par une alternative. Tester soigneusement toutes les exigences épinglées. Vous pouvez vérifier le support pour vos bibliothèques sur pyreadiness.org/3.13, et réviser l’article d’aide « Bibliothèques de script et dépendances prises en charge » pour plus d’informations.
- Version de la bibliothèque
requise :La bibliothèque de est la bibliothèque tierce la plus couramment utilisée dans Workiva Scripting. Dans les premières versions de Python 3.9, les scripts cesseront de fonctionner avec desdemandesversion 2.30.0 ou plus récente. Une fois que vous migrez vers Python 3.13, vous pouvez utiliser les dernières versions derequestssans problèmes. - Python 3.13 présente des différences dans la gestion des chaînes de caractères et des octets : Des vérifications de type plus strictes peuvent mettre en évidence des problèmes cachés.
- Correction : Vérifier le code qui mélange
stretbyteset assurer un encodage/décodage explicite.
- Correction : Vérifier le code qui mélange
- Comportement des dates, heures et fuseaux horaires : Python 3.13 présente des différences dans la bibliothèque ` ` `
zoneinfo` et applique une analyse plus stricte.- Correction : Testez toute la logique de la date et de l'heure, en particulier le formatage et les conversions de fuseaux horaires.
- Sérialisation JSON : Certains objets peuvent ne pas pouvoir être sérialisés en raison de règles plus strictes.
- Correction : Assurez-vous que les objets personnalisés sont convertis avant
json.dumps, ou utilisez les encodeurs par défaut.
- Correction : Assurez-vous que les objets personnalisés sont convertis avant
- API obsolètes : Certaines fonctions Python
de la bibliothèque standard (par exemple,asyncio.get_event_loop,distutils, ainsi que certaines API de localisation) obsolètes depuis Python 3.9 ont été supprimées.- Correction : Mise à jour du code pour utiliser les alternatives supportées.
- Modifications au niveau des performances : Les boucles et les tâches asynchrones peuvent se comporter différemment.
- Correction : Exécutez des tests de charge sur les chemins critiques ; mettez à jour la logique de concurrence si nécessaire.
Conseil : Commencez toujours par tester des copies de vos scripts de production. Les corrections appliquées dans un environnement de test contrôlé réduisent le risque de problèmes de production.
Nouveautés de Python 3.13
Voici quelques changements importants pour Python 3.13 :
- Interpréteur interactif amélioré : Édition multiligne, couleurs et traces d'erreurs colorées.
- Mode de compilation expérimental « free-threaded » : Permet l'utilisation de véritables threads parallèles (sans GIL) sur certaines plateformes.
- JIT expérimental : Premiers travaux préparatoires en vue d'améliorer les performances.
- De meilleurs outils de débogage :
locals() Lesmutations fonctionnent désormais selon une sémantique bien définie. - Nouvel allocateur de mémoire : Une version modifiée de mimalloc est incluse et activée par défaut si elle est prise en charge.
- Fichiers plus légers : Les chaînes de documentation suppriment les espaces en début de ligne, ce qui réduit l'utilisation de mémoire et la taille des fichiers .pyc.
- Nouveau backend dbm : Utilise par défaut
dbm.sqlite3 . - Mises à jour de la plateforme : macOS version 10.13 minimum, iOS/Android niveau 3, WASI niveau 2.
- Améliorations apportées aux types : Paramètres par défaut des types, restriction des types, éléments en lecture seule et annotations de dépréciation.
- Suppressions : Suppression des modules obsolètes (par exemple : ,
cgi, ,telnetlib, ,imghdr, ,lib2to3, etc.).
Pour les notes de version complètes, consultez le site de Python.org "Quoi de neuf dans Python 3.13".
Si vous souhaitez réviser les modifications spécifiques introduites entre 3.9 et 3.13, voir :
FAQ
Q : Dois-je migrer tous mes scripts immédiatement ?
Non. Vous pouvez dès à présent commencer à tester vos scripts sous Python 3.13 tout en conservant la version 3.9 pour l'environnement de production. Tous les scripts doivent être migrés vers Python 3.13 avant le octobre 2027 .
Q : Mes scripts existants ont-ils cessé de fonctionner automatiquement lorsque Python 3.9 a atteint sa fin de vie ?
Non. Workiva Scripting s'appuie sur la version Python 3.9 d'Amazon sous Amazon Linux 2023 (AL2023), qui continuera à bénéficier de correctifs de sécurité jusqu'en octobre 2027. Vos scripts ne sont pas concernés par la fin de vie officielle de Python 3.9.
Q : Puis-je tester des scripts sur 3.13 tout en conservant la production sur 3.9 ?
Oui. Créez une copie de votre script à des fins de test — cette copie est automatiquement configurée pour s'exécuter sous Python 3.13. Corrigez les éventuels problèmes de la copie avant de la mettre en production. Pour éviter toute perte de compatibilité, conservez des versions distinctes - une pour la version 3,9 et une pour la version 3,13 - afin de pouvoir passer facilement de l’une à l’autre en cas de besoin.
Q : L'éditeur de scripts permet-il de modifier l'environnement d'exécution ?
Oui. Vous pouvez définir l'environnement d'exécution Python d'un script directement dans l'éditeur de scripts : ouvrez le script, accédez au panneau « Propriétés », puis sélectionnez la version dans la section « Version de l'environnement d'exécution ».
Q : Où puis-je obtenir plus d'informations sur le soutien aux bibliothèques ?Consultez
pyreadiness.org/3.13 et l’article d’aide Workiva « Bibliothèques de script et dépendances prises en charge ».
Q : Qu'advient-il de mes données historiques si je change de script ?
Ça dépend. Si vous écrasez le script original, vous conservez l'historique de l'exécution. Si vous pointez les déclencheurs vers une copie, l'historique d'exécution de l'original sera conservé dans l'ancien script.
Q : Que se passera-t-il si je n'effectue pas la migration d'ici octobre 2027 ?
Vos scripts passeront automatiquement à Python 3.13 après octobre 2027, date à laquelle Workiva mettra fin à la prise en charge de l'exécution des scripts sous Python 3.9 dans le cadre de la version AL2023. Pour éviter toute perturbation, il est recommandé de tester et de migrer vos scripts vers Python 3.13 bien avant octobre 2027.
Q : Dois-je modifier mes chaînes ou mes automatismes intégrés lors de la migration ?
Non. Vos chaînes et vos automatisations intégrées continueront de fonctionner comme prévu, à condition que les scripts sous-jacents soient mis à jour vers Python 3.13. L’étape principale consiste à s’assurer que le script lui-même a été migré.
Q : Puis-je ramener un script de Python 3,13 à 3,9 en cas de problème ?
Non. Une fois qu'un script est configuré pour Python 3.13, son environnement d'exécution ne peut plus être ramené à Python 3.9. Si vous souhaitez disposer d'une solution de secours, conservez une copie distincte du script sous Python 3.9 — gérez une version sous 3.9 et une autre sous 3.13 — afin de pouvoir revenir à la copie 3.9 si des problèmes surviennent pendant les tests.