Hey. I am trying to insert python (2.7) in C ++ (g ++ 4.8.2) and therefore call the python function from C ++. This is the basic code provided in the python documentation for embedding:
This is my call_function.cpp file
#include <Python.h> int main(int argc, char *argv[]) { PyObject *pName, *pModule, *pDict, *pFunc; PyObject *pArgs, *pValue; int i; if (argc < 3) { fprintf(stderr,"Usage: call pythonfile funcname [args]\n"); return 1; } /* char pySearchPath[] = "/usr/include/python2.7"; Py_SetPythonHome(pySearchPath);*/ Py_Initialize(); pName = PyString_FromString(argv[1]); /* Error checking of pName left out */ pModule = PyImport_Import(pName); Py_DECREF(pName); if (pModule != NULL) { pFunc = PyObject_GetAttrString(pModule, argv[2]); /* pFunc is a new reference */ if (pFunc && PyCallable_Check(pFunc)) { pArgs = PyTuple_New(argc - 3); for (i = 0; i < argc - 3; ++i) { pValue = PyInt_FromLong(atoi(argv[i + 3])); if (!pValue) { Py_DECREF(pArgs); Py_DECREF(pModule); fprintf(stderr, "Cannot convert argument\n"); return 1; } /* pValue reference stolen here: */ PyTuple_SetItem(pArgs, i, pValue); } pValue = PyObject_CallObject(pFunc, pArgs); Py_DECREF(pArgs); if (pValue != NULL) { printf("Result of call: %ld\n", PyInt_AsLong(pValue)); Py_DECREF(pValue); } else { Py_DECREF(pFunc); Py_DECREF(pModule); PyErr_Print(); fprintf(stderr,"Call failed\n"); return 1; } } else { if (PyErr_Occurred()) PyErr_Print(); fprintf(stderr, "Cannot find function \"%s\"\n", argv[2]); } Py_XDECREF(pFunc); Py_DECREF(pModule); } else { PyErr_Print(); fprintf(stderr, "Failed to load \"%s\"\n", argv[1]); return 1; } Py_Finalize(); return 0; }
Now my python script is saved as pyfunction.py, placed in the same folder as call_function.cpp.
This is pyfunction.py:
def multiply(a,b): print "Will compute", a, "times", b c = 0 for i in range(0, a): c = c + b return c
Now, using the Terminal, I call:
$ g++ call_function.cpp -I/usr/include/python2.7 -lpython2.7 -o call_function
(compiles successfully without any errors) (Run the program)
$ ./call_function pyfunction multiply 2 3
(I get this ERROR):
ImportError: No module named pyfunction Failed to load "pyfunction"
I do not understand how this is possible. I followed the documentation and still get the error.
How can he not find pyfunction.py when it is placed in the same directory.