Incrustar Scipy en C

Esta es una pregunta muy básica, pero me ha dejado perplejo.

Estoy tratando de incrustar algunas rutinas scipy en un c-progtwig. Sin embargo, no puedo completar con éxito el paso inicial de importar cualquier módulo scipy.

Puedo importar el nivel superior de scipy, sin obtener un valor de retorno nulo, así que estoy bastante seguro de que la instalación no es un problema …

PyObject *pckg_name, *pckg; pckg_name = PyString_FromString("scipy"); pckg = PyImport_Import(pckg_name); if (!pckg) { printf("Error importing python module %s.\n"); return; } 

… pero no puedo llegar a ningún nivel inferior. He intentado todo tipo de combinaciones con PyImport_Import y PyImport_ImportModule, por ejemplo, importando “scipy.stats” como paso 1, o importando estadísticas como paso 2 después de importar scipy, pero nada funciona.

Puedo importar y usar funciones desde el módulo “aleatorio”, por lo que no creo que haya un problema con mi instalación básica de Python. Sé que me estoy perdiendo algo obvio aquí, pero no puedo entender qué es.

Por lo que vale, esto funciona para mí:

try_scipy.c

 #include  #include  int main(int argc, char *argv[]) { PyObject *pckg_name; PyObject *pckg; Py_Initialize(); pckg_name = PyString_FromString("scipy.stats"); pckg = PyImport_Import(pckg_name); if (!pckg) { printf("fail\n"); } else { printf("got it!\n"); Py_DECREF(pckg); } Py_DECREF(pckg_name); Py_Finalize(); return EXIT_SUCCESS; } 

Comstackr y ejecutar:

 $ gcc try_scipy.c `python-config --cflags --ldflags` -o try_scipy $ ./try_scipy got it!