Почему мне не удалось импортировать numpy, когда я звоню python в C ++? - PullRequest
0 голосов
/ 14 апреля 2020

Я хочу позвонить python для обработки данных в C ++ C ++ код:

#include "Python.h"
#include <stdio.h>
#include <iostream>

using namespace std;

int main(){
  /*Pass by List: Transform an C Array to Python List*/
  double CArray[] = {1.2, 4.5, 6.7, 8.9, 1.5, 0.5};
  Py_Initialize();
  string path = "/root/nick_private/tutorial/cppcallpython";
  string chdir_cmd = string("sys.path.append(\"") + path + "\")";
  PyRun_SimpleString("import sys");
  PyRun_SimpleString("import numpy");  // failed here, cant import numpy
  PyRun_SimpleString(chdir_cmd.c_str());
  // PyRun_SimpleString("print(sys.path)");
  PyObject * pModule = NULL;
  PyObject * pFunc = NULL;
  PyObject *pDict = NULL;
  PyObject *pReturn = NULL;

  pModule = PyImport_ImportModule("Test001");
  pDict = PyModule_GetDict(pModule); 
  pFunc = PyDict_GetItemString(pDict, "szTest");
  cout<<"C Array Pass Into The Python List:"<<endl;

  PyObject *PyList  = PyList_New(6);
  PyObject *ArgList = PyTuple_New(1);
  for(int i = 0; i < PyList_Size(PyList); i++) { 
    PyList_SetItem(PyList,i, PyFloat_FromDouble(CArray[i]));
  } 
  PyTuple_SetItem(ArgList, 0, PyList);
  pReturn=PyObject_CallObject(pFunc, ArgList);

  if (PyList_Check(pReturn)) { 
     printf("result: ");
     int SizeOfList = PyList_Size(pReturn);
     for(int i = 0; i < SizeOfList; i++){
       PyObject *Item = PyList_GetItem(pReturn, i);
       int result;
       PyArg_Parse(Item, "i", &result);
       printf("%d ",result);
       Py_DECREF(Item); 
     }
     printf("\n");
  } else{
    cout<<"Not a List"<<endl;
  }

  Py_Finalize();
}

Test001.py:

#import numpy   # i cant import numpy here, if i remove this line, 
#the whole program run well, but if i add this, crashed
def szTest(List):
  IntegerList = [1, 2, 3]
  return IntegerList

я не могу импортировать numpy в моем python часть, я думаю, потому что с помощью интерпретатора python я запускаю их в centos7, python я использовал anaconda, как я могу установить python env в c ++, чтобы мой код работал? Спасибо

...