[英]Call a Python function from within a C program
我在C中有一个应用程序,在某些时候我需要解决非线性优化问题。 不幸的是,AFAIK在C中的资源非常有限(请让我知道其他情况)。 但是在Python中使用它很简单,例如scipy.optimize.minimize 。
当我试图这样做时,我遇到了一些看起来非常频繁的陷阱,例如找不到Python.h
,模块没有加载,函数调用时出现分段错误等。
什么是快速简便的第一计时器链接这两个程序的方式?
为了使这项工作有一些你必须确保到位的东西:
python-dev
包)。 Python.h
文件,例如locate Python.h
。 其中一个应该出现在include
文件夹的sub(sub)文件夹中,例如路径应该是../include/python2.7/Python.h
。 #include “<path_to_Python.h>"
以便能够使用Python API。 使用任何教程来调用Python函数。 我用过这个 ,它就是诀窍。 然而,有几个小点缺失:
无论何时使用任何Py<Name>
函数,例如PyImport_Import()
, 总是检查结果以确保没有错误,例如
// Load the module object pModule = PyImport_Import(pName); if (!pModule) { PyErr_Print(); printf("ERROR in pModule\\n"); exit(1); }
初始化Python解释器之后,即在Py_Initialize();
,你必须将当前路径附加到sys.path
以便能够加载你的模块(假设它位于你当前的目录中):
PyObject *sys = PyImport_ImportModule("sys"); PyObject *path = PyObject_GetAttrString(sys, "path"); PyList_Append(path, PyString_FromString("."));
.py
。 ../include/python2.7/Python.h
文件吗? 在编译期间在gcc
选项中使用-I
选项在头文件目录列表中包含include
文件夹,例如-I /System/Library/Frameworks/Python.framework/Versions/2.7/include
。 include
文件夹所在的同一文件夹中,例如-L /System/Library/Frameworks/Python.framework/Versions/2.7/lib
,以及-lpython2.7
选项(当然会相应地调整它) Python版)。 现在你必须能够成功编译和执行你的C程序,并在其中调用你的Python程序。
我希望这是有益的,祝你好运!
资料来源:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.