问题标签 [python-bindings]

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

c++ - 在 C++ 静态 boost::shared_ptr 中保存 python 生成的值

在使用 Boost.Python 和 C++ 时,有时我们会创建使用类本身和boost::shared_ptr<>版本绑定的类。由于许多原因,这非常方便,并且可以在很多地方使用。但是boost::python,当将 a 返回boost::shared_ptr<>到在 Python 中生成并记录在 C++ 静态变量上的值时,该机制似乎无法可靠地工作。

通常情况下,我希望返回boost::shared_ptr<>的人持有一个特殊的删除器来处理这个问题,但情况似乎并非如此。似乎发生的情况是,返回的boost::shared_ptr只是包装了一个指向 Python 中生成的值的指针,而没有任何特殊的删除考虑。这导致来自双重删除(一个来自 Python 解释器本身,一个来自 C++ 静态)的一致崩溃 - 或者至少看起来像这样。

要使用下面的代码重现此行为,请创建如下test.cc所示的文件并使用以下脚本进行测试。

使用以下 Python 测试程序:

在 Linux(ubuntu 12.10,使用 Python 2.7 和 Boost 1.50)下编译(使用g++ -I/usr/include/python2.7 -shared -fpic test.cc -lboost_python -lpython2.7 -o test.so)并运行上述程序(python test.py),得到以下堆栈跟踪:

这表明静态析构函数发生了双重删除。这种行为似乎在不同平台之间是一致的。

问题:是否可以在不复制返回值的情况下实现所描述的行为boost::python?在上面的玩具示例中,这很简单,但在我的实际问题中,深拷贝A是不切实际的。

0 投票
0 回答
211 浏览

python - 是否可以使用 Cython 写入/写入 python 转换?

是否可以像 boost.python 一样使用 Cython 编写 to-python 和 from-python 转换器?

编辑(根据评论请求,详细说明我们为什么喜欢这个):

我们目前有用 C++ 编写的代码,通过 boost.python 绑定到 Python。在这段 C++ 代码中,我们处理Blitz::Array<>'s。在我们当前的抽象方案中,Python 中的代码使用 NumPy ndarrays,而 C++ 中的代码使用Blitz::Arrays<>. 我们已经编写了一个numpy.ndarray可以以非常透明的方式从's转换为 's 的桥接器,Blitz::Array<>反之亦然。这座桥在某些情况下也可以避免抄袭,这是什么红利。

这种方法的问题:

  1. 可移植性:为不同版本的Python编译需要为每个版本的Python编译Boost.Python;

  2. 可记录性:在 C++ 代码中包含 Python 文档字符串不是很好。它阻碍了我们的开发人员实现漂亮的文档。它通常看起来修补且不完整;

  3. 构建速度:编译 boost.python 模板可能会很慢。我们使用 CMake 并行执行此操作以加快速度,但随后我们想用我们的项目创建一个普通的 Python 鸡蛋。你可能知道 setuptools/distutils 和 CMake 不能很好地混合,所以我们有一些不完整的方式来做这个领域的事情。

所以,考虑到 Cython 的前景,我想我们会尝试一下,找到一种不那么老套的方法来解决所有这些问题。我们已经有一个依赖的代码库,numpy.ndarray我想尽可能地利用它,以最少的编写和最大程度地重用我们的 C++ 代码库。因此,我的问题。

0 投票
2 回答
1517 浏览

python - 使用 PyArg_ParseTuple 解析用户定义的类型

如何使用 解析用户定义的类型(或来自现有非标准库的类型)PyArg_ParseTuple

0 投票
1 回答
188 浏览

python - e2fsprogs/e2fslibs 是否有可用的 python 绑定?

我刚刚开始尝试自动化这些步骤,我正在尝试自动化Bad Blocks HOWTO中列出的步骤,以重新分配硬盘驱动器的损坏扇区(在一些不幸事件之后)。

不幸的是,到目前为止,我使用的方法是使用带有程序e2fsprogs包的管道并解析其输出,我认为这不是解决问题的可靠方法。

为了避免这种解析,我试图为e2fslibs(使用的库e2fsprogs)找到 python 绑定,但我的任务并不成功。

因此,除了我自己实现绑定(并将它们回馈)或实现解析我需要正确方式的程序的输出之外,是否有任何 python 绑定已经可用于此任务?

0 投票
0 回答
1219 浏览

python - 是否可以在 chromedriver 会话中加载配置文件扩展?

我开发了一个程序,它检查浏览器插件的行为[在 python 和 selenium 中]。该插件对我来说是一个黑匣子,我只是将它安装在浏览器中。

例如,在 Firefox 中,我已将其安装到我的配置文件中,并强制 webdriver 使用所需的配置文件打开 Firefox。我制作了相同的女巫铬,它显然加载了配置文件,但没有加载扩展名。

有什么办法可以使这个功能发挥作用吗?或者问题是扩展名绑定到登录用户,而不是浏览器的配置文件?

我需要做的是用指定的url执行chrome,让插件分析站点,然后检查插件的输出。

另一个问题是我不是会使用该程序的人,所以我不想开始强制用户打包 crx 扩展(或者有一个简单的方法吗?)。我的要求是配置文件中有一两个项目,比如

铬配置文件:路径/到/配置文件

谢谢你的任何建议。

0 投票
1 回答
134 浏览

c++ - Boost.Python 是否需要其他 boost 库的绑定代码?

我有一个继承自 boost::statechart 库的类。我需要在 Python 脚本中使用这个类,我想知道我是否需要为所有 boost::statechart 库编写包装代码(.def s)只是因为我的类继承自它?或者 boost.python 不需要任何包装代码来查看定义(它会自动处理其他 boost 库以在 python 中调用)?

0 投票
1 回答
184 浏览

python - Python + OpenGL – 加快将面传递到 OpenGL

我正在将 OpenGL 与 Python 绑定一起使用。我使用以下代码将我的面孔传递给 OpenGL:

triangles人脸列表在哪里。

这部分代码似乎相当慢,对于约 10,000 个面的网格大约需要几秒钟。有没有一种简单的方法来加速它,也许一次通过所有三角形而不是使用这个 for 循环?

0 投票
0 回答
333 浏览

python - python绑定中分段错误的原因可能是什么

我想使用 cython 编写 python 绑定到 ac 库。该库代表一个多线程 http 服务器,并通过头文件公开它的 API。按照 cython 指南,我编写了一个 pxd 和一个 pyc 文件,其中包含 3 个基本函数的定义:

python 包装器看起来类似于:

绑定工作正常,服务器启动并提供内容,但是,当我从 python 停止服务器时,大多数情况下,python 解释器会因分段错误而崩溃。崩溃发生从 c server_stop 返回之后,我不知道是什么导致了段错误。

内存分配/初始化/释放发生在这 3 个函数中,完全由 c 库在内部处理。

也许我遗漏了一些东西,那么分段错误错误的原因是什么?

编辑:

它不会在 valgrind 或 gdb 中重现。但是,我生成了一个核心转储,回溯如下所示:

0 投票
0 回答
1054 浏览

python - 运行 PyInstaller 二进制文件时出错“致命 Python 错误:PyThreadState_Get:没有当前线程”

我对 python 很陌生,对 pyinstaller 有疑问

我有的:

  1. 导入用 C++ 编写的动态库的 Python 脚本(使用 boost python)
  2. 如果我使用 python 运行这个脚本一切正常

    /li>
  3. 如果我使用 pyinstaller 创建二进制文件,然后尝试运行它,我得到以下信息

    /li>
  4. 崩溃的回溯如下

    /li>

我已经读到问题可能是动态库链接到一个版本的python而pyinstaller链接到另一个版本的python(在Mac os x 10.8上提到了Homebrew + Python:致命的Python错误:PyThreadState_Get:没有当前线程导入mapnik ) 但我检查了以下内容

和 pyinstaller 日志

因此,我得出的结论是pyinstaller和动态库python版本是一样的。

那么,问题的根源可能是什么?

稍后添加:我仔细查看了崩溃报告,发现我仍然有两个二进制文件

但第二个在临时目录 /var/folders 和二进制等于 /System/Library/Frameworks/Python.framework/Versions/2.7/Python

0 投票
3 回答
577 浏览

python - Python:递归函数中的变量绑定

我使用类似于以下的函数在 Python 中遇到了一些奇怪的问题:

例如,如果我输入:“1”然后“2”然后“3”然后“4”,我会打印出以下内容:

这令人困惑,因为该函数似乎已成功识别正确答案,但在这样做之后,它返回的值是给出的第二个响应,而不是最近的响应。

谁能解释这个递归函数中“x”的绑定发生了什么?