0

我是一个 Python 人,为一个客户构建一个基于 Linux 的 Web 服务,该客户希望我与一个小型 C++ 库进行交互,他们目前正在与一堆基于 Windows 的 VB 应用程序一起使用该库。

他们向我保证,这个库相当简单(我猜就他们而言),他们只需要知道如何最好地编译并将它交付给我,这样我就可以在 Linux 下的 Python 中使用它。

我已经阅读了一些关于ctypes库和其他选项(SWIG 等)的信息,但由于某种原因,我还没有真正理解这个概念,并且仍然不知道如何告诉他们我需要什么。

我很确定让他们用 , etc 重写它Python.h,所以我希望有一种方法可以简单地让他们在 Linux 上将其编译为 .so 并将其导入 Python。这样的事情可能吗?如何做到这一点?

4

2 回答 2

2

不,这样的事情是不可能的。

要么他们必须提供 Python 绑定,要么你提供。你们中的任何一个都可以通过以下任何一种方式做到这一点:

  • 直接使用<Python.h>写一个C扩展模块。
  • boost::python用于使编写扩展模块更容易(尤其是当他们使用 C++ 而不是 C 时)。
  • 使用 SWIG、SIP 或类似工具部分自动化扩展模块的编写。
  • 用于以Cython类 Python 语言而不是 C 或 C++ 编写扩展模块。
  • 在 Python 中使用ctypes

对于非常简单的情况(特别是如果他们实际上将 C 接口导出到他们的 C++ 代码),ctypes可能是最简单的解决方案。否则,我建议先看看 Cython。但无论如何,你将不得不围绕其中一种解决方案思考——或者说服他们这样做。

于 2013-01-12T02:46:21.593 回答
0

由于 C++ ABI 的复杂性(例如名称修改),使用 ctypes 直接从 Python 加载 C++ 库通常很困难且特定于平台。

我建议您创建一个可以轻松地用 ctypes 包装的简单 C API,或者使用 SWIG 为 Python 生成包装器类型和适当的扩展模块。

于 2013-01-12T02:45:42.013 回答