Workiva Scripting y fin de soporte para Python 3.9
Para que tus automatizaciones sigan siendo compatibles con las futuras versiones, Workiva ha incorporado 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 el de octubre de 2025 , Workiva Scripting se basaba en la versión oficial de Python 3.9 de la Fundación de Software Python ( ) ; esta versión llegó al final de su ciclo de vida en octubre de 2025 y, por lo tanto, ya no recibe actualizaciones de seguridad ni correcciones de errores.
En respuesta a esto, Workiva Scripting ha pasado a utilizar la imagen de Amazon Linux 2023 (AL2023) de , que ofrece sus propias compilaciones y es compatible tanto con Python 3.9 como con Python 3.13. Este cambio garantiza que Python 3.9 siga recibiendo parches de seguridad y mantenimiento a través del ciclo de actualizaciones de Amazon, aunque la comunidad de código abierto ya no publique parches para la versión original de Python.
Como consecuencia de esta transición, Workiva Scripting seguirá permitiendo la ejecución segura de scripts en Python 3.9 hasta el de octubre de 2027 .
¿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 seguirán estando protegidos gracias a los parches de AL2023 hasta octubre de 2027, pero te recomendamos que migres a Python 3.13, ya que es la versión más reciente compatible.
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 ha lanzado una actualización para que los desarrolladores puedan controlar qué entorno de ejecución de Python utilizan sus scripts. Esta actualización ha introducido los siguientes cambios:
- Compatibilidad con Python 3.13: Todos los scripts nuevos utilizan ahora por defecto Python 3.13, la última versión estable.
- Migración en tiempo de ejecución por script: Los scripts existentes en Python 3.9 se pueden migrar a Python 3.13. Una vez que un script se ha migrado a Python 3.13, no se puede volver a cambiar a Python 3.9.
- Compatibilidad con versiones anteriores: Todos los scripts existentes seguirán utilizando Python 3.9 hasta que los actualices.
- Editor y soporte de la API: . Puedes configurar o actualizar el tiempo de ejecución directamente en el editor de scripts de Workiva o a través de la API de scripting.
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 de 2025): Los scripts existentes en Python 3.9 se pueden migrar a Python 3.13 mediante la API de scripting o el editor de scripts. Los nuevos scripts utilizan Python 3.13.
- Fin de la vida útil de Python 3.9 (octubre de 2025): Fin del soporte oficial por parte de la comunidad de Python. Workiva seguirá ofreciendo soporte a través de AL2023 hasta octubre de 2027, pero se recomienda encarecidamente realizar la migración.
- Octubre de 2027: Workiva tiene previsto dejar de ofrecer soporte para Python 3.9 en octubre de 2027; a partir de entonces, todos los scripts se ejecutarán en Python 3.13.
Llevar a cabo la transición
Deberías empezar a probar los scripts en Python 3.13 lo antes posible, manteniendo el entorno de producción en la versión 3.9 únicamente hasta que hayas comprobado que funcionan correctamente en la 3.13. 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 se configurará para 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 2027.
Actualizar la versión del tiempo de ejecución de Python
Utilizar la API de script
Antes de empezar, asegúrate de que tu autorización de API incluya los ámbitos « script:read » y « script:write ». Para obtener instrucciones sobre cómo crear o actualizar una autorización de API, consulta Configuración de la API de Workiva .
-
Determina el tiempo de ejecución del script.
GET /scripts/{scriptId} Authorization: Bearer {token} X-Version: 2026-01-01Comprueba el valor de
runtimeen la respuesta. -
Actualiza el script a Python 3.13.
PATCH /scripts/{scriptId} Authorization: Bearer {token} X-Version: 2026-01-01 Content-Type: application/json [{ "op": "replace", "path": "/runtime", "value": "python3.13" }]
Al cambiar el tiempo de ejecución, no se vuelve a generar automáticamente el paquete de dependencias del script. Si el script contiene una fuente de tipo « » en el archivo «requirements.txt» , inicia la generación de dependencias tras actualizar el entorno de ejecución y espera a que la operación finalice antes de ejecutar el script. Los scripts que no incluyan « » en el archivo «requirements.txt» no requieren la generación de dependencias.
Para obtener más información, consulta estas páginas para desarrolladores de Workiva:
Ejemplo: Cambiar y leer la versión del tiempo de ejecución de Python
El siguiente código de ejemplo recupera el tiempo de ejecución actual de un script, lo migra a Python 3.13 y vuelve a generar su paquete de dependencias mediante la API de scripting.
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"Versión de Python para el 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 versión de Python del script '{script['name']}' ha cambiado a: " 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() operación = operación_respuesta.json() si operación["status"] está en {"completed", "failed", "cancelled"}: break time.sleep( int(operación_respuesta.headers.get("Retry-After", "5")) ) si operation["status"] != "completed": raise RuntimeError( f"La generación de dependencias ha finalizado con el estado " f"{operation['status']}: {operation}" ) headers = get_auth_headers(CLIENT_ID, CLIENT_SECRET) read_version(SCRIPT_ID, headers) change_to_python_313(SCRIPT_ID, headers) si has_requirements(SCRIPT_ID, headers): regenerate_dependencies(SCRIPT_ID, headers) print("Dependencias regeneradas correctamente.") else: print("No se ha encontrado ningún archivo source requirements.txt; se ha omitido la generación de dependencias.")Utilizar el editor de scripts
Con el Editor de scripts puedes configurar el entorno de ejecución directamente en la interfaz de usuario. Para un script existente que utilice Python 3.9, ve a « » (Propiedades) → «Runtime Version» (Versión de ejecución) para migrarlo a Python 3.13. Una vez guardado, el script no se puede volver a cambiar a Python 3.9.
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.
- Biblioteca de solicitudes: La biblioteca de
solicitudes de es la biblioteca de terceros más habitual 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 presenta diferencias en el manejo de cadenas y bytes: Las comprobaciones de tipo más estrictas pueden sacar a la luz problemas ocultos.
- 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 la fecha, la hora y la zona horaria: Python 3.13 presenta diferencias en la biblioteca
zoneinfo y un análisis más estricto.- Corrección: Evalúa toda la lógica fecha/hora, especialmente las conversiones de formato y zona horaria.
- Serialización JSON: Es posible que algunos objetos no se puedan serializar debido a unas 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
de la biblioteca estándar (por ejemplo,,asyncio.get_event_loopdistutils y ciertas API de configuración regional) que quedaron obsoletas en Python 3.9.- Corrección: Actualiza el código para utilizar las alternativas admitidas.
- Cambios en el rendimiento: Es posible que los bucles y las tareas asíncronas se comporten 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 trazas de error coloreadas.
- Modo de compilación experimental con subprocesos libres: Permite subprocesos verdaderamente paralelos (sin GIL) en algunas plataformas.
- JIT experimental: Primeros pasos para mejorar el rendimiento.
- Mejores herramientas de depuración:
locals() Lasmutaciones funcionan ahora con una semántica bien definida. - Nuevo asignador de memoria: . Se incluye una versión modificada de mimalloc, que está activada por defecto si es compatible.
- Archivos más pequeños: Las cadenas de documentación eliminan los espacios en blanco iniciales, lo que reduce el consumo de memoria y el tamaño de los archivos .pyc.
- Nuevo backend dbm: . Utiliza de forma predeterminada
dbm.sqlite3 . - Actualizaciones de la plataforma: ; macOS, versión mínima 10.13; iOS/Android, Nivel 3; WASI, Nivel 2.
- Mejoras en los tipos: Valores predeterminados de los tipos, restricción de tipos, elementos de solo lectura y anotaciones de obsolescencia.
- Eliminaciones: Se han eliminado módulos obsoletos (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?
N.° Ya puedes empezar a probar scripts en Python 3.13 y, mientras tanto, mantener el entorno de producción en la versión 3.9. Todos los scripts deben migrarse a Python 3.13 antes del de octubre de 2027 .
P: ¿Dejaron de funcionar automáticamente mis scripts existentes cuando Python 3.9 llegó al final de su ciclo de vida?
N.° Workiva Scripting utiliza la versión 3.9 de Python de Amazon en Amazon Linux 2023 (AL2023), que seguirá recibiendo parches de seguridad hasta octubre de 2027. Tus scripts no se ven afectados por el fin de la vida útil 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 para realizar pruebas; la copia se configura automáticamente para ejecutarse en Python 3.13. 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: ¿Permite el Editor de scripts modificar el tiempo de ejecución?
Sí. Puedes configurar el entorno de ejecución de Python de un script directamente en el Editor de scripts: abre el script, ve al panel «Propiedades» y selecciona la versión en «Versión del entorno de ejecución».
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?
Depende. 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 realizo la migración antes de octubre de 2027?
Tus scripts pasarán automáticamente a Python 3.13 a partir de octubre de 2027, cuando Workiva deje de ofrecer soporte para la ejecución de scripts en Python 3.9 en el marco de AL2023. Para evitar problemas, deberías probar y migrar los scripts a Python 3.13 con suficiente antelación respecto a octubre de 2027.
P: ¿Tengo que cambiar mis Cadenas o Automatizaciones Integradas al migrar?
N.° Tus cadenas y automatizaciones integradas seguirán funcionando según lo previsto, siempre y cuando 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?
N.° Una vez que un script se ha configurado para Python 3.13, su entorno de ejecución no se puede volver a cambiar a Python 3.9. Si quieres tener una opción de reserva, guarda una copia independiente del script en Python 3.9 —mantén una versión en 3.9 y otra en 3.13— para poder volver a la copia de 3.9 si surgen problemas durante las pruebas.