寻找将 double->double C 函数包装到 Python 的最简单方法
Finding the simplest way to wrap a double->double C function to Python
我需要包装接口的 C 函数
double foo(double)
到python,这样在python控制台
>>foo_py(2.9)
应该给我 foo(2.9) 的双精度值。最终,我在 scipy 中使用导出的 foo_py。
我一直在寻找 最简单 的方式来包装这样一个 C function.There Whosebug 上肯定有很多相关的帖子,但它们是几年前的日期了此时此刻,我正在为我的特定需求寻找更新的答案。谢谢。
[编辑] 有关信息,我尝试使用 PyObj 等进行 C 扩展。这方面的文档似乎不足。我还尝试使用 Boost.Python 将 C++ 函数包装到 Python。这里我需要包装 C 函数(为了避免命名 demangling 问题等)。
这是一个简单的操作示例:
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);
}
test.py
from test import *
print foo_py(2.9) # will output 2.9
编译
gcc -shared -fPIC -I/usr/include/python2.7 -o test.so test.c
运行 和
python test.py
这是我的视频,祝你好运https://asciinema.org/a/18926
我需要包装接口的 C 函数
double foo(double)
到python,这样在python控制台
>>foo_py(2.9)
应该给我 foo(2.9) 的双精度值。最终,我在 scipy 中使用导出的 foo_py。
我一直在寻找 最简单 的方式来包装这样一个 C function.There Whosebug 上肯定有很多相关的帖子,但它们是几年前的日期了此时此刻,我正在为我的特定需求寻找更新的答案。谢谢。
[编辑] 有关信息,我尝试使用 PyObj 等进行 C 扩展。这方面的文档似乎不足。我还尝试使用 Boost.Python 将 C++ 函数包装到 Python。这里我需要包装 C 函数(为了避免命名 demangling 问题等)。
这是一个简单的操作示例:
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);
}
test.py
from test import *
print foo_py(2.9) # will output 2.9
编译
gcc -shared -fPIC -I/usr/include/python2.7 -o test.so test.c
运行 和
python test.py
这是我的视频,祝你好运https://asciinema.org/a/18926