9

我想做的与大多​​数人想做的相反:我有一个用 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 库绑定到其他语言。

有更好的吗?

4

1 回答 1

5

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

脑海中只有一个想法。今天,我们看到 HTTP 正在成为各种 API 和接口的新通用语言。因此,可以考虑创建一个用 python 编写的小 Web 服务,提供一些 REST 接口。但很明显,这仅在某些情况下才有意义。

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

于 2012-05-16T15:29:47.787 回答