我试图用c++封装一个pybind11库,这样我就可以在Python3.x中使用它了。
我尝试使用swig包装代码,但遇到了一个问题,即SWIG将生成cxx文件,但不会读取所引用的标头,因此建议我使用pybind11,因为它比swig更好(我知道这是意见),但我很难找到关于如何引用/构建项目的资源。
我的环境是:
当我为Swig创建接口文件时,我可以做一些简单的事情,比如:
```javascript%模块文件
%{
#包括"FileGDBAPI.h“
%}
%包括"FileGDBAPI.h“
然后,在swig构建中,我可以将-I引用到.h文件的位置。
我如何在pybind11中做这样的事情?有那么简单吗?
pybind11的文档总是在您拥有.cpp文件时显示构建包装器。我是否可以以一种可以用swig构建包装的方式来使用pybind11?如果是的话,如何设置这些文件?
有人能告诉我一个只从现有c++代码生成python包装器的项目吗?
谢谢
发布于 2017-09-12 12:55:06
尽管具有相同的用途,但是SWIG和Pybind11是不同的工具。
顾名思义,SWIG (简化包装器和接口生成器)是一个生成器工具,它使用用一种特殊语言编写的定义为现有的C++代码创建C++绑定。
另一方面,Pybind11是一个只有头的C++库,它封装了原始的Python (它是旧风格的C,具有陡峭的学习曲线),允许用现代C++编写C++绑定。但是您可以手工编写这些绑定,使用任何C++实体(函数、类、模板等)。pybind11::命名空间提供的。
发布于 2018-07-12 14:43:39
我如何在pybind11中做这样的事情?有那么简单吗? 有人能告诉我一个只从现有c++代码生成python包装器的项目吗?
您可以检查Binder项目http://cppbinder.readthedocs.io
Binder是一个工具,用于使用C++11和Clang LibTooling库自动生成Pybind11项目的Python绑定。也就是说,Binder接受一个C++项目并将其编译成对象和函数,这些对象和函数都可以在Python中使用。绑定程序不同于以前的工具,因为它处理C++11中的新特性。
基本用法似乎非常简单,类似于您对SWIG的描述。
1)收集有关哪些类/函数可用的数据,并深入获取类继承、成员函数和独立函数类型签名的信息。 2)生成绑定代码 3)将代码编译成共享库。 绑定器是旨在自动化步骤1和步骤2的工具。
不幸的是,它似乎仅仅是Linux,所以要在Windows下使用它,您需要安装虚拟Linux或使用带有构建工具的Docker容器。
发布于 2017-09-18 09:20:25
为此,您可能需要查看cffi。
http://cffi.readthedocs.io/en/latest/
这是一个使用它的示例项目:
https://github.com/wolever/python-cffi-example
顺便说一句,您也可以将代码随pypy一起发布,有些人可能会认为这是一种优势。
https://stackoverflow.com/questions/46094289
复制相似问题