问题标签 [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.
python - 使用 pybind11 将 NumPy 数组转换为自定义 C++ 矩阵类/从自定义 C++ 矩阵类转换
我正在尝试使用pybind11
. 在 C++ 中,我有一个Matrix3D
充当 3-D 数组的类(即带有 shape [n,m,p]
)。它具有以下基本签名:
为了最小化包装器代码,我想将此类直接转换为 NumPy 数组(副本没问题)。比如我想直接封装一个如下签名的函数:
使用包装代码
目前我在两者之间有另一个函数接受和返回py::array_t<double>
。但是我想通过用一些模板替换它来避免为每个函数编写一个包装函数。
这已为Eigen
-library 完成(用于数组和(2-D)矩阵)。但是代码太复杂了,我无法从中派生出我自己的代码。另外,我真的只需要包装一个简单的类。
python - 如何在 pypi 上放置一个 swig/pybind11 C++ 项目
我已经用pybind11和swig包装了代码,但似乎找不到有关如何在 pypi 上正确获取该代码的文档,以便我可以pip install
打包。
Pybind11似乎存在难以将代码放在 pypi 上的问题。
我想我想要的是为 Linux 和 OSX 构建二进制轮子,但我找不到太多关于此的文档。我猜有些人通过 travis 和脚本来做到这一点?是否有一种即插即用的方式来为所有发行版制作轮子?
python - 通过 pybind11 返回 numpy 数组
我有一个 C++ 函数计算一个大张量,我想通过pybind11作为 NumPy 数组返回 Python 。
从 pybind11 的文档来看,使用STL unique_ptr似乎是可取的。在下面的示例中,注释掉的版本有效,而给定的版本编译但在运行时失败(“无法将函数返回值转换为 Python 类型!”)。
为什么智能指针版本失败?创建和返回 NumPy 数组的规范方法是什么?
PS:由于程序结构和数组的大小,最好不要复制内存,而是从给定的指针创建数组。内存所有权应该由 Python 获得。
python - 如何使用 pybind11 包装模板类
我有一个类似于下面的类结构,其中我有两种类型 A 和 B 具有相似的签名,只是参数/返回类型不同。然后我使用一个类模板来处理这两个类,在 Python 中实现了鸭式的静态变体。现在我想用 pybind11 将这段代码包装到 Python 中,我希望在其中得到一个使用标准动态鸭子类型的类。我该怎么做呢?
我基本上是在寻找一种方法来禁用 pybind11 中的严格类型检查或指定多种类型,以便同时接受 TypeA 和 TypeB。下例定义的方式,只有TypeA通过检查。由于函数签名不同,我也无法将 A 和 B 统一为基类。
python - 使用 Pybind11 将 C++ 扩展到 Python
我有一些用 c++ 编写的代码,我试图在 python 中使用而无需再次在 python 中重写完整的代码,我正在使用 Pybind11 来构建一个 python 模块。我正在尝试通过在此处遵循本教程https://pybind11.readthedocs.io/en/stable/basics.html在 Microsoft Visual Studio 2015 中实现此目的
我在视觉工作室做了以下事情。1) 从https://codeload.github.com/pybind/pybind11/zip/master下载 Pybind11
2)解压文件
3) 在visual studio a 中开始了一个新的空C++ 项目。
4)在VC++目录>包含目录中添加了我的python解释器包含文件夹(C:/python27/include)和Pybind11(C:/Pybind11/include)
5) 在Linker>input>Additional dependencies中添加了额外的依赖(C:\Python27\libs\python27.lib)
6) 要在 Python 中使用输出文件,我需要一个 .pyd 文件,所以我在这里修改了配置属性>常规>目标扩展名:.pyd
7) 将项目默认值 > 配置类型更改为动态库 (.dll)
所以我能够构建我的项目并生成 .pyd 文件,但是在导入此模块时出现以下错误:ImportError: dynamic module does not define init function (initProject11)
我搜索了这个错误并得到了这个链接http://pybind11.readthedocs.io/en/stable/faq.html 但我找不到我的解决方案。
所以我正在寻找上述问题的解决方案。提前非常感谢。
这是我的 CPP 文件代码
c++ - 在另一个模板函数中使用模板函数指针
我正在使用模板函数向 pybind11 生成的 python 模块添加几个函数。
下面的简化代码可以很好地与 MSVC 一起编译。然而,如果 (decltype ...) 转换被留下注释,则使用 gcc-6.3 编译会失败。
我很困惑,因为这种转换对我来说似乎毫无用处:如果编译器能够使用 decltype 推断出类型,那么它应该能够在没有它的情况下进行。这是一个 gcc 错误吗?
这是 gcc 编译失败时输出的内容(参见 WF 下面的链接,它在没有 pybind11 的情况下产生相同类型的输出):
谢谢你的帮助!
c++ - pybind11 返回 numpy 对象数组
使用 pybind11 C++ API 和 python3,我们如何在 C++ 实现中正确地创建一个 numpy 对象数组(即 unicode 字符串)并将其返回给 python?传递给 pybind11::array() 的底层数据数组的确切内存布局是什么?我们究竟需要如何管理内存,即删除/释放?
请注意,这是必要的,因为我们希望在创建 pandas DataFrame 时将该字符串数组与其他 POD 数组结合使用。
python - pybind11,cmake:如何安装文件?
我正在将一个 C++ 库与越来越流行的pybind11 连接,以获取本机 Python 绑定;配置是通过CMake
.
我的CMakeLists.txt
样子
但是,这似乎没有注册安装规则。因此,虽然在构建树中一切都按预期工作,make install
但什么也没做。
需要添加什么才能按顺序安装?
c++ - CMAKE将动态库链接到模块,但不显示为链接依赖
如果以前有人问过这个问题,请指出我正确的方向。我有 lib1 和 mod2,它们必须链接在一起。该项目分布在几个文件夹和几个CMakeLists.txt
文件中。cmake
我正在使用的命令是这样的:
cmake文件1(基本目录):
cmake 文件 2(lib1 目录):
cmake 文件 3(mod2 目录):
我的一些步骤作为完整性检查是多余的(例如,设置带有 CMAKE 变量的标志)。
以下是 的部分输出ldd -r <path-to-mod2.so>/mod2.so
:
lib1 被调用elka_comm__common.so
,所以它应该显示为库依赖项ldd
,对吧?
命令的部分输出cmake/make
:
由此看来,在我看来,链接是正确完成的。我最好的直觉是cmake
生成的链接命令中的排序不正确,但除了知道链接命令对排序有特殊性之外,我无法证明这一点。
visual-studio-2015 - pybind11 "Python 是 64 位的,选择的编译器是 32 位的"
我正在尝试在安装了 VisualStudio 2015 的 Windows 机器上编译 pybind11。我还安装了 python 3.5.3 64bit 和 cmake 2.8.12。我得到错误:
我没有“选择”编译器为 32 位,并且查看 CMakeLists.txt,我没有找到任何地方来指定要运行哪个编译器。那么如何告诉 pybind11/cmake 编译为 64 位?