2011-08-18 9 views
31

Tengo enormes módulos de Python (+8000 líneas). Básicamente tienen toneladas de funciones para interactuar con una plataforma de hardware a través del puerto serie leyendo y escribiendo en registros de hardware.Usar Cython como convertidor de Python a C

No son algoritmos numéricos. Entonces la aplicación es solo lectura/escritura en registros de hardware/memoria. Yo uso estas bibliotecas para escribir scripts personalizados. Eventualmente, tengo que mover todas estas cosas para que se ejecuten en un procesador integrado en mi hardware para tener un control más preciso, luego empiezo el evento desde la PC y el resto está en hardware.

Así que necesito convertirlos a C. Si puedo hacer que mis scripts se conviertan en C por una herramienta automática, eso me ahorraría un gran tiempo. Es por eso que me atrajo Cython. La eficiencia no es importante, mis códigos no son números crujidores. Pero el código generado debería ser relativamente pequeño para caber en mi memoria limitada (pocos cientos de Kilobytes).

¿Puedo utilizar Cython como convertidor para mis scripts de Python personalizados en C? Supongo que sí, ¿en qué caso puedo usar estos archivos .c para ejecutarlos en mi hardware? No creo que tenga que tener Cython en mi hardware para que se ejecuten. Pero si solo crea algunos archivos .c, puedo verlos y hacerlo independiente, ya que el código no usa muchas de las funciones de Python. Simplemente lo usa como un script rápido de implementar.

+0

¿Alguien ha tenido éxito haciendo esto? Siento que esto sería muy difícil de depurar. Realmente quiero hacer esto yo mismo con Cython/PyPy, pero parece que podría ser muy interesante de probar ... – radix07

Respuesta

40
  1. Sí, en esencia, esto es lo que hace Cython. Pero ...
  2. No necesita Cython, sin embargo, necesita libpython. Puede que sienta que no usa tantas características de Python, pero creo que si prueba esto, encontrará que no es cierto: no podrá separar su programa de su dependencia de libpython mientras sigue usando el Python. idioma.

Otra opción es PyPy, específicamente es translation toolchain, NO el intérprete PyPy Python. Le permite traducir RPython, un subconjunto del lenguaje Python, en C. Si realmente no está utilizando muchas características o bibliotecas del lenguaje Python, esto puede funcionar.

PyPy se conoce principalmente como una implementación alternativa de Python, pero también es un conjunto de herramientas para compilar idiomas dinámicos en varias formas. Esto es lo que permite que la implementación PyPy de Python, escrita en (R) Python, se compile en código máquina.

Si C++ está disponible, Nuitka es un compilador Python a C++ que funciona para Python regular, no solo RPython (que es lo que shedskin y PyPy usan).

+0

Entonces, ¿es un traductor lo que le da .c? Pensé que es una implementación específica de python para hacerlo rápido. No es mi preocupación. –

+0

Lea la respuesta más de cerca. PyPy es __dos cosas__, una implementación de Python y un traductor/compilador de Python. No quieres el primero, quieres el segundo. La cadena de herramientas de traducción a la que me he vinculado tiene detalles sobre lo que quieres. – agf

+1

Actualicé mi publicación para agregar respuestas directas a sus preguntas. – agf

2

Si C++ está disponible para esa plataforma incrustada, existe shed skin, convierte python en C++.

+2

Escuché de ShedSkin pero no puedo confiar en ello. Cython parece ser más robusto y ampliamente utilizado con comentarios muy positivos . –

+0

Para C++, también hay Pythran. – boardrider

Cuestiones relacionadas