Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c中嵌入python时Numpy导入失败 我试图把Python程序嵌入到C++代码中。我的问题是使用包含numpy导入的python脚本。 例如,如果我使用下面的C++代码< /p> #include <Python.h> int main(int argc,char *argv[]) { double x=2., xp=4., dt=6., y=8, yp=1, dz=6; Py_Initialize(); PyObject* myModuleString = PyString_FromString((char*)"log"); PyObject* myModule = PyImport_Import(myModuleString); PyObject* myFunction = PyObject_GetAttrString(myModule,(char*)"derive"); PyObject* args = PyTuple_Pack( 6, PyFloat_FromDouble(x), PyFloat_FromDouble(xp), PyFloat_FromDouble(dt), PyFloat_FromDouble(y), PyFloat_FromDouble(yp), PyFloat_FromDouble(dz)); PyObject* myResult = PyObject_CallObject(myFunction, args); PyObject *ts= PyTuple_GetItem(myResult,0); PyObject *zs= PyTuple_GetItem(myResult,1); double result_t = PyFloat_AsDouble(ts); double result_z = PyFloat_AsDouble(zs); printf("%3f \n %f \n", result_t,result_z); Py_Finalize(); system("pause"); return 0; }_C++_Python_Numpy_Embed - Fatal编程技术网

在c中嵌入python时Numpy导入失败 我试图把Python程序嵌入到C++代码中。我的问题是使用包含numpy导入的python脚本。 例如,如果我使用下面的C++代码< /p> #include <Python.h> int main(int argc,char *argv[]) { double x=2., xp=4., dt=6., y=8, yp=1, dz=6; Py_Initialize(); PyObject* myModuleString = PyString_FromString((char*)"log"); PyObject* myModule = PyImport_Import(myModuleString); PyObject* myFunction = PyObject_GetAttrString(myModule,(char*)"derive"); PyObject* args = PyTuple_Pack( 6, PyFloat_FromDouble(x), PyFloat_FromDouble(xp), PyFloat_FromDouble(dt), PyFloat_FromDouble(y), PyFloat_FromDouble(yp), PyFloat_FromDouble(dz)); PyObject* myResult = PyObject_CallObject(myFunction, args); PyObject *ts= PyTuple_GetItem(myResult,0); PyObject *zs= PyTuple_GetItem(myResult,1); double result_t = PyFloat_AsDouble(ts); double result_z = PyFloat_AsDouble(zs); printf("%3f \n %f \n", result_t,result_z); Py_Finalize(); system("pause"); return 0; }

在c中嵌入python时Numpy导入失败 我试图把Python程序嵌入到C++代码中。我的问题是使用包含numpy导入的python脚本。 例如,如果我使用下面的C++代码< /p> #include <Python.h> int main(int argc,char *argv[]) { double x=2., xp=4., dt=6., y=8, yp=1, dz=6; Py_Initialize(); PyObject* myModuleString = PyString_FromString((char*)"log"); PyObject* myModule = PyImport_Import(myModuleString); PyObject* myFunction = PyObject_GetAttrString(myModule,(char*)"derive"); PyObject* args = PyTuple_Pack( 6, PyFloat_FromDouble(x), PyFloat_FromDouble(xp), PyFloat_FromDouble(dt), PyFloat_FromDouble(y), PyFloat_FromDouble(yp), PyFloat_FromDouble(dz)); PyObject* myResult = PyObject_CallObject(myFunction, args); PyObject *ts= PyTuple_GetItem(myResult,0); PyObject *zs= PyTuple_GetItem(myResult,1); double result_t = PyFloat_AsDouble(ts); double result_z = PyFloat_AsDouble(zs); printf("%3f \n %f \n", result_t,result_z); Py_Finalize(); system("pause"); return 0; },c++,python,numpy,embed,C++,Python,Numpy,Embed,它运行正常,但如果log.py包含来自numpy导入数组的,则会失败 from numpy import array def derive(x,xp,dt,y,yp,dz): return log(abs(x - xp)/dt),exp((y-yp)/dz) 我认为您是静态链接,但没有保留加载动态扩展模块所需的所有符号(即-Xlinker-export dynamic)。请参阅,其中建议您从distutils.sysconfig.get\u config\u var('LINKFORSHARE

它运行正常,但如果log.py包含来自numpy导入数组的
,则会失败

from numpy import array
def derive(x,xp,dt,y,yp,dz):
return log(abs(x - xp)/dt),exp((y-yp)/dz)

我认为您是静态链接,但没有保留加载动态扩展模块所需的所有符号(即
-Xlinker-export dynamic
)。请参阅,其中建议您从
distutils.sysconfig.get\u config\u var('LINKFORSHARED')
查询正确的选项


顺便说一句,变量函数是创建
args

的更方便的方法。我知道这个答案来得晚,但可能会帮助其他人解决同样的问题

帮助我的修复方法是确保python链接了正确的DLL和库,因为当安装了多个版本的python时,python可以混合使用这些DLL和库

确保运行
PyRun\u SimpleString(“导入系统”)
PyRun\u SimpleString(“打印系统路径”)
,查看结果。如果其中包含多个版本的Python,则需要强制选择正确的路径

启动您知道是正确版本的Python.exe(即在编译期间安装实际numpy包并链接到的位置)和:
import sys
,然后
print sys.path
。将此路径复制到:
PyRun\u SimpleString(“sys.path=[您的路径]”)。现在应该强制DLL的正确路径,并且导入numpy不会导致SEGFULT

from numpy import array
def derive(x,xp,dt,y,yp,dz):
return log(abs(x - xp)/dt),exp((y-yp)/dz)