Я хочу позвонить 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 ++, чтобы мой код работал? Спасибо