将python库绑定到C

时间:2012-05-16 15:15:07

标签: python c binding

我想要做的是与大多数人想要做的相反:我有一个用Python编写的库,我想让它可用于C(可能还有其他语言)。

我知道对此的典型答案是使用C的Python库,即:

#include <Python.h>

int
main(int argc, char *argv[])
{
  Py_Initialize();
  PyRun_SimpleString("from time import time,ctime\n"
                     "print 'Today is',ctime(time())\n");
  Py_Finalize();
  return 0;
}

(来源:http://docs.python.org/extending/embedding.html#very-high-level-embedding

但是,这对我来说似乎不太理想:

  • 很难看
  • 仅适用于C

相反,我想要的是一种将我的库绑定到很多语言的方法,包括C. 我不关心自动包装器生成:我的库很简单,所以我可以编写胶水代码。

目前,我提出的唯一解决方案是使用与上面类似的代码将我的库绑定到C.然后使用SWIG将C库绑定到其他语言。

有更好的吗?

1 个答案:

答案 0 :(得分:5)

好的C是编程的Lingua franca。所以我想说你的方法是正确的。为C创建绑定,然后使用SWIG等工具和其他语言的FFI绑定到C.

只有另外一个想法浮现在脑海中。今天我们看到HTTP正在成为所有API和接口的新Lingua franca。因此,人们可以考虑创建一个用python编写的小型web服务,提供一些REST接口。但显然这只在某些情况下才有意义。

当然,一旦你决定在一个单独的进程中运行你的python库,就会有像进程通信的所有可能性,如命名管道或套接字和工具包,如Apache ThriftGoogle Protocol Buffers或{{3 }}。