Python 3.15 se retrasa una semana por un fallo en las importaciones

noticias programacion

El equipo de CPython ha tenido que lanzar un tercer release candidate de emergencia, el 3.15.0rc3, después de que varios bugs de última hora en la nueva función de importaciones fallidas amenazaran con colarse en la versión final.

El lanzamiento estable se ha movido del 1 al 9 de octubre, pero la espera merece la pena: Python 3.15 llega con importaciones perezosas, frozendict, sentinel, un nuevo perfilador estadístico y un JIT hasta un 13% más rápido.

El RC3 sorpresa: cuando las importaciones perezosas casi arruinan el lanzamiento

Python 3.15 debía ser la versión más predecible del año. Su calendario estaba fijado desde hacía meses: la versión final llegaría el 1 de octubre de 2026. Sin embargo, a última hora, el equipo de CPython detectó varios bugs críticos en la nueva funcionalidad de importaciones perezosas (lazy imports) que podían afectar a la estabilidad de la versión final.

La respuesta fue rápida y contundente: el 2 de octubre se lanzó un tercer release candidate no planificado, el 3.15.0rc3, con alrededor de 156 correcciones de errores, mejoras de compilación y cambios en la documentación aportados por 82 contribuyentes desde el rc2. El lanzamiento final se movió al viernes 9 de octubre.

“Tuvimos algunos bloqueadores de última hora en las importaciones perezosas, y tiene sentido incluirlos en la versión final de 3.15.0”, explicó el equipo de CPython en el anuncio oficial.

Los bugs afectaban a comportamientos tan sutiles como submódulos que se cargaban demasiado pronto o que no se cargaban en absoluto, un problema que podía romper la promesa central de las importaciones perezosas: que los módulos solo se carguen cuando realmente se necesitan.

Las importaciones perezosas: la gran promesa de Python 3.15

La función estrella de esta versión son las importaciones perezosas explícitas, implementadas a través de la PEP 810. El mecanismo es tan sencillo como revolucionario: ahora puedes escribir lazy import seguido del nombre del módulo, y Python no lo cargará hasta que lo uses por primera vez.

lazy import pandas as pd

# El módulo no se carga hasta aquí
df = pd.read_csv("datos.csv")

El impacto en el rendimiento puede ser notable. En aplicaciones con muchas dependencias, las importaciones perezosas reducen el tiempo de arranque y el consumo de memoria, especialmente en herramientas de línea de comandos y scripts que solo utilizan una fracción de las bibliotecas que importan.

La contrapartida es que la implementación es sutil y propensa a errores. Los bugs del rc2 demostraron que la frontera entre “cargar cuando se necesita” y “no cargar nunca” es más fina de lo que parece.

frozendict y sentinel: dos nuevos tipos que los desarrolladores llevaban años pidiendo

Python 3.15 añade dos tipos integrados que los desarrolladores han estado solicitando durante años:

  • frozendict: el equivalente inmutable de dict, del mismo modo que tuple lo es de list y frozenset de set. Perfecto para diccionarios que deben ser constantes o que se van a usar como claves en otros diccionarios.
  • sentinel: una forma limpia y explícita de representar “sin valor”. Hasta ahora, los desarrolladores usaban None, object() o cadenas especiales como centinelas, lo que generaba ambigüedad y bugs sutiles. Con sentinel, el valor por defecto es inequívoco.

Tachyon: el perfilador que jubila a cProfile

Python 3.15 introduce profiling.sampling, un nuevo módulo de perfilado estadístico conocido como Tachyon. A diferencia de cProfile, que instrumenta el código y añade sobrecarga, Tachyon muestrea la pila de ejecución a intervalos regulares, lo que permite perfilar sin modificar el código y con una sobrecarga mínima.

Lo más potente es que Tachyon puede adherirse a un proceso en ejecución sin necesidad de reiniciarlo. Esto significa que puedes diagnosticar problemas de rendimiento en producción sin tocar una sola línea de código.

El módulo también jubila al antiguo profile y reubica cProfile bajo profiling.tracing, unificando las herramientas de perfilado bajo un único paraguas.

El JIT sube de nivel: hasta un 13% más rápido

El compilador JIT de Python, introducido experimentalmente en versiones anteriores, recibe una actualización significativa en 3.15. Los benchmarks oficiales de pyperformance reportan una mejora del 8-9% en la media geométrica sobre x86-64 Linux y hasta un 12-13% sobre AArch64 macOS.

El JIT sigue desactivado por defecto y consume entre un 10% y un 20% más de memoria, pero quienes lo activen notarán una diferencia real en cargas de trabajo intensivas.

abi3t: el ABI estable para Python sin GIL

La PEP 803 introduce abi3t, una variante del ABI estable diseñada específicamente para las builds free-threaded (sin GIL). Esto significa que los desarrolladores de extensiones en C podrán distribuir un único wheel por plataforma que funcione tanto en builds con GIL como sin él.

Es un paso crucial para el ecosistema de Python sin GIL, que poco a poco va ganando madurez y tracción.

UTF-8 como codificación por defecto en todas partes

Python 3.15 adopta UTF-8 como codificación por defecto en todos los entornos, una medida que elimina una fuente constante de errores en sistemas Windows y en entornos con configuraciones regionales no occidentales. La medida, largamente esperada, simplifica el manejo de archivos de texto y reduce la necesidad de especificar encoding="utf-8" explícitamente.

El primer Consejo de Packaging de Python

Más allá del lenguaje, octubre ha traído una noticia histórica para la comunidad: la primera elección del Consejo de Packaging de Python (PPC).

Creado por la PEP 772, el PPC es un órgano electo de cinco miembros con autoridad sobre los estándares de empaquetado, la Guía de Usuario de Packaging de Python y las decisiones ecosistémicas relacionadas. Sustituye el modelo de gobernanza informal de la PyPA.

Los elegidos fueron:
– Brett Cannon (2 años)
– Pradyun Gedam (2 años)
– Donald Stufft (1 año)
– Henry Schreiner (1 año)
– William Woodruff (1 año)

De los 812 miembros votantes elegibles de la PSF, 541 emitieron su voto, una participación notable para una primera elección.

PyPI cambia la forma de contar descargas: menos infladas, más realistas

En agosto de 2026, PyPI implementó un cambio silencioso pero significativo en su metodología de conteo de descargas. A partir del 24 de agosto, solo se cuentan las descargas de artefactos reales (archivos .whl, .tar.gz), excluyendo las peticiones de metadatos.

El efecto fue inmediato: las cifras de descargas en pypistats.org cayeron entre un 20% y un 40% de la noche a la mañana. El cambio no significa que se descarguen menos paquetes, sino que las cifras anteriores estaban infladas por peticiones de metadatos que no representaban descargas reales.

PyPI advierte que las comparaciones de conteos anteriores y posteriores al 24 de agosto no son válidas.

Vistas: 5

Descubre más desde CIBERED

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Scroll al inicio