问题标签 [pybindgen]

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 回答
235 浏览

c++ - 共享对象文件应该放在哪里?

我正在尝试使用 pybindgen 为 Python 创建 C/C++ 绑定。我已按照“构建它(GCC 说明)”中概述的步骤为示例文件创建绑定:

http://packages.python.org/PyBindGen/tutorial.html#a-simple-example

运行make会生成一个 .so 文件。如果我了解 .so 文件的工作原理,我应该能够import将共享对象中的类转换为 Python。但是,我不确定将文件放在哪里以及如何让 Python 知道它在哪里。此外,原始 c/c++ 源文件是否需要随附 .so 文件?

到目前为止,我已经尝试将文件放在 /usr/local/lib 中,并将 DYLD_LIBRARY_PATH 的路径添加到 .bash_profile 中。当我尝试从 Python 解释器中导入模块时,会抛出一个错误,指出无法找到该模块。

所以,我的问题是:生成的 .so 文件需要做什么才能被 Python 程序使用?

0 投票
1 回答
402 浏览

c++ - 如何获取给定 C++ 指针的 PyBindGen PyObject?

鉴于PyObjectcreated by PyBindGen,很容易获得指向包装的 C++ 对象的指针,只需使用obj结构中的成员:

但是,假设我只有MyWrappedClass*,并且想要获得PyObject包装它的(如果有的话,它可能不存在)。有没有办法在不维护我自己的反向指针字典的情况下做到这一点?

0 投票
0 回答
556 浏览

python - 在 Mac OS 10.7 上构建 pybindgen 时出现 waf 错误

我正在尝试在 Mac OS 10.7 上构建 Pybindgen。Lion Everything 在 Ubuntu 上运行良好,可以进行比较,但是......

在 OS X 上,waf 安装程序(Pybindgen 使用 waf 构建和安装)对此感到窒息:

=> 但我 100% 确定我的 Mac SDk 中至少有 Python.h ...我知道它在那里...我只是不知道如何确保 waf 找到它... waf 中有一个函数称为 check_python_headers 这似乎是问题所在。我怎样才能解决这个问题?

0 投票
2 回答
759 浏览

c++ - 尝试为 c++ 互操作自动生成我的库时出错

我正在使用 pybindgen 创建 python 和 c++ 之间的链接代码。或者至少如果我可以让它与我的代码一起工作,我会这样做。python 文件在运行时会产生以下错误。我可以满足 pybindgen 或解决这些问题的任何方式都将非常有帮助。

我的 .py 文件是

0 投票
0 回答
266 浏览

python - 如何在 PyBindGen 中编写自定义类型处理程序?

PyBindGen 的文档说为您自己的数据类型编写自定义类型处理程序很容易。但是,我没有找到任何编写它们的好例子。pybindgen 提供的示例太基础了,无法理解细节,不幸的是,文档几乎不存在。我真正需要的是:

  • 我需要使用哪个类作为转换器的基础?
  • 我必须重载哪些方法来扩展或替换绑定代码的特定部分?
  • 我应该使用什么方法来处理 const 和非常量参数?

是否有任何完整且有据可查的示例将自定义类型处理程序添加到 pybindgen?可能有人为您自己的项目这样做并可能分享一种方法?

我当前绑定的一个示例,以更好地了解我需要什么。目前使用 Boost.python 完成:

方法 System::XYZ() 返回一个 Eigen::Vector3f 对象。它必须在复制其数据的情况下转换为 numpy 数组。这很重要,因为整个想法都是关于效率的。目前它是通过丑陋的宏来完成的:

它可以工作,但我需要为每个方法编写一个包装函数,它采用 Eigen 对象,这是维护的噩梦。这就是为什么我想尝试 PyBindGen 并在那里创建一个转换器,它会自动添加来自这些宏的所有样板代码。

顺便说一句,boost.python 转换器在这里没有帮助,因为它们强制复制数据。

0 投票
1 回答
887 浏览

python - 是否可以为绑定到 python 的 C++ 库获得绝地自动完成功能?

我正在使用 vim 和 jedi-vim 来编辑一些 python 代码。但是,我们使用的一些库是 C++ 共享库,我们使用 pybindgen 为其生成了 python 绑定。使用 jedi-vim 时,我没有得到任何类和方法的签名,只是它们的列表。

例如,在这个库中,如果我安装库并导入它 , https://github.com/jorisv/SpaceVecAlg :

然后,sva.将正确显示所有一阶函数和类。但是,如果我选择第一个,sva.ABInertia(绝地不会建议我使用任何类构造函数。

我想我必须以某种方式将类定义导出到一种 python 文档中,我想我可以为此使用 doxygen 注释,但我不知道如何将额外的文档提供给 jedi(或任何其他完成引擎,例如作为内置在 IPython 中的一个)。

非常感谢 !

0 投票
1 回答
119 浏览

python - pybindgen 无法与 gccxml 一起使用

我有一个想绑定到 Python 的 C++ 库。我开始使用 Pybindgen,它真的很容易使用,但是考虑到我的 C++ 库的大小,手动添加函数和命名空间需要很长时间。我已经阅读了有关 PyBindGen 的文档,特别是应该为我扫描头文件的 gccxml 部分。这将是理想的,但我无法让它正常运行。就像测试一样,我输入了我的主头文件并尝试导出它,但是我收到了这个错误:

当然,我的 Python 代码基本上只是这里的修改示例。

我安装了 gccxml 和 pygccxml(对于 Python 3.5)。该文档实际上并没有过多地说明此过程,因此可能会感谢您快速了解如何使用此功能。

提前致谢。

0 投票
1 回答
138 浏览

python - 带有回调的 PyBindGen

我正在尝试使用 PyBindGen 为我的具有回调的 C 库创建一个 python 扩展模块。尽管PyBindGen 的首页说回调是一个缺失的功能,但当前的源代码以及这个讨论存档都有一些示例,说明如何设置 PyBindGen 以将回调函数从 python 传递到 C 库。

问题是该示例将回调方法定义为具有PyObject*作为void *参数来携带回调函数指针信息。由于我的 API 没有这样的上下文指针,我试图在 C 绑定代码中保留对回调的引用,类似于标准 python 示例。问题是我无法弄清楚如何让 PyBindGen 设置全局 PyObject * my_callback。我怎样才能做到这一点?这是我的代码

我的库头文件

我的库源文件

我的 PyBindGen modulegen.py带有注释部分,说明需要添加到自动生成的代码中才能正常工作

我用于构建扩展模块的 setup.py 文件

我的 python 脚本使用扩展模块