Workiva Scripting y fin de soporte para Python 3.9
Para que tus automatizaciones estén preparadas para el futuro, Workiva introduce la compatibilidad con Python 3.13, junto con una configuración a nivel de script que te permite elegir la versión de tiempo de ejecución para cada script. Esta guía explica cómo pasar con seguridad de la versión 3.9 a la 3.13, qué probar y cómo desplegar los cambios con el mínimo trastorno.
Hasta Octubre de 2025, Workiva Scripting dependía de la versión oficial Python 3.9 de la Python Software Foundation, que ya ha llegado al final de su vida útil y ya no recibe actualizaciones de seguridad ni correcciones de errores.
En respuesta a este cambio, Workiva Scripting ha pasado a utilizar la imagen Amazon Linux 2023 (AL2023), que proporciona sus propias compilaciones de Python 3.9 y 3.13. Este cambio garantiza que Python 3.9 reciba parches de seguridad y mantenimiento continuos a través del ciclo de actualización de Amazon, aunque la comunidad de código abierto ya no aplique parches a la versión anterior de Python.
A partir de esta transición, Workiva Scripting seguirá soportando la ejecución de scripts de forma segura en Python 3.9 hasta Octubre de 2026.
¿Quién debe pensar en esta migración? Cualquiera que esté ejecutando actualmente Automatizaciones de Workiva Scripting en Python 3.9-ya se activen manualmente, desde Cadenas o mediante Automatizaciones Integradas.
¿Y si no hago nada? Tus scripts siguen siendo seguros gracias a los parches AL2023 hasta octubre de 2026, pero se recomienda la migración para alinearlos con el último tiempo de ejecución compatible (3.13).
Para más información sobre los plazos de fin de vida y las versiones compatibles, revisa la página oficial sobre el estado de la versión de Python.
Cómo apoya Workiva este cambio
Workiva está lanzando una actualización para dar a los desarrolladores el control sobre el tiempo de ejecución de Python que utilizan sus scripts. Esta actualización traerá los siguientes cambios:
- Soporte de Python 3.13 - Todos los nuevos scripts se ajustarán por defecto a Python 3.13, la última versión estable.
- Configuración de tiempo de ejecución por script - Cada script te permitirá ahora elegir la versión de tiempo de ejecución de Python (3.9 o 3.13) que utilizará el script.
- Compatibilidad con versiones anteriores - Todos los scripts existentes seguirán utilizando Python 3.9 hasta que los actualices.
- Soporte para el editor y la API - Podrás establecer o actualizar el tiempo de ejecución directamente en el Editor de scripts de Workiva o a través de la API de scripts.
Así te aseguras de que puedes migrar según tu propio calendario, evaluar con seguridad y solo cambiar los scripts de producción cuando estés seguro de que están listos.
Calendario para este cambio
Para ayudarte a planificar, aquí tienes el calendario de implantación:
- Python 3.13 disponible en Workiva (Septiembre 2025) - Todos los clientes pueden configurar scripts para que se ejecuten en Python 3.9 o Python 3.13 utilizando la API de Scripting o el Editor de Scripts.
- Fin de vida de Python 3.9 (octubre de 2025) - Finaliza el soporte oficial de la comunidad Python. Workiva seguirá siendo compatible con AL2023 hasta octubre de 2026, pero se recomienda encarecidamente la migración.
- Octubre de 2026 - Workiva tiene previsto finalizar la compatibilidad con Python 3.9 en octubre de 2026, tras lo cual todos los scripts se ejecutarán en Python 3.13.
Deberías evaluar los scripts en Python 3.13 lo antes posible, manteniendo la producción en 3.9 solo temporalmente. Una vez que te sientas cómodo utilizando Python 3.13, cambia tus scripts de producción al tiempo de ejecución de Python 3.13 sin demora.
Cambiar un script a Python 3.13
Nuestro patrón de despliegue recomendado: crea una copia, actualiza la versión, prueba y luego promueve. Esto minimiza el riesgo para la producción y te permite conservar el historial de ejecuciones si lo necesitas.
Paso 1. Hacer una copia
- En Workiva, haz una copia de tu script de producción.
La copia seguirá establecida en Python 3.9. - Establece el tiempo de ejecución de la copia en Python 3.13.
Paso 2. Evaluar y adaptar la copia
- Ejecuta la copia en un contexto seguro/de prueba.
- Corrige cualquier cambio importante (consulta "Incidencias y correcciones comunes").
- Valida los resultados, los efectos secundarios y el rendimiento.
Paso 3. Cambiar a 3.13 (dos opciones)
Opción A - Esto mantendrá el historial de ejecuciones de producción.
- Envía el código actualizado desde la copia al script original a través de copiar y pegar.
- Cambia el tiempo de ejecución del script original a Python 3.13.
- Ejecuta de nuevo tus pruebas y, a continuación, reanuda la programación/disparadores normales en el original.
- (Opcional) Archiva o retira la copia.
Opción B - Al hacerlo no se conservará el historial de ejecuciones de producción.
- Cambia el activador de producción (es decir, el activador Cadenas) para que apunte desde el script original a la copia del script.
- La copia se convierte en el nuevo script de producción (que se ejecuta en Python 3.13).
- (Opcional) Archivar o retirar el original.
Llamada a la acción: Sea cual sea la opción que elijas, traslada todos tus scripts activos a Python 3.13 antes de octubre de 2025.
Actualizar la versión del tiempo de ejecución de Python
Utilizar la API de script
-
Determina el tiempo de ejecución del script.
GET /v1/scripts/{script_id}Comprueba el valor de
runtimeen la respuesta. -
Actualiza el script a Python 3.13.
PATCH /v1/scripts/{script_id} Content-Type: application/json [{ "op": "replace", "path": "/runtime", "value": "python3.13" }]
Para más detalles, consulta la documentación de API de prototipo de script.
Ejemplo: Cambiar y leer la versión del tiempo de ejecución de Python
El siguiente código de ejemplo muestra cómo actualizar la versión en tiempo de ejecución de un script (3.9 o 3.13) utilizando la API de Scripting, y cómo confirmar la versión configurada actualmente.
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)Utilizar el editor de scripts
Con el editor de scripts podrás configurar el tiempo de ejecución directamente en la interfaz de usuario. Hay un nuevo menú desplegable disponible en Propiedades → Versión de tiempo de ejecución donde puedes seleccionar entre Python 3.9 y Python 3.13.
Para actualizar un script en el editor:
- Abre el script en el editor de scripts.
- Ve al panel Propiedades de la derecha.
- En Versión de tiempo de ejecución, selecciona Python 3.13 desde el desplegable.
- Guarda los cambios.
- Ejecuta el script en un entorno seguro/de pruebas antes de promoverlo a producción.
Recomendaciones
- Asegúrate de que cualquier paquete de terceros en tus scripts es compatible con Python 3.13.
- Actualiza cualquier versión de paquete anclada en tu archivo
requirements.txt(por ejemplo, a diferencia de Python 3.9,requests==2.28no es necesaria en 3.13). - Lee la documentación oficial de Python para obtener información detallada sobre los principales cambios en las versiones de Python 3.10, 3.11, 3.12, y 3.13, incluyendo:
- Concordancia estructural de patrones, actualizaciones de cadenas f, mensajes de error mejorados
- Mejoras significativas en el rendimiento (llamadas a funciones, operaciones con cadenas, gestión de memoria, serialización/deserialización de JSON)
- Hay paquetes que han quedado obsoletos y se han eliminado algunos parámetros de los paquetes (
cgi,cgitb,distutils, etc. se han retirado por obsoletos; parámetro "loop"asyncioeliminado)
Incidencias y correcciones comunes de la migración de 3.9 a 3.13
Aquí tienes algunas incidencias comunes a las que puedes enfrentarte al trasladar scripts de Python 3.9 a 3.13, junto con sugerencias para solucionarlas:
- Bibliotecas de terceros - Es posible que algunos paquetes aún no sean compatibles con Python 3.13.
- Corrección: Actualiza a la última versión compatible, o reemplaza por una alternativa. Evalúa cuidadosamente cualquier requisito fijado. Puedes comprobar la compatibilidad con tus Bibliotecas en pyreadiness.org/3.13, y revisar el artículo de ayuda "Bibliotecas y dependencias de scripts compatibles" para obtener más información.
- Versión de biblioteca de solicitudes - La biblioteca de
solicitudeses la biblioteca de terceros más común en Workiva Scripting. En las primeras versiones de Python 3.9, los scripts no funcionarán consolicitudesde la versión 2.30.0 o posteriores. Una vez que migres a Python 3.13, podrás utilizar las últimas versiones de lassolicitudessin incidencias. - Python 3.13 tiene diferencias en el manejo de cadenas y bytes - Unas comprobaciones de tipos más estrictas pueden hacer aflorar incidencias ocultas.
- Corrección: Comprobar si el código mezcla
strybytesy garantizar una codificación/descodificación explícita.
- Corrección: Comprobar si el código mezcla
- Comportamiento de las fechas y zonas horarias - Python 3.13 tiene diferencias en la biblioteca
zoneinfoy un análisis sintáctico más estricto.- Corrección: Evalúa toda la lógica fecha/hora, especialmente las conversiones de formato y zona horaria.
- Serialización JSON - Algunos objetos pueden no serializarse debido a reglas más estrictas.
- Corrección: Asegúrate de que los objetos personalizados se conviertan antes de
json.dumps, o utiliza los codificadores predeterminados.
- Corrección: Asegúrate de que los objetos personalizados se conviertan antes de
- API obsoletas - Se han eliminado algunas funciones de Python
stdlib(por ejemplo,asyncio.get_event_loop,distutilsy ciertas API de configuración regional) obsoletas en Python 3.9.- Corrección: Actualiza el código para utilizar las alternativas admitidas.
- Cambios en el rendimiento - Los bucles y las tareas asíncronas pueden comportarse de forma diferente.
- Corrige: Ejecuta pruebas de carga en rutas críticas; actualiza la lógica de concurrencia si es necesario.
Consejo: Evalúa siempre primero las copias de tus scripts de producción. Las correcciones aplicadas en un entorno de pruebas controlado reducen el riesgo de incidencias en la producción.
Novedades de Python 3.13
Aquí tienes algunos cambios destacados de Python 3.13:
- Intérprete interactivo mejorado - Edición multilínea, colores y seguimientos coloreados.
- Modo experimental de construcción con hilos libres - Permite verdaderos hilos paralelos (sin GIL) en algunas plataformas.
- JIT experimental - Primeras bases para mejorar el rendimiento.
- Mejores herramientas de depuración: Ahora las mutaciones
locals()funcionan con una semántica bien definida. - Nuevo asignador de memoria - Se incluye mimalloc modificado y se activa de forma predeterminada si es compatible.
- Archivos más pequeños - Las cadenas de texto eliminan los espacios en blanco iniciales, lo que reduce el uso de memoria y el tamaño de los archivos .pyc.
- Nuevo backend dbm - Utiliza
dbm.sqlite3de forma predeterminada. - Actualizaciones de plataforma - macOS mínimo 10.13, iOS/Android Nivel 3, WASI Nivel 2.
- Mejoras en la tipificación - Valores predeterminados de tipo, estrechamiento, elementos de solo lectura y anotaciones de desaprobación.
- Eliminaciones - Módulos eliminados (por ejemplo,
cgi,telnetlib,imghdr,lib2to3, etc.).
Para ver las notas de la versión completa, consulta "Novedades de Python 3.13" de Python.org.
Si quieres revisar los cambios específicos introducidos entre la 3.9 y la 3.13, consulta:
Preguntas frecuentes
P: ¿Tengo que migrar todos mis scripts inmediatamente?
No. Evaluar los scripts en Python 3.13 ahora y mantener la producción en 3.9 solo temporalmente. Todos los scripts deben migrarse a Python 3.13 antes de Octubre de 2026.
P: ¿Se romperán automáticamente mis scripts existentes cuando Python 3.9 llegue al final de su vida útil?
No. Workiva Scripting se basará en la versión Python 3.9 de Amazon bajo Amazon Linux 2023 (AL2023), que sigue recibiendo parches de seguridad, hasta octubre de 2026. Tus scripts no se verán afectados por el fin de vida oficial de Python 3.9.
P: ¿Puedo evaluar scripts en 3.13 manteniendo la producción en 3.9?
Sí. Crea una copia de tu script y actualízalo para que se ejecute en Python 3.13 para pruebas. Soluciona cualquier incidencia en la copia antes de pasarla a producción. Para no perder compatibilidad, mantén versiones separadas -una para la 3.9 y otra para la 3.13- de modo que puedas cambiar fácilmente de una a otra si es necesario.
P: ¿Soportará el editor de scripts cambiar el tiempo de ejecución?
Sí. La compatibilidad del editor con Python 3.13 estará disponible al mismo tiempo que la compatibilidad con la API en septiembre de 2025.
P: ¿Dónde puedo obtener más información sobre el apoyo bibliotecario?
Comprueba pyreadiness.org/3.13 y el artículo de ayuda de Workiva "Bibliotecas de scripts y dependencias compatibles".
P: ¿Qué ocurre con mis datos de ejecución históricos si cambio de script?
Si sobrescribes el script original, conservas el historial de ejecuciones. Si apuntas los activadores a una copia, el historial de ejecución del original permanecerá con el script antiguo.
P: ¿Qué ocurre si no he migrado antes de octubre de 2026?
Tus scripts pasarán automáticamente a Python 3.13 después de octubre de 2026, cuando Workiva deje de admitir la ejecución de scripts en Python 3.9 según AL2023. Para evitar interrupciones, debes Evaluar y Migrar los scripts a Python 3.13 mucho antes de Octubre de 2026.
P: ¿Tengo que cambiar mis Cadenas o Automatizaciones Integradas al migrar?
No. Tus Cadenas y Automatizaciones Integradas seguirán ejecutándose como se espera, siempre que los scripts subyacentes se actualicen a Python 3.13. La etapa principal es asegurarse de que se migra el propio script.
P: ¿Puedo revertir un script de Python 3.13 a 3.9 si se producen incidencias?
Los usuarios pueden volver a cambiar el tiempo de ejecución de un script a Python 3.9 temporalmente, pero cualquier cambio de código realizado para adaptarlo a Python 3.13 no se revertirá automáticamente. Tendrías que ajustar manualmente el script para que volviera a ser compatible con la 3.9. Un enfoque mejor es mantener copias separadas -una adaptada a Python 3.9 y otra a Python 3.13- para que puedas cambiar de versión con seguridad si surgen incidencias.