title: Python Embedding in C++ : ImportError: No module named pyfunction
body: <p>Hi I'm trying to embed python (2.7) into C++ (g++ 4.8.2) and hence call a python function from C++. This is the basic code provided in python documentation for embedding: </p>
  
  <p>This is my file call_function.cpp</p>
  
  <pre><code>#include &lt;Python.h&gt;
  
  int main(int argc, char *argv[])
  {
      PyObject *pName, *pModule, *pDict, *pFunc;
      PyObject *pArgs, *pValue;
      int i;
  
      if (argc &lt; 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 &amp;&amp; PyCallable_Check(pFunc)) {
              pArgs = PyTuple_New(argc - 3);
              for (i = 0; i &lt; 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;
  }
  </code></pre>
  
  <p>Now my python script is saved as pyfunction.py placed in the same folder as call_function.cpp.</p>
  
  <p>This is pyfunction.py :</p>
  
  <pre><code>def multiply(a,b):
      print "Will compute", a, "times", b
      c = 0
      for i in range(0, a):
          c = c + b
      return c
  </code></pre>
  
  <p>Now using the Terminal I'm calling :</p>
  
  <pre><code>$ g++ call_function.cpp -I/usr/include/python2.7 -lpython2.7 -o call_function
  </code></pre>
  
  <p>(Compiles successfully without any errors)
  (Running the program)</p>
  
  <pre><code>$ ./call_function pyfunction multiply 2 3
  </code></pre>
  
  <p>(I get this ERROR):</p>
  
  <pre><code>ImportError: No module named pyfunction    
  Failed to load "pyfunction"
  </code></pre>
  
  <p>I don't understand how this is possible. I've followed the documentation and still I'm getting the error. </p>
  
  <p>How can it not find pyfunction.py when it is placed in the same directory.</p>