问题标签 [boost-python]

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

python - 在 PyQT 和 Boost.Python 之间共享小部件

我想知道是否可以在 PyQt 和 Boost.Python 之间共享小部件。

我将在我的一个使用 Qt 的应用程序中嵌入一个 Python 解释器。我希望我的应用程序的用户能够将他们自己的 UI 小部件嵌入到用 C++ 编程并通过 Boost.Python 公开的 UI 小部件中。

这是可能的吗?人们将如何去做呢?

0 投票
2 回答
10246 浏览

python - 动态加载库的 CMake 输出名称?

我正在尝试编写 cmake 规则以在 Linux 上使用 boost.python 为 python 构建动态加载库。我想使用 'foo' 作为 python 模块名称。因此,必须调用该库foo.so。但默认情况下,cmake 使用库命名的标准规则,所以如果我写

我会libfoo.so输出的。甚至set_target_properties(foo PROPERTIES OUTPUT_NAME "foobar") 会创造libfoobar.so

如何改变这种行为?

0 投票
4 回答
14608 浏览

python - Boost.Python - 如何通过引用返回?

我正在使用 Boost.Python 从 C++ 类创建 Python 模块。我遇到了引用问题。

考虑以下情况,其中我有一个类 Foo 具有重载的 get 方法,可以按值或引用返回。

一旦我定义了一个签名,就很容易指定应该使用按值返回。但我认为应该可以通过使用 return_value_policy. 但是,使用似乎合适的(doc);return_value_policy<reference_existing_object>似乎没有工作。

我误解了它的作用吗?

注意:我知道在没有生命周期管理的情况下引用现有对象可能很危险。

更新:
看起来它适用于对象,但不适用于基本数据类型。
以这个修改后的例子为例:

在测试中给出了预期的结果:

0 投票
2 回答
936 浏览

c++ - 使用带有弱 Ptrs 的 Boost Python?

尝试在 C++ 中建立具有父子关系的依赖项。父级包含子级,子级有一个指向父级的弱指针。

我还希望能够从 Python 中的父级派生。但是,当我这样做时,连接此父子关系时出现弱指针错误。

C++ 代码:

Python绑定:

Python代码:

错误:

如果我尝试将提取的指向 Parent 的指针转换为 shared_ptr,我会在 Python 中得到一个 free() 无效指针错误。

有没有办法解决这个问题,或者我应该放弃在 Boost Python 中使用弱指针?

0 投票
1 回答
1031 浏览

c++ - 指向 swig(或 Boost::Python)中的成员的指针

我从我的 C++ 应用程序为 python 做了一些绑定。

问题是我使用指向成员的指针(它用于计算最短路径并给出属性以最小化作为参数)。

这是 C++ 签名:

这就是我所做的(根据我在文档中的理解):

这就是我从 python 调用我的函数的方式:

这是我得到的错误:

我有一个使用默认第四个参数的重载方法,它工作得很好。

那么是否可以在 swig 中使用指向成员的指针?如果是,有什么诀窍?如果不是,那么最优雅的工作方式是什么?

感谢您的帮助!

更新:如果有人知道 Boost::python 是否确实做到了,我会切换到它。

0 投票
1 回答
523 浏览

python - 在 opensolaris 上安装 Shoutpy + Boost.python 时出现问题

我试图在opensolaris 2009.6 上安装shoutpy。它依赖于 boost.python。我已经boost_devel从 blastwave 安装了库并链接/opt/csw/include/boost/usr/include/boost. 但是当我尝试easy_install shoutpy得到以下输出时

这是使用python2.6,opensolaris 2009.06,boost 1.35。

任何帮助都会很棒!

干杯

标记

编辑 - 这已在 serverfault 上交叉发布,因为它有点难以分类问题域在哪里。https://serverfault.com/questions/88724/problem-with-opensolaris-boost-python-and-shoutpy

0 投票
1 回答
1654 浏览

python - Boost.Python:__init__ 接受 None 参数

我有一个用 Boost.Python 包装的 C++ 值类型,它有一个 NULL 值的概念。包装器代码的相关部分如下所示:

None目前,尝试通过传递给该方法在 Python 中创建 NULL 实例__init__()会导致接受 const 字符串引用的 C++ ctor 被使用无效引用调用。( &arg == NULL)

是否可以捕获None传递给构造函数的情况并优雅地处理它,或者至少在我的程序崩溃之前抛出一个有意义的异常?

使用 Boost 1.36 和 Python 2.6.2。

0 投票
2 回答
3016 浏览

constructor - Boost.Python:在类外定义构造函数

给定一个类:

用 Boost.Python 包装:

是否可以创建在 Python 中显示为构造函数的工厂方法:

这样在python中:

0 投票
3 回答
2279 浏览

c++ - Boost::Python 中的运算符=

如果我有类似以下课程的内容

有没有一种简单的方法可以使用 boost::python 将该功能导出到 python?该文档没有列出并且很好很容易

我不是 python 专家,所以说实话我什至不知道这是否有必要。但我想在我的 python 脚本中使用这个功能,所以我发布这个问题只是为了确保。

编辑:

这是我做 .def( self = self ) 时的编译器错误

0 投票
3 回答
4988 浏览

c++ - Python、线程、GIL 和 C++

有没有办法让 boost::python 控制与 python 的每次交互的 Python GIL?

我正在用 boost::python 编写一个项目。我正在尝试为外部库编写 C++ 包装器,并使用 python 脚本控制 C++ 库。我无法更改外部库,只能更改我的包装程序。(我正在为所述外部库编写功能测试应用程序)

外部库是用 C 语言编写的,并使用函数指针和回调来完成大量繁重的工作。它是一个消息传递系统,因此当消息进入时,会调用一个回调函数,例如。

我在我的库中实现了一种观察者模式,以便多个对象可以监听一个回调。我所有的主要玩家都正确导出,并且在一定程度上我可以很好地控制事情。

外部库创建线程来处理消息、发送消息、处理等。其中一些回调可能会从不同的进程中调用,我最近发现 python 不是线程安全的。

这些观察者可以在 python 中定义,所以我需要能够调用 python 并且 python 需要在任何时候调用我的程序。

我像这样设置对象和观察者

然后我创建一个发送到连接的源并调用 receivedMsg 函数。

所以一个常规的 source.send('msg') 将进入我的 C++ 应用程序,进入 C 库,它将发送消息,连接将获取它,然后调用回调,它返回到我的 C++ 库和connection 试图通知所有的观察者,此时就是这里的python类,所以它调用了那个方法。

当然回调是从连接线程调用的,而不是主应用程序线程。

昨天一切都崩溃了,我无法发送 1 条消息。然后在 Cplusplus-sig 档案中四处挖掘之后,我了解了 GIL 和几个漂亮的功能来锁定东西。

所以我的观察者类的 C++ python 包装器现在看起来像这样

但是,当我尝试发送超过 250 条这样的消息时,这很有效

它再次崩溃。具有与以前相同的信息和症状,

所以我想这次我在调用我的 C++ 应用程序时遇到问题,而不是调用 python。

我的问题是,有没有办法让 boost::python 为每次与 python 的交互处理 GIL 本身?我在代码中找不到任何东西,而且很难找到 source.send 调用进入 boost_python 的位置:(