遇到个问题,需要在C++中调用python函数,查了点资料先写了个测试函数,如下: <call_python.cc>
#include <python2.7/Python.h> #include <cstdio> int main(int argc, char* argv[]) { Py_SetProgramName(argv[0]); Py_Initialize(); PyObject *pName, *pModule; pName = PyString_FromString("pyAlgo"); //pyAlgo为当前目录pyAlgo.py pModule = PyImport_Import(pName); if (pModule == NULL) printf("Error: Import!\n"); if (pName) Py_DECREF(pName); if (pModule) Py_DECREF(pModule); Py_Finalize(); return 0; }
上面的代码运行时总是输出:
Error: Import!
也就是这个自定义的Python模块没导入成功! 但是测试导入python内建模块如 sys, time之类都能成功导入, 为何自定义的模块无法导入呢?怀疑是模块查找路径问题, 可是当前目录模块不应该啊。
编译如下:
PYTHON_HOME=/usr/local/include/python2.7/
PYTHON_LIBDIR=-L $(PYTHON_HOME)
PYTHON_INCLUDE=-I $(PYTHON_HOME)
$(CXX) $(LFLAGS) -o common_program $(OBJ) $(LIBS) $(PYTHON_INCLUDE) $(PYTHON_LIBDIR) -lpython2.7 -ldl -lpthread -lutil -lm -Xlinker -export-dynamic
哪位大虾知道的望不吝赐教,万分感谢!
将当前目录加入path中
PyRun_SimpleString("sys.path.append('./')");
pModule = PyImport_ImportModule("pytest");