El 1 de septiembre de 2026, Python 3.15 superó su última etapa antes del lanzamiento: la candidata a versión 3.15.0rc2, ya congelada en funcionalidades. La versión final está prevista para el 1 de octubre. Tres cambios destacan para el back-end web: imports diferidos explícitos, UTF-8 como codificación por defecto y un compilador JIT profundamente renovado.
Una candidata a versión ya congelada
La rc2 cierra la fase de desarrollo: no se añadirán más funcionalidades y la ABI permanece estable hasta la versión final. Reúne alrededor de 144 correcciones notificadas desde la rc1, señal de un ciclo centrado en la estabilización.
| Hito | Fecha | Alcance |
|---|---|---|
| 3.15.0rc1 | Agosto de 2026 | Congelación de funcionalidades |
| 3.15.0rc2 | 1 de septiembre de 2026 | Última RC, ABI congelada, ~144 correcciones |
| 3.15.0 final | 1 de octubre de 2026 | Versión de producción |
Para los equipos que explotan servicios Python en producción, la ventana de pruebas se cierra: es el momento de validar las dependencias contra la RC, con la misma disciplina de puesta en producción —un servicio gestionado por systemd, un proxy inverso— que en cualquier otro back-end.
PEP 810: imports diferidos, pero explícitos
El cambio más visible es una nueva palabra clave contextual, lazy. Un módulo marcado como diferido solo se carga en el primer acceso a uno de sus atributos, lo que reduce la latencia de arranque y la huella de memoria de las aplicaciones que importan mucho sin usarlo todo.
lazy import json
lazy from pathlib import Path
print("...") # json et pathlib pas encore charges
data = json.loads('{"cle": "valeur"}') # json est charge ici
racine = Path(".") # pathlib est charge iciExiste un modo de compatibilidad mediante la variable __lazy_modules__, útil para diferir imports sin reescribir cada línea. La ganancia es más clara en los programas de línea de comandos, cuyo tiempo de arranque se paga en cada invocación —un terreno conocido para las herramientas CLI—.
La contrapartida está en la palabra «explícito»: a diferencia de un mecanismo automático, PEP 810 deja la decisión al desarrollador, import por import. Los efectos secundarios que se disparan al importar —registro de complementos, apertura de conexiones— no deben diferirse sin análisis.
UTF-8 por defecto: el fin de una fuente de errores silenciosos
Con PEP 686, Python usa ahora UTF-8 como codificación por defecto, con independencia del entorno del sistema. Una llamada como open('datos.txt') se lee en UTF-8 sin configuración, lo que elimina las diferencias de comportamiento entre el equipo de desarrollo y un servidor con otra configuración regional.
El comportamiento histórico sigue disponible: PYTHONUTF8=0 o la opción -X utf8=0 restauran la codificación dependiente de la configuración regional mientras se migran los escasos scripts que dependían de ella.
Un archivo abierto sin especificar la codificación se lee ahora en UTF-8, sea cual sea el servidor: desaparece la principal causa de discrepancias entre entornos.
Un JIT renovado y dos nuevos tipos nativos
El compilador JIT, experimental en versiones anteriores, ha sido «notablemente mejorado» según las notas de la versión, que indican ganancias del orden del 8 al 13 % según la plataforma. Los binarios de Windows de 64 bits adoptan además el intérprete de llamadas de cola. Como otros ecosistemas que apuestan por la velocidad de ejecución, Python busca reducir el coste de la interpretación.
En cuanto a los tipos, dos incorporaciones entran en builtins: frozendict, un diccionario inmutable y hashable (PEP 814), y sentinel, para crear valores centinela únicos con una representación legible (PEP 661).
>>> config = frozendict(hote="db.interne", port=5432)
>>> config["port"]
5432
>>> config["port"] = 5433
TypeError: 'frozendict' object does not support item assignmentPunto de vigilancia. Los imports diferidos trasladan el coste de la carga al primer acceso: una excepción de importación ya no aparece al arrancar, sino en mitad de la ejecución. En un servicio web, un error de configuración que antes se detectaba al iniciar puede convertirse en un incidente en producción. Resérvalos para módulos pesados y sin efectos secundarios.
Lo que hay que recordar
- Python 3.15 está congelado desde la rc2 del 1 de septiembre; la versión final sale el 1 de octubre de 2026.
- PEP 810 aporta imports diferidos explícitos (
lazy import), eficaces en el arranque de herramientas y aplicaciones. - PEP 686 impone UTF-8 por defecto, reversible mediante
PYTHONUTF8=0. - El JIT progresa y
frozendict/sentinelse suman a los tipos nativos.
Los imports diferidos son la funcionalidad que más esperaba, pero también la que más disciplina exige. En mis propios servicios solo los activaré en módulos pesados y verificados sin efectos secundarios: una importación que falla en plena petición en lugar de al arrancar es el tipo de sorpresa que se paga cara un viernes por la noche. — Simon Janvier
Fuente primaria: «What’s New In Python 3.15», la documentación oficial, y las notas de la candidata 3.15.0rc2.
