将python库绑定到C

boy*_*ska 9 c python 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;
}
Run Code Online (Sandbox Code Playgroud)

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

然而,这似乎不是我的最佳选择:

  • 这很难看
  • 这只是为了C

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

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

还有更好的吗?

sni*_*ies 5

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

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

当然,一旦你决定在一个单独的进程中运行python lib,就会有像进程通信一样的所有可能性,如命名管道或套接字以及像Apache Thrift,Google Protocol Buffers0MQ这样的工具包.