2012-05-16 12 views
9

Lo que quiero hacer es opuesto a de lo que la mayoría de la gente quiere hacer: Tengo una biblioteca escrita en Python, y quiero que esté disponible para C (y posiblemente otros idiomas) .Enlazar una biblioteca de Python TO C

sé que la respuesta típica a esto es usar la biblioteca de Python para C, es decir:

#include <Python.h> 

int 
main(int argc, char *argv[]) 
{ 
    Py_Initialize(); 
    PyRun_SimpleString("from time import time,ctime\n" 
        "print 'Today is',ctime(time())\n"); 
    Py_Finalize(); 
    return 0; 
} 

(fuente: http://docs.python.org/extending/embedding.html#very-high-level-embedding)

Sin embargo, esto parece menos que óptimo para mí:

  • es feo
  • es sólo para C

Lo que yo quiero, en cambio, es una manera de obligar a mi biblioteca montón de idiomas, incluyendo C. no me importa acerca de la generación automática de envoltorio: mi biblioteca es bastante simple, por lo que puede escribir código de unión.

Por el momento, la única solución que se me ocurrió es usar código similar al anterior para vincular mi biblioteca a C. Luego use SWIG para vincular la biblioteca C a otros idiomas.

¿Hay uno mejor?

Respuesta

4

Well C es el Lingua franca de la programación. Entonces diría que su enfoque es correcto. Cree un enlace para C y use herramientas como SWIG y el FFI de los otros idiomas para enlazar con C.

Solo viene a la mente una idea más. Hoy vemos que HTTP emerge como un nuevo Lingua franca para todo tipo de API e interfaces. Entonces uno podría pensar en crear un pequeño servicio web escrito en python que ofrezca alguna interfaz REST. Pero claramente esto solo tiene sentido en ciertos entornos.

Por supuesto, una vez que se decide ejecutar su lib pitón en un proceso separado existen todas las posibilidades de comunicación entre procesos, como canalizaciones con nombre o enchufes y cajas de herramientas como Apache Thrift, Google Protocol Buffers o 0MQ.

+0

Bueno, no necesito nada tan elegante (al menos ahora) como una biblioteca que se ejecuta como daemon. Así que creo que iré escribiendo manualmente una biblioteca de C que se conecta con la de python; luego haré enlaces usando SWIG a otros idiomas. – boyska