首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pybind11包装现有代码

pybind11包装现有代码
EN

Stack Overflow用户
提问于 2017-09-07 10:40:56
回答 3查看 1.7K关注 0票数 9

我试图用c++封装一个pybind11库,这样我就可以在Python3.x中使用它了。

我尝试使用swig包装代码,但遇到了一个问题,即SWIG将生成cxx文件,但不会读取所引用的标头,因此建议我使用pybind11,因为它比swig更好(我知道这是意见),但我很难找到关于如何引用/构建项目的资源。

我的环境是:

  • Windows 10 x64
  • Anacondas使用Python3.6构建4.4.0
  • 视频工作室2015年专业人员(c++安装)

当我为Swig创建接口文件时,我可以做一些简单的事情,比如:

代码语言:javascript
复制
```javascript

%模块文件

%{

#包括"FileGDBAPI.h“

%}

%包括"FileGDBAPI.h“

代码语言:javascript
复制

然后,在swig构建中,我可以将-I引用到.h文件的位置。

我如何在pybind11中做这样的事情?有那么简单吗?

pybind11的文档总是在您拥有.cpp文件时显示构建包装器。我是否可以以一种可以用swig构建包装的方式来使用pybind11?如果是的话,如何设置这些文件?

有人能告诉我一个只从现有c++代码生成python包装器的项目吗?

谢谢

EN

回答 3

Stack Overflow用户

发布于 2017-09-12 12:55:06

尽管具有相同的用途,但是SWIG和Pybind11是不同的工具。

顾名思义,SWIG (简化包装器和接口生成器)是一个生成器工具,它使用用一种特殊语言编写的定义为现有的C++代码创建C++绑定。

另一方面,Pybind11是一个只有头的C++库,它封装了原始的Python (它是旧风格的C,具有陡峭的学习曲线),允许用现代C++编写C++绑定。但是您可以手工编写这些绑定,使用任何C++实体(函数、类、模板等)。pybind11::命名空间提供的。

票数 5
EN

Stack Overflow用户

发布于 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容器。

票数 1
EN

Stack Overflow用户

发布于 2017-09-18 09:20:25

为此,您可能需要查看cffi

http://cffi.readthedocs.io/en/latest/

这是一个使用它的示例项目:

https://github.com/wolever/python-cffi-example

顺便说一句,您也可以将代码随pypy一起发布,有些人可能会认为这是一种优势。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46094289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档