如何解决python cpp通信中的Tensorflow 2.2 Env的Pybind11异常
下面是CPP调用python文件源代码作为参考。
int main(int argc,char *argv[])
{
PyObject *pName,*pModule,*pFunc;
PyObject *pArgs,*pValue;
int i;
string pythonFunction = "sample_fun";
string pythonFile = "sample"
string tensoflow_env = "tensorflow_env_path";
wchar *env = Py_DecodeLocal(tensoflow_env,NULL);
Py_SetPythonHome(env);
Py_Initialize();
pName = PyUnicode_DecodeFSDefault(pythonFile.c_str());
/* Error checking of pName left out */
pModule = PyImport_Import(pName);
Py_DECREF(pName);
if (pModule != NULL) {
pFunc = PyObject_GetAttrString(pModule,pythonFunction.c_str());
/* pFunc is a new reference */
if (pFunc && PyCallable_Check(pFunc)) {
pValue = PyObject_CallObject(pFunc,NULL);
if (pValue != NULL) {
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;
}
if (Py_FinalizeEx() < 0) {
return 120;
}
return 0;
}
下面是sample.py文件,仅供参考。
def sample_fun():
import tensorflow as tf
return 'Success'
问题:
以上代码在tensorflow2.0 env中运行时工作正常,但如果我在tensorflow2.2 env中运行则代码相同,则在PYObject_CallObject(pFunc,NULL)处给出以下异常
错误:Microsoft c ++异常:内存位置XXXXXX上的pybind11 :: error_already_set
任何机构都对导致上述问题的可能原因有想法? 注意:使用python 3.7.6构建的Tensorflow2.2和使用python 3.7.7构建的Tensorflow2.0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。