我有一个主文件(main.cpp)和一个头文件(nodes.hpp)。主文件将 N(任何正整数)作为输入参数,并通过使用头文件的函数给出输出“x & y”(均为双精度)。
笔记:
- 主文件和头文件都是用 C++ 编写的。
- 主文件和头文件都使用 Eigen 库,而不是使用数据结构作为数组、向量。
我必须为他们编写一个 python 包装器,我有 python 的工作知识,但从未使用过任何包装器。
任何人都可以参考或提供一些关于使用 python wrpper 处理此类代码的说明吗?
原文由 user7440094 发布,翻译遵循 CC BY-SA 4.0 许可协议
以下是您的选择:
您可以使用 ctypes ,我认为这是最干净的解决方案,因为您将程序转换为可以由任何其他软件调用的共享库,而不仅仅是 Python。但是,您必须自己为您的程序编写一个 C 接口。
您可以使用 Python C-Extension ,我认为这是最糟糕的解决方案,因为它的级别非常低,容易出现内存泄漏,并且需要大量时间来实现一个功能,并且依赖于 Python 版本。基本上这是在 C++ 中启动 Python 解释器的好方法。您可以创建 PyObjects(这是任何 Python 类型的主要构建块)并在 C/C++ 中处理它们。
您可以使用 SWIG ,它会自动创建您必须通过您定义的接口文件使用 ctypes 创建的接口。人们说它非常好,但文档没有那么好。
您可以使用 Boost.Python ,这很好,但它的 bjam 构建系统非常难看。如果你能设法绕过它,那么它甚至比 ctypes 更好。我是一个超级粉丝,但 bjam 是我不使用它的原因。
我通常做的是ctypes。我相信它,因为它强调 单一职责原则。该库有一个独立于接口(C 接口)的工作,它也与使用该接口并向用户公开“简单功能”的 Python 脚本分开。