用 python 包装 C 代码(手动)

新手上路,请多包涵

我有一个主文件(main.cpp)和一个头文件(nodes.hpp)。主文件将 N(任何正整数)作为输入参数,并通过使用头文件的函数给出输出“x & y”(均为双精度)。

笔记:

  1. 主文件和头文件都是用 C++ 编写的。
  2. 主文件和头文件都使用 Eigen 库,而不是使用数据结构作为数组、向量。

我必须为他们编写一个 python 包装器,我有 python 的工作知识,但从未使用过任何包装器。

任何人都可以参考或提供一些关于使用 python wrpper 处理此类代码的说明吗?

原文由 user7440094 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 343
1 个回答

以下是您的选择:

  1. 您可以使用 ctypes ,我认为这是最干净的解决方案,因为您将程序转换为可以由任何其他软件调用的共享库,而不仅仅是 Python。但是,您必须自己为您的程序编写一个 C 接口。

  2. 您可以使用 Python C-Extension ,我认为这是最糟糕的解决方案,因为它的级别非常低,容易出现内存泄漏,并且需要大量时间来实现一个功能,并且依赖于 Python 版本。基本上这是在 C++ 中启动 Python 解释器的好方法。您可以创建 PyObjects(这是任何 Python 类型的主要构建块)并在 C/C++ 中处理它们。

  3. 您可以使用 SWIG ,它会自动创建您必须通过您定义的接口文件使用 ctypes 创建的接口。人们说它非常好,但文档没有那么好。

  4. 您可以使用 Boost.Python ,这很好,但它的 bjam 构建系统非常难看。如果你能设法绕过它,那么它甚至比 ctypes 更好。我是一个超级粉丝,但 bjam 是我不使用它的原因。

我通常做的是ctypes。我相信它,因为它强调 单一职责原则。该库有一个独立于接口(C 接口)的工作,它也与使用该接口并向用户公开“简单功能”的 Python 脚本分开。

原文由 The Quantum Physicist 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题