Me pregunto si es posible crear un módulo ejecutable a partir de un script de Python. Necesito tener el máximo rendimiento y la flexibilidad de la secuencia de comandos de Python, sin necesidad de ejecutar en el entorno de Python. Usaría este código para cargar módulos de usuario a pedido para personalizar mi aplicación.¿Es posible compilar Python de forma nativa (más allá del código de byte pyc)?
Respuesta
- Hay pyrex que compila pitón como fuente de módulos de extensión de Python
- rpython que le permite compilar Python con algunas restricciones a varios motores como C, LLVM, .Net, etc.
- También hay shed-skin que traduce python a C++, pero no puedo decir si es bueno.
- PyPy implementa un compilador JIT que intenta optimizar el tiempo de ejecución traduciendo partes de lo que se ejecuta en el tiempo de ejecución al código de máquina, si escribe para el intérprete PyPy que podría ser una ruta viable.
- El mismo autor que está trabajando en JIT en PyPy escribió psyco anteriormente que optimiza python en el intérprete de CPython.
Puede usar algo como py2exe para compilar su script python en un archivo exe, o Freeze para un archivo binario en Linux.
ver: How can I create a directly-executable cross-platform GUI app using Python?
@Howler, py2exe no entregará la mayoría de lo que el OP estaba pidiendo. El código todavía se está ejecutando dentro del tiempo de ejecución de Python (aunque haya sido renombrado) y no se ejecutará más rápido que el script por sí mismo) @David: Puede considerar reescribir la aplicación principal en C/C++ y extender w/Python. – technomalogical
O, en lugar de reescribir la aplicación principal, simplemente encuentre las zonas interactivas y escríbalas en C/C++ como una extensión de Python. –
En realidad, estoy buscando una solución para inyectar código en un entorno que ya se está ejecutando. Pero este código debe ser realmente rápido, por lo que la interpretación no es una opción. – David
Creo que puede usar jython para compilar python a bytecode de Java, y luego compilarlo con GCJ.
he tenido mucho éxito utilizando Cython, que se basa en y se extiende pyrex:
Cython es un lenguaje que hace que la escritura extensiones C para el lenguaje Python tan fácil como propio Python. Cython se basa en el bien conocido Pyrex, pero admite más funcionalidades y optimizaciones de vanguardia .
El lenguaje Cython está muy cerca de el lenguaje Python, pero Cython , además, apoya llamada de C. funciones y declarar tipos de C en variables y atributos de clase. Este permite que el compilador genere muy código C eficiente del código de Cython.
Esto hace Cython el lenguaje ideal para envolver de bibliotecas de C externos, y rápidas para los módulos C que aceleran la ejecución de código Python.
- 1. Comprobación del código JavaScript más allá de JSLint
- 2. Python, más allá de lo básico
- 3. ¿Cómo configuro el código más allá del nivel por función?
- 4. Mover fábricas más allá en Python
- 5. trenzado y WebSockets: Más allá del eco
- 6. ¿Es posible compilar dinámicamente y ejecutar fragmentos de código C#?
- 7. Leer líneas más allá de SUB en Python
- 8. ¿Es factible compilar Python para código de máquina?
- 9. ¿Los archivos Python 2.5 .pyc son compatibles con los archivos .pyc de Python 2.6?
- 10. ¿por qué byte + = 1 compilar pero byte = byte + 1 no?
- 11. ¿Generas .pyc desde Python AST?
- 12. ¿Es posible compilar programáticamente código fuente java solo en memoria?
- 13. ¿Es posible compilar en forma cruzada código fuente D para MIPS?
- 14. Error: allowDefinition = 'MachineToApplication' más allá del nivel de aplicación
- 15. Ocultar texto yendo más allá del elemento DIV
- 16. ¿Es posible compilar un programa escrito en Python?
- 17. ¿podemos implementar un intérprete de Java en hardware que ejecute códigos byte Java de forma nativa?
- 18. Escribir código de esquema portátil. ¿Hay algo "estándar" más allá del R5RS mismo?
- 19. Más allá de los patrones de diseño?
- 20. ¿Es posible importar un archivo python compilado?
- 21. C - elemento más allá del final de una matriz
- 22. Emacs se desplacen más allá del extremo de tampón
- 23. Hacer que Python ignore los archivos .pyc
- 24. ¿Es posible compilar el código .NET IL para el código de máquina?
- 25. ¿Es posible implementar el completado de código Python en TextMate?
- 26. ¿Qué forma de escribir este código es más eficiente?
- 27. ¿Es posible almacenar un número de 1 byte en Postgres?
- 28. Python: forma más inteligente de calcular los pagos del préstamo
- 29. Mejor forma de compilar el código de biblioteca
- 30. ¿La forma más rápida de compilar una aplicación Symbian simple?
AFAIK rpython no reemplaza pyrex; son tareas separadas, y pyrex debería funcionar bien (sería mi segunda sugerencia, después de volver a escribir las áreas problemáticas en C/C++). –
También está IronPython (asumiendo Windows o Mono), aunque es cuestionable si obtendrás velocidad extra. –
Los enlaces a rpython y PyPy están inactivos. – BandGap