Workiva Scripting e la fine del supporto a Python 3.9
Per rendere le tue automazioni a prova di futuro, Workiva sta introducendo il supporto per Python 3.13, insieme a un'impostazione a livello di script che ti permette di scegliere la versione di runtime per ogni script. Questa guida spiega come passare in modo sicuro dalla versione 3.9 alla 3.13, quali sono i test da effettuare e come introdurre le modifiche con il minimo disturbo.
Fino a ottobre 2025, Workiva Scripting si affidava alla versione ufficiale di Python 3.9 della Python Software Foundation, che ora ha raggiunto la fine del ciclo di vita e non riceve più aggiornamenti di sicurezza o correzioni di bug.
In risposta a questo cambiamento, Workiva Scripting è passata a utilizzare l'immagine Amazon Linux 2023 (AL2023), che fornisce le proprie build di Python 3.9 e 3.13. Questo cambiamento assicura che Python 3.9 riceva continuamente patch di sicurezza e manutenzione attraverso il ciclo di aggiornamenti di Amazon, anche se la versione upstream di Python non viene più patchata dalla comunità open-source.
In seguito a questa transizione, Workiva Scripting continuerà a supportare l'esecuzione di script in modo sicuro su Python 3.9 fino a ottobre 2026.
Chi dovrebbe pensare a questa migrazione? Chiunque stia eseguendo le automazioni di Workiva Scripting su Python 3.9- sia che vengano attivate manualmente, da catene o tramite automazioni integrate.
Cosa succede se non faccio nulla? I tuoi script rimarranno sicuri grazie alle patch AL2023 fino a ottobre 2026, ma si consiglia la migrazione per allinearsi all'ultimo runtime supportato (3.13).
Per ulteriori informazioni sulle tempistiche di fine vita e sulle versioni supportate, consulta la pagina web ufficiale sullo stato dei rilasci di Python.
Come Workiva supporta questo cambiamento
Workiva sta rilasciando un aggiornamento per dare agli sviluppatori il controllo sul runtime Python utilizzato dai loro script. Questo aggiornamento apporterà le seguenti modifiche:
- Supporto di Python 3.13 - Tutti i nuovi script utilizzeranno di default Python 3.13, l'ultima versione stabile.
- Configurazione del runtime per script - Ora ogni script ti permetterà di scegliere la versione del runtime di Python (3.9 o 3.13) da utilizzare.
- Compatibilità con le versioni precedenti - Tutti gli script esistenti continueranno a utilizzare Python 3.9 fino a quando non li aggiornerai.
- Supporto dell'editor e dell'API - Potrai impostare o aggiornare il runtime direttamente nell'editor di script di Workiva o tramite l'API di scripting.
In questo modo potrai migrare secondo le tue tempistiche, fare test sicuri e cambiare gli script di produzione solo quando sei sicuro che siano pronti.
Tempistica per questo passaggio
Per aiutarti a pianificare, ecco il calendario di lancio:
- Python 3.13 disponibile in Workiva (settembre 2025) - Tutti i clienti possono configurare gli script per essere eseguiti su Python 3.9 o Python 3.13 utilizzando la Scripting API o lo Scripting Editor.
- Fine vita di Python 3.9 (ottobre 2025) - Termina il supporto ufficiale della comunità Python. Workiva continuerà a supportare AL2023 fino a ottobre 2026, ma la migrazione è altamente raccomandata.
- Ottobre 2026 - Workiva prevede di terminare il supporto a Python 3.9 nell'ottobre 2026, dopodiché tutti gli script saranno eseguiti su Python 3.13.
Dovresti iniziare a testare gli script su Python 3.13 il prima possibile, mantenendo la produzione su 3.9 solo temporaneamente. Una volta che ti sentirai a tuo agio nell'uso di Python 3.13, passa subito i tuoi script di produzione al runtime Python 3.13.
Passare uno script a Python 3.13
Lo schema di rollout consigliato: creare una copia, aggiornare la versione, testare e promuovere. Questo riduce al minimo i rischi per la produzione e ti permette di conservare la cronologia delle esecuzioni se ne hai bisogno.
Passo 1 - Crea una copia
- In Workiva, crea una copia dello script di produzione.
La copia sarà ancora impostata su Python 3.9. - Imposta il runtime della copia su Python 3.13.
Passo 2 - Testare e adattare la copia
- Esegui la copia in un contesto sicuro/di prova.
- Correggi eventuali modifiche di rottura (vedi "Problemi comuni e correzioni").
- Convalida gli output, gli effetti collaterali e le prestazioni.
Passo 3 - Passa a 3.13 (due opzioni)
Opzione A - In questo modo si manterrà la cronologia dei cicli di produzione
- Riporta il codice aggiornato dalla copia allo script originale tramite copia-e-incolla.
- Cambia il runtime dello script originale in Python 3.13.
- Esegui nuovamente i test, quindi riprendi la normale programmazione/trigger sull'originale.
- (Opzionale) Archivia o ritira la copia.
Opzione B - Questo non manterrà la cronologia dei cicli di produzione
- Cambia l'innesco di produzione (cioè l'innesco Chains) in modo che punti dallo script originale allo script copia.
- La copia diventa il nuovo script di produzione (in esecuzione su Python 3.13).
- (Facoltativo) Archivia o ritira l'originale.
Invito all'azione: Qualunque opzione tu scelga, sposta tutti i tuoi script attivi su Python 3.13 entro ottobre 2025.
Aggiornare la versione runtime di Python
Usare l'API di scripting
-
Determina il tempo di esecuzione dello script.
GET /v1/scripts/{script_id}Controlla il valore di
runtimenella risposta. -
Aggiorna lo script a Python 3.13.
PATCH /v1/scripts/{script_id} Content-Type: application/json [{"op": "replace", "path": "/runtime", "value": "python3.13" }]
Per maggiori dettagli, consulta i documenti Scripting Prototype API.
Esempio: Modifica e lettura della versione runtime di Python
Il seguente esempio di codice mostra come aggiornare la versione runtime di uno script (3.9 o 3.13) utilizzando l'API di scripting e come confermare la versione attualmente configurata.
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) # Modifica della versione di Python 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("La versione di Python per lo script '" + name + "' è cambiata in: " + 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("Versione Python per '" + name + "' script: " + configured_version.replace("python", "")) # Recupera le intestazioni dell'auth per un dato id e segreto del cliente 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)Utilizzo dell'editor di scripting
Con l'Editor di scripting potrai configurare il runtime direttamente nell'interfaccia utente. In Proprietà → Versione del runtime è disponibile un nuovo menu a tendina in cui puoi scegliere tra Python 3.9 e Python 3.13.
Per aggiornare uno script nell'Editor:
- Apri lo script nell'Editor di script .
- Vai al pannello Properties sulla destra.
- In Runtime Version, seleziona Python 3.13 dal menu a tendina.
- Salva le modifiche.
- Esegui lo script in un ambiente sicuro/test prima di promuoverlo alla produzione.
Suggerimenti
- Assicurati che i pacchetti di terze parti presenti nei tuoi script siano compatibili con Python 3.13.
- Aggiorna le versioni dei pacchetti nel tuo file
requirements.txt(ad esempio, a differenza di Python 3.9,requests==2.28non è necessario in 3.13). - Leggi la documentazione ufficiale di Python per maggiori dettagli sulle principali modifiche apportate alle versioni di Python 3.10, 3.11, 3.12, e 3.13, tra cui:
- Corrispondenza dei modelli strutturali, aggiornamenti delle f-stringhe, messaggi di errore migliorati
- Miglioramenti significativi delle prestazioni (chiamate di funzione, operazioni sulle stringhe, gestione della memoria, serializzazione/deserializzazione JSON)
- Deprecazione di pacchetti e rimozione di alcuni parametri dei pacchetti (
cgi,cgitb,distutils, ecc. sono stati deprecati; il parametroasyncio"loop" è stato rimosso)
Problemi comuni di migrazione e correzioni nel passaggio dalla 3.9 alla 3.13
Ecco alcuni problemi comuni che potresti incontrare quando sposti gli script da Python 3.9 a 3.13, insieme alle soluzioni suggerite per risolverli:
- Librerie di terze parti - Alcuni pacchetti potrebbero non supportare ancora Python 3.13.
- Correggi: Aggiorna all'ultima versione compatibile o sostituiscila con una alternativa. Verifica con attenzione tutti i requisiti che ti sono stati assegnati. Puoi verificare il supporto per le tue librerie su pyreadiness.org/3.13 e consultare l'articolo della guida "Librerie di scripting e dipendenze supportate" per maggiori informazioni.
- Versione della libreria di richieste - La libreria
requestsè la libreria di terze parti più diffusa in Workiva Scripting. Nelle prime versioni di Python 3.9, gli script si rompono con le richieste diversione 2.30.0 o più recente. Una volta migrato a Python 3.13, potrai utilizzare le ultime versioni delle richieste disenza problemi. - Python 3.13 presenta differenze nella gestione delle stringhe e dei byte - Controlli di tipo più severi possono far emergere problemi nascosti.
- Fix: Controlla il codice che mescola
strebytee assicura una codifica/decodifica esplicita.
- Fix: Controlla il codice che mescola
- Comportamento di datetime e fuso orario - Python 3.13 presenta differenze nella libreria
zoneinfoe un parsing più rigoroso.- Fix: Verifica tutta la logica di data/ora, in particolare la formattazione e le conversioni di fuso orario.
- Serializzazione JSON - Alcuni oggetti potrebbero non riuscire a essere serializzati a causa di regole più rigide.
- Correzione: Assicurati che gli oggetti personalizzati siano convertiti prima di
json.dumps, oppure usa gli encoder predefiniti.
- Correzione: Assicurati che gli oggetti personalizzati siano convertiti prima di
- API deprecate - Alcune funzioni di Python
stdlib(ad esempio,asyncio.get_event_loop,distutilse alcune API locali) deprecate in Python 3.9 sono state rimosse.- Fix: Aggiornare il codice per utilizzare le alternative supportate.
- Modifiche alle prestazioni - I loop e i task asincroni potrebbero comportarsi in modo diverso.
- Correggi: Esegui i test di carico sui percorsi critici; aggiorna la logica della concorrenza se necessario.
Suggerimento: Testa sempre prima le copie degli script di produzione. Le correzioni applicate in un ambiente di test controllato riducono il rischio di problemi in produzione.
Cosa c'è di nuovo in Python 3.13
Ecco alcune novità di Python 3.13:
- Interprete interattivo migliorato - Modifica su più righe, colori e traceback colorati.
- Modalità di compilazione sperimentale free-threaded - Permette veri thread paralleli (senza GIL) su alcune piattaforme.
- JIT sperimentale - Primi lavori per migliorare le prestazioni.
- Migliori strumenti di debug - Le mutazioni di
locals()ora funzionano con una semantica ben definita. - Nuovo allocatore di memoria - Mimalloc modificato incluso e abilitato per impostazione predefinita se supportato.
- File più piccoli - Le documentazioni eliminano gli spazi bianchi iniziali, riducendo l'uso della memoria e le dimensioni dei file .pyc.
- Nuovo backend dbm - Utilizza
dbm.sqlite3per impostazione predefinita. - Aggiornamenti della piattaforma - macOS minimo 10.13, iOS/Android livello 3, WASI livello 2.
- Miglioramenti alla digitazione - Definizione di default, restringimento, elementi di sola lettura e annotazioni di deprecazione.
- Rimozioni - Moduli deprecati rimossi (ad esempio,
cgi,telnetlib,imghdr,lib2to3, etc.).
Per le note di rilascio complete, consulta la pagina di Python.org "Cosa c'è di nuovo in Python 3.13".
Se vuoi rivedere le modifiche specifiche introdotte tra la versione 3.9 e la 3.13, consulta:
Domande frequenti
D: Devo migrare subito tutti i miei script?
No. Inizia subito a testare gli script su Python 3.13 e mantieni la produzione su 3.9 solo temporaneamente. Tutti gli script devono essere migrati a Python 3.13 prima di ottobre 2026.
D: I miei script esistenti si romperanno automaticamente quando Python 3.9 raggiungerà la fine del ciclo di vita?
No. Workiva Scripting si affiderà alla versione Python 3.9 di Amazon sotto Amazon Linux 2023 (AL2023), che continuerà a ricevere patch di sicurezza, fino all'ottobre 2026. I tuoi script non saranno interessati dalla fine del ciclo di vita ufficiale di Python 3.9.
D: Posso testare gli script su 3.13 mantenendo la produzione su 3.9?
Sì. Crea una copia del tuo script e aggiornalo per farlo girare su Python 3.13 per i test. Correggi eventuali problemi nella copia prima di promuoverla in produzione. Per evitare di perdere la compatibilità, tieni versioni separate, una per la versione 3.9 e una per la 3.13, in modo da poter passare facilmente da una all'altra se necessario.
D: L'editor di scripting supporterà la modifica del runtime?
Sì. Il supporto dell'editor per Python 3.13 sarà disponibile contemporaneamente al supporto delle API nel settembre 2025.
D: Dove posso trovare maggiori informazioni sul supporto delle librerie?
Controlla pyreadiness.org/3.13 e l'articolo della guida di Workiva "Librerie di scripting e dipendenze supportate".
D: Cosa succede ai dati storici delle mie esecuzioni se cambio script?
Se sovrascrivi lo script originale, mantieni la cronologia delle esecuzioni. Se punti i trigger a una copia, la cronologia delle esecuzioni dell'originale rimarrà con il vecchio script.
D: Cosa succede se non eseguo la migrazione entro ottobre 2026?
I tuoi script passeranno automaticamente a Python 3.13 dopo l'ottobre 2026, quando Workiva interromperà il supporto per l'esecuzione di script su Python 3.9 sotto AL2023. Per evitare problemi, dovresti testare e migrare gli script a Python 3.13 ben prima dell'ottobre 2026.
D: Devo cambiare le mie Catene o Automazioni integrate durante la migrazione?
Le catene e le automazioni integrate continueranno a funzionare come previsto, a patto che gli script sottostanti vengano aggiornati a Python 3.13. Il passo principale è assicurarsi che lo script stesso venga migrato.
D: Posso ripristinare uno script da Python 3.13 a 3.9 se si verificano dei problemi?
Gli utenti possono riportare temporaneamente il runtime di uno script a Python 3.9, ma le modifiche apportate al codice per adattarlo a Python 3.13 non verranno ripristinate automaticamente. Dovresti modificare manualmente lo script per renderlo di nuovo compatibile con la versione 3.9. Un approccio migliore è quello di mantenere copie separate, una adattata a Python 3.9 e un'altra a Python 3.13, in modo da poter passare da una versione all'altra in tutta sicurezza in caso di problemi.