La versión 0.12.0 de uv, el gestor de paquetes y proyectos para Python desarrollado por Astral, ya está disponible e introduce cambios dirigidos a mejorar la corrección, la seguridad y la compatibilidad con las especificaciones del ecosistema. La novedad más visible afecta al comando uv init, que vuelve a crear proyectos empaquetados por defecto: ahora define un bloque [build-system] con uv_build, sitúa el código fuente en src/example e incluye una entrada [project.scripts] llamada example. Los proyectos existentes no se ven afectados y quien prefiera el comportamiento anterior puede usar uv init --no-package. Esta decisión recupera una buena práctica que se había abandonado en la versión 0.4 para no confundir a los recién llegados y coincide con la aparición de uv_build, el sistema de compilación propio del proyecto con integración nativa en uv.
En el apartado de seguridad y compatibilidad, uv rechaza formatos de archivo no admitidos por la PEP 625, como .tar.bz2 y .tar.xz en distribuciones de código fuente, y exige que las wheels y demás archivos ZIP empleen métodos de compresión stored, DEFLATE o zstd, descartando bzip2, LZMA y XZ. También bloquea wheels que puedan sobrescribir el intérprete de Python del entorno virtual, incluyendo variantes con mayúsculas y minúsculas del nombre python y archivos colocados en rutas como .data/scripts, una puerta de entrada explotable en sistemas de archivos sin distinción de mayúsculas como macOS y Windows.
El resolutor adopta el modo if-necessary como comportamiento predeterminado: prueba primero versiones estables y recurre a pre-releases solo cuando ninguna estable satisface las restricciones, igual que hace pip. Además, la directiva --require-hashes en un requirements.txt ahora activa realmente la verificación de hashes, y se rechazan los requisitos cuyo único resumen disponible sea MD5, por no ser resistente a colisiones.
