问题标签 [pybind11]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
269 浏览

python - 如何将 python 函数转换/转换为 std::function在 pybind11 中?

我正在使用 pybind11 为我的 c++ 项目实现绑定。所以,我的问题基本上是如何在解释器中定义一个 python 函数并从 C++ 代码中调用它。C++ 接口使用指针 (double*) 传递数据,我不知道如何在解释器中编写函数以及如何将其转换为 std::function 以执行评估:

拜托,有人可以给我一些提示吗?

0 投票
1 回答
6604 浏览

python - 错误:不兼容的函数参数

pybind11用来访问一些我在 python 中用 C++ 编写的函数。我希望将初始化的结构实例返回给 python(从类成员函数),以便我可以访问 python 中的实例值。我提供了我的源文件的简化版本。可以使用以下内容重现错误。这是 C++ 包装器

这是类头的一部分sum.h

这是类定义 sum.cpp

结构定义:mesh.h

这就是我在 python 中调用它的方式。

之后我得到错误:get_instance():不兼容的函数参数。支持以下参数类型: 1. (arg0: GetSum) -> A

有人可以帮我找出我可能出错的地方吗?

谢谢!

0 投票
1 回答
765 浏览

python - 使用 pybind11 将 c++ 函数添加到现有的 python 模块

如何使用 pybind11 创建 python 子模块?

我克隆了 python 示例(https://github.com/pybind/python_example)并对其进行了修改。下面是目录树。

setup.py 有以下几行:

以下内容不起作用,因为它不能使用带点的名称。

以下也不起作用。

这也不起作用:

如何使这项工作?

0 投票
1 回答
897 浏览

python - 使 C++ 模块成为 Python 包的一部分

我有以下目录布局

我目前将 module1 导入为

和模块2作为

但我希望能够使用前一种语法。

module2 由 pybind11 以如下方式创建:

0 投票
1 回答
991 浏览

python - 在 pybind11 中混合 Python 和 C++ 源文件

我正在使用 PyBind11 制作 Python 项目。

我的目录结构如下所示:

我的 C++ 代码如下所示:

我的setup.py样子是这样的:

现在,如果我跑

一切都编译。

但这是奇怪的部分,稍后,我可以运行import cppmodule但不能import bob。或者,与其他摆弄,有时我可以同​​时运行。

我还没有想出怎么做,但我想做的是将 C++ 代码bob以相同的方式并入模块func1func2,以便我可以输入bob.myfunc()Python。

我怎样才能做到这一点?

0 投票
2 回答
1077 浏览

python - 使用 Python 虚拟环境时包含和库在哪里?

我使用 Python 虚拟环境。基本上,它工作得很好,但是我在编译一些 Python 绑定时遇到了问题,即使用 libIGL 和 pybind11。

CMake 具有以下与 Python 相关的变量:

它似乎可以正确检测到先前激活的虚拟环境的python3.5可执行文件,但它发现包含和库的一些错误的2.7路径。

所以我想手动将这些路径设置到我的虚拟环境中。我浏览了虚拟环境的目录结构,我想我找到了包含在/users/me/libs/pyvenv/include/python3.5m. 但是我找不到libpython*,我的虚拟环境中根本没有*.so文件。那么在这种情况下我应该使用哪个库?

0 投票
0 回答
424 浏览

pybind11 - Pybind11:make_tuple() 是否拥有包装的指针?

假设我有一个这样的函数,我将其包装在 Pybind11 中:

指针的所有权会发生什么?是否可以告诉 pybind11::tuple 拥有指针并对它们调用 delete ?写这个的正确方法是什么?

0 投票
1 回答
3236 浏览

python - 使用 Pybind11 包装 STL 容器返回类型

我想包装一个 C++ 函数(使用 Pybind11),它返回一个 STL 容器,该容器本身包装在一个智能指针中。一个例子如下所示。该函数已重载,因此我必须指定签名。

该模块将编译,但当我尝试在 Python 中使用该函数时会出错:

TypeError:无法将函数返回值转换为 Python 类型!

我确定我只是为 Pybind11 设置了错误。谢谢你的帮助!

编辑

问题肯定出在我尝试绑定std::Array数据类型的过程中。我最终修改了要使用的代码std::Vector,然后 Pybind11 没有问题。有关如何绑定std::Array容器的信息,请参见下面的 AS Mackey 的回答。

0 投票
3 回答
1473 浏览

python - pybind11 包装现有代码

我正在尝试使用 pybind11 包装一个 c++ 库,以便可以将它与 Python 3.x 一起使用。

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

我的环境是:

  • 视窗 10 x64
  • Anacondas 使用 Python 3.6 构建 4.4.0
  • Visual Studios 2015 Professional(已安装 C++)

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

```

```

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

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

当您拥有 .cpp 文件时,pybind11 的文档始终显示构建包装器。我可以以可以用 swig 构建包装器的方式使用 pybind11 吗?如果是这样,您如何设置文件?

有人可以指出一个仅从现有 c++ 代码生成 python 包装器的项目吗?

谢谢

0 投票
1 回答
323 浏览

python - 使用 pybind11 将抽象类作为参数作为参数传递

这是我的问题:

我有两节课

和第二个类,它在其构造函数中将该类作为参数

对于 ai 类,可以使用文档中描述的蹦床类。如果我尝试为第二个类创建绑定,则会收到以下编译错误:

使用以下绑定:

我怎样才能传递这样的论点?

谢谢!