Встраивание Сципи в C
Это очень простой вопрос, но он поставил меня в тупик.
Я пытаюсь встроить некоторые подпрограммы в c-программу. Однако я не могу успешно завершить начальный этап импорта каких-либо модулей scipy.
Я могу импортировать верхний уровень scipy, не получая нулевого возвращаемого значения, так что я почти уверен, что установка не является проблемой...
PyObject *pckg_name, *pckg;
pckg_name = PyString_FromString("scipy");
pckg = PyImport_Import(pckg_name);
if (!pckg)
{
printf("Error importing python module %s.\n");
return;
}
... но я не могу добраться до более низкого уровня. Я пробовал все виды комбинаций с PyImport_Import и PyImport_ImportModule, например, импортируя "scipy.stats" в качестве шага 1 или импортируя статистику в качестве шага 2 после импорта scipy, но ничего не работает.
Я могу импортировать и использовать функции из "случайного" модуля, поэтому я не думаю, что есть проблема с моей базовой установкой Python. Я знаю, что упускаю что-то очевидное здесь, но я не могу понять, что это такое.
1 ответ
Для чего это стоит, это работает для меня:
try_scipy.c
#include <Python.h>
#include <stdio.h>
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;
}
Скомпилируйте и запустите:
$ gcc try_scipy.c `python-config --cflags --ldflags` -o try_scipy
$ ./try_scipy
got it!