Nuitka (pronunciado como / n juː t k ʌ / [2] ) es un compilador de fuente a fuente que compila código Python en código fuente C , aplicando algunas optimizaciones en tiempo de compilación en el proceso, como el plegado y la propagación constantes . en predicción de llamadas, inferencia de tipos y ejecución de declaraciones condicionales. [3] [4] Inicialmente, Nuitka fue diseñado para producir código C++, pero las versiones actuales producen código fuente C usando solo aquellas características de C11 que son compartidas por C++03 , lo que permite una mayor compilación en un formato ejecutable binario por C y C++ modernos. compiladores que incluyen gcc , clang , MinGW o Microsoft Visual C++ . Acepta código Python compatible con varias versiones diferentes de Python (actualmente admite las versiones 2.6, 2.7 y 3.3–3.10) y, opcionalmente, permite la creación de programas independientes que no requieren la instalación de Python en la computadora de destino.
Nuitka se discutió en la conferencia EuroPython de 2012 y a finales del mismo año comenzó un desarrollo serio. Ahora admite prácticamente todas las funciones del lenguaje Python. [5] Se planean optimizaciones adicionales en tiempo de compilación para futuras versiones, incluido evitar el uso de objetos Python para variables adicionales cuyo tipo se pueda inferir en tiempo de compilación, particularmente cuando se usan iteradores, lo que se espera que dé como resultado un gran aumento en el rendimiento. [6]
Actualmente no es posible realizar una compilación cruzada de archivos binarios (por ejemplo, crear el ejecutable en Windows y enviarlo a macOS).
Los archivos binarios independientes creados utilizando la --standalone
opción de línea de comando incluyen un intérprete CPython integrado para manejar aspectos del lenguaje que no se determinan cuando se compila el programa y deben interpretarse en tiempo de ejecución, como la tipificación pato , el manejo de excepciones y la ejecución dinámica de código (la eval
función y exec
función o declaración), junto con aquellas bibliotecas nativas y de Python que se necesitan para la ejecución, lo que genera tamaños de archivos bastante grandes.
El diseño de Nuitka depende en gran medida de las partes internas del intérprete CPython y, como resultado, otras implementaciones del lenguaje Python como PyPy , Jython y IronPython no se pueden usar en lugar de CPython para el intérprete y la biblioteca en tiempo de ejecución. [3]
Nuitka se puede instalar desde los repositorios de muchas distribuciones de Linux. También se puede instalar mediante pip
y pip3
, respectivamente. La compilación se realiza con nuitka program.py
o llamando al propio Python y luego definiendo qué módulo ejecutar, que en este caso es Nuitka ( python -m nuitka program.py
).