我想要做的是与大多数人想要做的相反:我有一个用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.然后使用SWIG将C库绑定到其他语言。
有更好的吗?
答案 0 :(得分:5)
好的C是编程的Lingua franca。所以我想说你的方法是正确的。为C创建绑定,然后使用SWIG等工具和其他语言的FFI绑定到C.
只有另外一个想法浮现在脑海中。今天我们看到HTTP正在成为所有API和接口的新Lingua franca。因此,人们可以考虑创建一个用python编写的小型web服务,提供一些REST接口。但显然这只在某些情况下才有意义。
当然,一旦你决定在一个单独的进程中运行你的python库,就会有像进程通信的所有可能性,如命名管道或套接字和工具包,如Apache Thrift,Google Protocol Buffers或{{3 }}。