问题标签 [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 投票
2 回答
5469 浏览

swig - PyBind - 重载函数

首先,我感谢你们所有人试图解决我的这个疑问。我正在努力将一个最小的 C++ 项目转换为在 Python 中使用。这种努力背后的真正原因是为了速度。

我遇到了 PyBind,对它的功能以及它们提供的大量文档感到非常惊讶。现在有一些事情停止了工作,因为我不知道该怎么做。考虑文件“MySource.hpp”中的以下代码,您能告诉我如何进行绑定吗?

我能够将 Point3D 的绑定定义为一个类及其某些成员函数。但我不知道如何为重载方法“ VectorCross ”进行绑定。它有两种方法,一种接受 Point3D 的实例,另一种接受指向浮点数组的指针。

到目前为止我写的绑定如下所示

有人可以指导我如何做到这一点吗?

0 投票
2 回答
1523 浏览

python - affdex.cpp:9:31:致命错误:pybind11/pybind11.h:没有这样的文件或目录#include

我可以在 Python 中导入 pybind11,它位于包含路径中。但是,按照此处的说明,我收到以下错误:

我该如何解决这个错误?

更新:

0 投票
1 回答
301 浏览

c++ - 使用 pybind11 构建的 python 模块的 Linux 平台标签

我正在使用 pybind11 并使用 setuptools 和 cmake 构建 python 模块,如pybind/cmake_example中所述:

在本地,使用python setup.py sdist build一切都很好,我可以使用和/或从生成的文件安装包。

我现在想将包上传到 PyPI。从不同的 python 包中,我知道如何通过操作轮子的平台标记来生成通用 linux 库(另请参见此处):

问题:

没有构建时如何生成适当的平台标签bdist_wheel?这是否应该以某种方式构建为轮而不是扩展(可能与GH 上的这个问题有关)?

另外,pybind11 如何决定生成的库的后缀(在我的 linux 上它不仅仅是.sobut .cpython-35m-x86_64-linux-gnu.so)?

跟进:

  • 主要问题是我无法将当前 Ubuntu 构建的包更新为 PyPI:ValueError: Unknown distribution format: 'libraryname-0.8.0.cpython-35m-x86_64-linux-gnu.so'
  • 如果平台标签不能或不应该更改:跨平台将 pybind11 模块上传到 PyPI 的最佳实践是什么?
0 投票
1 回答
1268 浏览

linux - Pybind11 linux 构建测试失败 - '找不到包配置文件 pybind11Config.cmake 和 pybind11-config.cmake'

我正在尝试在 linux 机器上构建 pybind11 测试。我下载了源代码并执行以下操作 -

cd pybind11-master cd tests mkdir build cd build cmake ..

我收到错误 - `找不到由“pybind11”提供的具有以下任何名称的包配置文件:

pybind11Config.cmake pybind11-config.cmake

将“pybind11”的安装前缀添加到 CMAKE_PREFIX_PATH 或将“pybind11_DIR”设置为包含上述文件之一的目录。如果“pybind11”提供了单独的开发包或者SGK,请确保已经安装了`

我按照这个链接 - http://pybind11.readthedocs.io/en/master/basics.html并按照“为 linux/mac 编译测试用例”部分中的说明进行操作

我不确定如何进行。任何指针都是有帮助的。

0 投票
1 回答
333 浏览

c++ - Linux Pybind11 'build check -j 4' 错误

为 linux 安装 Pybind11 后,我运行命令 -

make check -j 4如文档中所述 - http://pybind11.readthedocs.io/en/master/basics.html

我收到以下错误 -

make[3]: * [tests/test_cmake_build/CMakeFiles/test_subdirectory_embed] 错误 1 ​​make[2]: * [tests/test_cmake_build/CMakeFiles/test_subdirectory_embed.dir/all] 错误 2 make[2]: *** 等待未完成的工作……

make[1]: * [tests/CMakeFiles/check.dir/rule] 错误 2 make: * [check] 错误 2

我不确定这意味着什么或如何解决它。任何帮助表示赞赏。以下是我得到的完整日志列表 -

0 投票
1 回答
4114 浏览

cmake - ExternalProject_Add 使用 pybind11 进行 CMake 项目的智能方法

我正在使用 3.9.4 编写一个 pythonpybind11模块CMake。由于方便,我希望pybind11ExternalProject_Add我的CMakeLists.txt.

当我运行时cmake .,它不会下载pybind11源文件,并引发错误。

有一个解决方法:

  1. 注释掉 CMakeLists.txt 中的最后 3 行
  2. cmake .
  3. 运行make(然后,它会下载pybind11源文件)
  4. 恢复 CMakeLists.txt 中的最后 3 行
  5. cmake .
  6. make

但是,这并不聪明......有没有办法下载pybind11使用ExternalProject_Add而不注释掉这些行并恢复它们(并且没有运行cmakemake两次)?

/Users/me/foo/CMakeLists.txt

/Users/me/foo/foo.hpp

/Users/me/foo/foo.cpp

0 投票
1 回答
683 浏览

python - 如何使用 pybind11 将 python 函数转换为 std::function

我有一个Foo包含 a的 c++ 类型std::function<void()> funcs,它已成功绑定到 python。我的目标是在 python 中定义函数并将它们添加到这种类型,然后返回一个实例。在 c++ 中,我使用 pybind 来获取这种类型的实例。但是,当我尝试调用其中一个函数时,我的程序会出现段错误。

后来在c++中

我的python模块有这个:

我不确定为什么函数没有正确地转换回 C++?

0 投票
2 回答
4336 浏览

python - 如何在多线程应用程序中使用 pybind11

我想在工作线程中运行 Python。但是,我在工作池中遇到奇怪的段错误和线程死锁。如何正确使用 pybind11/Python C API 来允许线程运行作业?

我知道由于 GIL,它对 MT python 没有多大意义,但这是一个适合当前架构的中间解决方案,直到有更好的方法。

0 投票
1 回答
1526 浏览

python - 如何导入或安装预构建的 python 扩展模块(C++)(即未通过 setuptools 编译的库)?

我有一个 C++ 项目,我正在为其开发 Python 接口。现在我正在使用pybind11,因为它看起来很整洁,并且有一些很好的工具可以用 CMake 构建扩展模块,这就是主要的 C++ 项目的构建方式。

通过 CMake,我设法获得了一个包含要构建的接口函数的共享库,但是现在我有了它,我不知道如何告诉 Python 它存在并使其可导入。我不想重新配置要通过 Python 启动的项目的整个构建(即这里使用 setuptools 描述的),因为它是一个大项目,我只是为其中的一部分提供 Python 接口。因此,如果我可以只为 Python 构建共享库以及其余的 C++ 代码,然后稍后运行“setup.py install”来做任何其他需要做的事情以使共享库可见,那将是更可取的到 Python。

这可能吗?还是我需要做一些其他类型的重构,比如让主项目构建一些其他纯 C++ 库,然后我只需将其链接到通过 setuptools 单独构建的 Python 扩展模块库?

0 投票
2 回答
1260 浏览

python - pybind11基本回调,函数签名不兼容错误

我一辈子都无法在使用 pybind11 构建的扩展模块中获得一个非常基本的 Python 回调函数。我试图按照这里的例子,但我想我一定是误解了一些东西。

C++代码如下:

使用这个模块的 Python 代码是

但是我收到此错误:

为什么它认为函数签名不匹配?我试图匹配这些例子,但我想我一定误解了一些东西......