找到最简单的方法来包装双层包装->;Python的双C函数

找到最简单的方法来包装双层包装->;Python的双C函数,python,c,wrapper,Python,C,Wrapper,我需要包装一个C函数的接口 double foo(double) 到python,以便在python控制台中 >>foo_py(2.9) 应该给我foo(2.9)的两倍值。最后,我在scipy中使用导出的foo_py 我一直在寻找包装这样一个C函数的最简单的方法。当然有很多关于stackoverflow的相关帖子,但是它们都是几年前写的,现在我正在寻找一个更新的答案来满足我的具体需求。谢谢 [编辑]作为参考,我使用PyObj等尝试了C扩展。关于这方面的文档似乎缺乏。我还尝试了用P

我需要包装一个C函数的接口

double foo(double)
到python,以便在python控制台中

>>foo_py(2.9)
应该给我foo(2.9)的两倍值。最后,我在scipy中使用导出的foo_py

我一直在寻找包装这样一个C函数的最简单的方法。当然有很多关于stackoverflow的相关帖子,但是它们都是几年前写的,现在我正在寻找一个更新的答案来满足我的具体需求。谢谢


[编辑]作为参考,我使用PyObj等尝试了C扩展。关于这方面的文档似乎缺乏。我还尝试了用Posith.python将C++函数封装到Python。这里我需要包装C函数(以避免命名需求问题等)。

下面是一个简单的示例:

test.c

#include <Python.h>

static PyObject* foo(PyObject* self, PyObject* args) {
  double d;
  PyArg_ParseTuple(args, "d", &d);
  return Py_BuildValue("d", d);
}

// Bind python function to C function
static PyMethodDef simplemodule_methods[] = {
  {"foo_py", foo, METH_VARARGS},
  {NULL, NULL, 0}
};

// Initialize module
void inittest() {
  (void) Py_InitModule("test", simplemodule_methods);
}
编译

gcc-shared-fPIC-I/usr/include/python2.7-o test.so test.c


python test.py

这是我的视频,它展示了好运

,使用ctypes应该非常简单:@figs谢谢。你给我的链接看起来很好。让我在等待其他人的回应时查看一下。包装函数始终返回0。我的代码和他的类似:import-ctypes from-ctypes import-cdll-lib=cdll.LoadLibrary(“./libfoo.so”)lib.foo\u r.argtypes=(ctypes.c\u-double,)lib.foo\u-r.restypes=ctypes.c\u-double-print-lib.foo\u-r(9)奇怪的是,你必须发布所有Python和c代码让我们检查它。@fig谢谢你的帮助。我的C代码很大。python代码作为上述注释发布。我以后可能会打开一个新帖子,但现在我使用Everlisle的解决方案。它起作用了。谢谢
from test import *
print foo_py(2.9) # will output 2.9