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