Python C API不加载模块

我正在尝试使用C API加载包含C中的math和numpy导入的python模块。 我可以加载并运行模块但是,如果我导入数学模块它不起作用。

我正在使用Arch Linux,Python 2.7.2和gcc。

这里的代码:

#include  #include  #include  int main(int argc, char **argv) { PyObject *pName, *pModule, *pFunc, *pArg, *pDict, *pReturn, *pT1, *pT2, *pX, *pY; int i; double x, y; Py_Initialize(); PySys_SetPath("."); pName = PyString_FromString("func"); if (!pName) { printf("pName\n"); return 0; } pModule = PyImport_Import(pName); pDict = PyModule_GetDict(pModule); pFunc = PyDict_GetItemString(pDict, "get_vals"); pArg = PyTuple_New(2); PyTuple_SetItem(pArg, 0, PyFloat_FromDouble(4.0)); PyTuple_SetItem(pArg, 1, PyFloat_FromDouble(2.0)); pReturn = PyObject_CallObject(pFunc, pArg); pT1 = PyTuple_GetItem(pReturn, 0); pT2 = PyTuple_GetItem(pReturn, 1); for (i = 0; i < PyTuple_Size(pT1); i++) { pX = PyTuple_GetItem(pT1, i); pY = PyTuple_GetItem(pT2, i); x = PyFloat_AsDouble(pX); y = PyFloat_AsDouble(pY); Py_XDECREF(pX); Py_XDECREF(pY); pX = NULL; pY = NULL; printf("Point p position is: %.2fx, %.2fy", x, y); } Py_XDECREF(pName); Py_XDECREF(pModule); Py_XDECREF(pFunc); Py_XDECREF(pArg); Py_XDECREF(pDict); Py_XDECREF(pReturn); Py_XDECREF(pT1); Py_XDECREF(pT2); Py_Finalize(); return 0; } 

func.py

 from math import cos def get_vals(width, height): x = (1, 2) y = (cos(3), 4) return x, y 

如何在不需要使用脚本的情况下将Python脚本嵌入到C中?

PySys_SetPath(".")清除了python路径,因此无法再找到任何库。 你真正需要做的是导入sys.path然后将你的字符串附加到它:

 PyObject *sys = PyImport_ImportModule("sys"); PyObject *path = PyObject_GetAttrString(sys, "path"); PyList_Append(path, PyString_FromString(".")); 

(我没有测试上面的代码,但应该关闭。另外,你应该做错误检查)