python - 将 C/C++ 库与 Python 连接

标签 python boost swig cython boost-python

我有一个 C++ 库,我需要它能够与 python 交互。我阅读了 this question 以了解我需要适应的选择。

我看到了 SWIG 和 Cython 并想使用 SWIG,主要是因为我的 Python 编程经验非常少。但是,我意识到使用 Swig 我必须为每个类编写一个接口(interface)(.i 扩展名)。现在,我的 C++ 项目很大,我觉得要花很多时间来准备好包装器(或者我错了)。

所以现在因为我的应用程序很大,所以我需要做出选择。在引用的线程中,我遇到了 Boost Python。现在,我无法再做出决定,并希望能够告诉我一个人的优缺点的人提供意见。请注意,我的偏好是易于使用以及可以多快完成。我愿意为此牺牲系统性能。如果有人能为我提供一个 SWIG 实现的项目或 Boost Python 实现的项目链接,我将不胜感激(一个完整的模块而不是示例教程会更好!)

最佳答案

Boost::python 在 C++ 和 Python 之间提供了一个几乎没有包装器的接口(interface)。它还允许您编写自定义转换器和其他使 Python 界面更好的简洁的东西。界面是纯 C++ 的,但它们依赖于模板和巧妙的设计模式,使它看起来很漂亮并且是声明式的。您还可以从编译器直接检查连接器代码中获益。

使用 Swig,您可以在 Swig 自己的 DSL 中编写接口(interface)声明,这需要几天时间才能掌握。此外,它总是插入一个包装层,所以它可能会慢一点。然而,它确实有一个很好的特性,可以自动为你转换很多东西,而不必声明任何额外的东西。不过,它生成的包装器很难调试。

恕我直言,boost::python 是更好的选择,因为您可以直接使用 CPython 的 native C 接口(interface)。我用Swig做Java和C++的交互,因为JNI是熊,Python的C接口(interface)其实本身就很好用。

如果您已经有了一堆 Swig 包装器,我会保留它们,因为您必须重做所有这些工作。然而,开始一个新项目,或者如果你需要最大的性能,boost::python 一路走来!

关于python - 将 C/C++ 库与 Python 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13965051/

相关文章:

python - mkstemp 打开太多文件

c++ - boost.spirit 编译错误:无法将参数 1 从 "const char * "转换为“std::_String_iterator<std::_String_val>

file - 使用 boost 文件系统 C++ 逐行读取文件

python - 数字求和练习 | n//= 10 是什么意思

python - 在 Tkinter 上显示全屏模式

c++ - 使用 Boost 查询点

python - 用 Python 封装 C++ 库来调用 Python C API

python - SWIG 和 Python3 导入错误

c++ - SWIG - 命名空间问题

python - 将列表移动到 csv 的更好方法?