2010-07-15 16 views
7

Sigo viendo personas escribiendo envoltorios para, por ejemplo, un módulo escrito en lenguaje X para usarlo en lenguaje Y. Quería saber los conceptos básicos de cómo escribir tales envoltorios. ¿De dónde comienza uno? Mi pregunta aquí es más específica para libgnokii, ¿cómo empiezo a escribir enlaces de python para ello?Escribiendo enlaces y envoltorios

Respuesta

7

Puedes comenzar leyendo esto: extending python with c or c++ Y luego, cuando decidas que es demasiada molestia, puedes consultar swig o posiblemente Boost.Python. ctypes también puede ser útil.

He hecho el ajuste manual de las clases de C++ y he usado swig. Swig era mucho más fácil de usar, pero al final yo quería hacer cosas que no se hacían fácilmente (o simplemente era demasiado flojo para descubrir cómo). Así que terminé haciendo envoltura manual. Es un poco de trabajo, pero si conoces un poco de C, es muy factible.

2

Puede comenzar mirando here para obtener información sobre la extensión de Python con C. Probablemente quiera pensar en cómo traducir la API de libgnokii en algo Pythonic mientras lo hace. Si no quiere hacer mucho trabajo, puede simplemente escribir un envoltorio delgado que traduzca todas las llamadas de API gnokii a funciones de Python.

+0

¿Cómo hacer las cosas Pythonic significaría escribir toda la biblioteca como un módulo desde el principio? – tsudot

+2

No, no necesariamente. Un ejemplo de lo que hice: tuve una clase de C++ que necesitaba hacer un objeto antes de poder usar una función (en este caso, la función debería haber sido estática). En lugar de hacer que el usuario del módulo python siga los mismos pasos, simplemente construí un objeto de esa clase en mi extensión python y expuse la función como una función en un módulo python, ocultando el hecho de que pertenecía a una clase, que no estaba No es realmente necesario. Entonces, ordenando un poco las interfaces. –