Por qué la compilación de SciPy para Python 3.12 es casi un milagro
- Recientemente se lanzó la versión 3.12 de Python.
- Normalmente, los paquetes principales publican rápidamente versiones compatibles con la nueva versión de Python.
- Que SciPy haya lanzado una compilación compatible con Python 3.12 fue el resultado afortunado de varias líneas de tiempo que coincidieron.
El papel de Fortran y de los compiladores
- Fortran ha sido un lenguaje de programación importante desde la década de 1950, y mucho código científico está escrito en Fortran.
- Han existido varios compiladores de Fortran, pero todos eran propietarios.
- Un compilador se encarga de transformar el código escrito por el programador en una forma que la computadora pueda ejecutar.
- GCC es un compilador de uso libre que soporta diversas arquitecturas de CPU y sistemas operativos.
Python y los problemas de rendimiento
- Python puede usarse sin compilador, pero es más lento que los lenguajes compilados.
- Cuando el rendimiento es importante, una buena solución es usar código compilado y envolverlo con una interfaz de Python.
- NumPy y SciPy usan código Fortran por razones de rendimiento, y por eso los usuarios necesitan un compilador al instalar esos paquetes.
Los problemas del empaquetado en Python
- El empaquetado en Python ha tenido que reinventarse continuamente debido a su complejidad.
- Descargar directamente el código fuente trae problemas como la necesidad de configurar un compilador y largos tiempos de compilación para el usuario.
- El formato "wheel" mejoró esto al distribuir los paquetes junto con las bibliotecas necesarias.
La aparición de conda y conda-forge
- conda ofrece un enfoque más integral que incluye todo lo necesario para el empaquetado.
- conda-forge es un canal impulsado por la comunidad que se encarga del trabajo de integración de paquetes.
- conda-forge intenta dar soporte a todas las plataformas comunes y es operado por voluntarios.
La elección de Meson como herramienta de compilación de SciPy
- SciPy eligió Meson como su herramienta de compilación.
- Meson ofrece una interfaz con estilo Python y es menos complejo que CMake.
- Meson tiene una filosofía de diseño que evita permitir acciones incorrectas a usuarios no expertos.
El renacimiento de Fortran y LLVM
- Fortran ha ganado interés en los últimos años.
- Se ha intensificado el desarrollo de nuevos compiladores de Fortran basados en LLVM.
- LLVM proporciona una infraestructura de compiladores que funciona en diversas arquitecturas y plataformas.
La transición de SciPy a Meson y los problemas de conda-forge
- SciPy se cambió a Meson, pero surgieron problemas por la ausencia de un compilador de Fortran para Windows.
- conda-forge tuvo que reconstruir todos los paquetes relacionados para migrar a Python 3.12.
El significado de "yukatastrophe" y la opinión de GN⁺
- La suite de pruebas de SciPy pasó al 100%, lo que permitió una compilación de SciPy compatible con Python 3.12 en conda-forge.
- Esto fue el resultado de la coincidencia de varios esfuerzos y casualidades, y aportó un gran beneficio a la comunidad de Python.
- Opinión de GN⁺: Este artículo muestra cómo el esfuerzo y la colaboración de la comunidad de Python pueden resolver problemas técnicos complejos. El lanzamiento exitoso de una compilación de SciPy compatible con Python 3.12 representa un avance importante en la computación científica y simboliza la fortaleza del software de código abierto y el poder de la comunidad.
3 comentarios
Opiniones de Hacker News
La comunidad de software libre debería dejar de dar soporte al sistema operativo de Microsoft y hacer que ellos mismos porten cosas como scipy
La razón por la que el empaquetado de Python es complejo se debe a la falta de estandarización de las herramientas de compilación de C/C++/Fortran y al enorme ecosistema; no es un problema de Python en sí
Parece que es un bug que la herramienta de compilación Meson rechace la combinación de MSVC+gfortran
Mucha gente está resolviendo el problema usando WSL2, y da curiosidad por qué alguien querría compilar una versión nativa de Windows
La mayoría de las mejores bibliotecas BLAS están escritas en C, y da curiosidad hasta dónde se podría llegar solo con C y Python
Pregunta ingenua sobre si la semántica de Fortran es tan distinta de la de C que no se puede convertir a C y luego compilar con un compilador de C, y si sería posible mantenerlo en C
Es difícil seguirle el ritmo a los cambios en el sistema de compilación de Python
Pregunta sobre si "aarch64" y "arm64" son lo mismo
Fortran era objeto de bromas en los departamentos de TI, pero en los últimos años ha vivido un resurgimiento dramático
Pregunta sobre la diferencia entre "arm64" y "aarch64" en la tabla de compiladores/arquitecturas
Vaya, aquí quedó brutalmente expuesta la miserable dependencia de los lenguajes compilados a binarios.
¿No es que lo resolvieron para Python, pero no para otros ecosistemas? Por eso seguramente ofrecerán binarios precompilados.