问题标签 [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.
swig - PyBind - 重载函数
首先,我感谢你们所有人试图解决我的这个疑问。我正在努力将一个最小的 C++ 项目转换为在 Python 中使用。这种努力背后的真正原因是为了速度。
我遇到了 PyBind,对它的功能以及它们提供的大量文档感到非常惊讶。现在有一些事情停止了工作,因为我不知道该怎么做。考虑文件“MySource.hpp”中的以下代码,您能告诉我如何进行绑定吗?
我能够将 Point3D 的绑定定义为一个类及其某些成员函数。但我不知道如何为重载方法“ VectorCross ”进行绑定。它有两种方法,一种接受 Point3D 的实例,另一种接受指向浮点数组的指针。
到目前为止我写的绑定如下所示
有人可以指导我如何做到这一点吗?
c++ - 使用 pybind11 构建的 python 模块的 Linux 平台标签
我正在使用 pybind11 并使用 setuptools 和 cmake 构建 python 模块,如pybind/cmake_example中所述:
在本地,使用python setup.py sdist build
一切都很好,我可以使用和/或从生成的文件安装包。
我现在想将包上传到 PyPI。从不同的 python 包中,我知道如何通过操作轮子的平台标记来生成通用 linux 库(另请参见此处):
问题:
没有构建时如何生成适当的平台标签bdist_wheel
?这是否应该以某种方式构建为轮而不是扩展(可能与GH 上的这个问题有关)?
另外,pybind11 如何决定生成的库的后缀(在我的 linux 上它不仅仅是.so
but .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 的最佳实践是什么?
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 编译测试用例”部分中的说明进行操作
我不确定如何进行。任何指针都是有帮助的。
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
我不确定这意味着什么或如何解决它。任何帮助表示赞赏。以下是我得到的完整日志列表 -
cmake - ExternalProject_Add 使用 pybind11 进行 CMake 项目的智能方法
我正在使用 3.9.4 编写一个 pythonpybind11
模块CMake
。由于方便,我希望pybind11
在ExternalProject_Add
我的CMakeLists.txt
.
当我运行时cmake .
,它不会下载pybind11
源文件,并引发错误。
有一个解决方法:
- 注释掉 CMakeLists.txt 中的最后 3 行
- 跑
cmake .
- 运行
make
(然后,它会下载pybind11
源文件) - 恢复 CMakeLists.txt 中的最后 3 行
- 跑
cmake .
- 跑
make
但是,这并不聪明......有没有办法下载pybind11
使用ExternalProject_Add
而不注释掉这些行并恢复它们(并且没有运行cmake
和make
两次)?
/Users/me/foo/CMakeLists.txt
/Users/me/foo/foo.hpp
/Users/me/foo/foo.cpp
python - 如何使用 pybind11 将 python 函数转换为 std::function
我有一个Foo
包含 a的 c++ 类型std::function<void()> funcs
,它已成功绑定到 python。我的目标是在 python 中定义函数并将它们添加到这种类型,然后返回一个实例。在 c++ 中,我使用 pybind 来获取这种类型的实例。但是,当我尝试调用其中一个函数时,我的程序会出现段错误。
后来在c++中
我的python模块有这个:
我不确定为什么函数没有正确地转换回 C++?
python - 如何在多线程应用程序中使用 pybind11
我想在工作线程中运行 Python。但是,我在工作池中遇到奇怪的段错误和线程死锁。如何正确使用 pybind11/Python C API 来允许线程运行作业?
我知道由于 GIL,它对 MT python 没有多大意义,但这是一个适合当前架构的中间解决方案,直到有更好的方法。
python - 如何导入或安装预构建的 python 扩展模块(C++)(即未通过 setuptools 编译的库)?
我有一个 C++ 项目,我正在为其开发 Python 接口。现在我正在使用pybind11,因为它看起来很整洁,并且有一些很好的工具可以用 CMake 构建扩展模块,这就是主要的 C++ 项目的构建方式。
通过 CMake,我设法获得了一个包含要构建的接口函数的共享库,但是现在我有了它,我不知道如何告诉 Python 它存在并使其可导入。我不想重新配置要通过 Python 启动的项目的整个构建(即这里使用 setuptools 描述的),因为它是一个大项目,我只是为其中的一部分提供 Python 接口。因此,如果我可以只为 Python 构建共享库以及其余的 C++ 代码,然后稍后运行“setup.py install”来做任何其他需要做的事情以使共享库可见,那将是更可取的到 Python。
这可能吗?还是我需要做一些其他类型的重构,比如让主项目构建一些其他纯 C++ 库,然后我只需将其链接到通过 setuptools 单独构建的 Python 扩展模块库?
python - pybind11基本回调,函数签名不兼容错误
我一辈子都无法在使用 pybind11 构建的扩展模块中获得一个非常基本的 Python 回调函数。我试图按照这里的例子,但我想我一定是误解了一些东西。
C++代码如下:
使用这个模块的 Python 代码是
但是我收到此错误:
为什么它认为函数签名不匹配?我试图匹配这些例子,但我想我一定误解了一些东西......