No he utilizado todos estos métodos aunque yo los he investigado en un momento u otro ...
El Python API C: Para escribir código C que compila a un módulo de Python que se puede importar en Pitón. O para escribir un módulo de Python que actúa como código "pegamento" para interactuar con alguna biblioteca C.
scipy.weave: Le permite empuja bits de código C en el código Python, si está usando NumPy y SciPy para hacer el trabajo numérico, mira en esto. El código C sería como una cadena, como, weave.inline ('printf ("% s", foo)') por ejemplo.
ctypes: Módulo python que le permite llamar al código C desde su código python. Básicamente importa la biblioteca compartida y luego realiza llamadas a su API. Se necesita algo de trabajo para ordenar los datos dentro y fuera de esas llamadas. Si está buscando utilizar una biblioteca de C existente que usted u otra persona escribió, comenzaría aquí.
pyrex/Cython: Le permite escribir código Python (utilizando una sintaxis especial) que se generará en código C (que puede ser importado como un módulo de Python) y, por supuesto, correr más rápido que si se ha ejecutado a través del intérprete de Python. Esto es algo así como la ruta "Python C API", solo genera el código C para usted. Es útil si tiene un trozo de código que es su cuello de botella y es realmente lento. Reescribe esa función usando cython e impórtala desde el código de llamada.
SWIG: Genera el código contenedor para una biblioteca C/C++. Deberías terminar con un módulo de Python que puedes importar y usar.
Boost.Python: Este es el que menos conozco. Me parece que es similar a SWIG, aunque usted mismo escriba la capa de envoltura, pero con mucha ayuda de las macros/funciones de Boost.
Psyco: Aumenta la velocidad de su código Python un poco, nunca he tenido mucha suerte con esto. No perdería el tiempo con eso. Perfile su código, encuentre sus cuellos de botella y agréguelos usando una de las técnicas anteriores.
-1. Esta pregunta es demasiado amplia. –
@Steven Rumbalski: No estoy de acuerdo. Esta es una buena pregunta, aunque supongo que me encantaría escuchar lo que el usuario realmente * intentó *. –
@ Platinum Azure: me quedé un poco boquiabierto con el -1, pero al final decidí que una buena respuesta a esta pregunta debería ser muy larga y detallada. También sería en gran parte subjetivo. –