问题标签 [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.
c++ - Mac OS X 上的 Boost.Python:“TypeError:属性名称必须是字符串”
我最近使用 MacPorts 安装了 Boost,目的是在 C++ 中嵌入一些 Python。然后我决定使用 Python 网站上的示例检查我是否正确配置了 Xcode:
它编译正确,但是当我启动它时,对 attr() 的调用会引发异常,并且生成的错误消息是"TypeError: attribute name must be string, not 'str'"。这听起来像是一个占位符。
我在谷歌上查了一下,但没有运气。
我在 Leopard 上使用 Boost v1.39、Python 2.5 和 GCC 4.0。
c++ - 如何确保始终为特定 C++ 实例返回相同的 Python 实例?
我正在使用 Boost.Python 来包装 C++ 库。
如何确保始终为特定 C++ 实例(通过指针标识)返回相同的 Python 实例(通过对象标识)?我无法扩展 C++ 类,但如果有帮助,我可以添加成员变量(例如 PyObject * 或 boost::python::handle<>)。我在想我应该能够在 C++ 实例中缓存 Python 实例,并返回缓存的实例而不是创建一个新实例。但是,我无法弄清楚需要什么包装代码。
要包装的示例类:
任何人都可以提供建议吗?
c++ - 关于 Boost::Python 和 Boost::Threads 的问题
我和一个朋友正在开发一个使用 Boost::Python 的应用程序。我在 C++ 中定义了一个接口(也是一个纯虚拟类),通过 Boost::Python 向用户公开,用户必须从它继承并创建一个类,应用程序采用该类并将其用于某些回调机制。
到目前为止,一切都很顺利。现在,函数回调可能需要一些时间(用户可能编写了一些繁重的东西)......但是我们需要重新绘制窗口,所以它看起来不会“卡住”。我们想为此使用 Boost::Thread . 一次只会运行一个回调(没有其他线程会同时调用 python),所以我们认为这不会是一个很大的问题......因为我们不使用 python 内部的线程,也不在为 python 包装的 C++ 代码。
我们所做的是在 Py_Initialize() 之后调用 PyEval_InitThreads(),然后,在它自己的 boost 线程中调用函数回调之前,我们使用宏 PY_BEGIN_ALLOW_THREADS 和,以及当线程结束时使用宏 PY_END_ALLOW_THREADS。
我想我不需要说执行永远不会到达第二个宏。每次运行时都会显示几个错误......但总是在调用实际回调时出现。我用谷歌搜索了很多,甚至阅读了一些关于线程的 PEP 文档,但他们都在谈论 python 模块中的线程(我不认为它只是一个暴露的纯虚拟类)或 python 中的线程,而不是关于主应用程序从多个线程调用 Python。
请帮忙,这让我沮丧了几个小时。
附言。帮助!
python - 酸洗 Boost.Python 公开的枚举
是否可以腌制(使用 cPickle)已使用 Boost.Python 公开的枚举?我已经使用这里描述的第一种方法成功地腌制了其他对象,但是这些似乎都不适用于枚举类型,并且默认情况下这些对象似乎不是可腌制的。
boost-python - boost python 是否支持通过引用或值返回向量的函数?
我是 python 新手,我看过 boost python,它看起来非常令人印象深刻。但是通过介绍我找不到任何示例,其中对象向量作为python列表/元组返回。
即举这个例子,我想暴露类X,Cont及其所有功能。关键位将 X 或字符串的向量返回给 python
我自己试图公开 const_ref_x_vec()、value_x_vec() 等函数的尝试徒劳无功,只会导致编译错误。
从谷歌搜索中,我没有看到任何支持按值或引用返回向量的示例。这甚至可以通过 boost python 实现吗?有什么解决方法吗?我应该在这种情况下使用 SWIG 吗?
任何帮助表示赞赏。
阿凡达
c++ - 使用 boost::python 将 C++ 类实例传递给 python
我有一个库,它创建对象(A 类的实例)并将它们传递给应该能够调用它们的方法的 python 程序。
基本上我有 C++ 类实例,我想从 python 中使用它们。有时,该对象应该被传回 C++ 进行一些操作。
我创建了以下包装文件(假设该New
函数在 C++ 代码中的某处被调用):
该代码缺少 python 获取existing_instance
. 我没有粘贴它,但我们只是说我为此目的使用了回调机制。
此代码有效,但我有几个问题:
在 Count 函数(以及所有其他 C++ 操作函数)中,这样传递是否可以
a
,或者最好是这样传递const shared_ptr<A>&
?在我在 python boost 文档中找到的代码片段中,经常使用参考,但我不明白其中的区别(当然,除了具有更高的参考计数器)。这段代码“安全”吗?当我将 existing_instance 传递给 python 时,它的计数器将增加(只有一次,即使在 python 中我制作了对象的更多副本,当然)所以 C++ 代码不可能破坏对象,只要 python 持有至少是一个“副本”。我对么?我试着玩指针,看来我是对的,我只是想确定一下。
我想阻止 python 创建 A 的实例。它们只能从 C++ 代码传递。我怎么能做到这一点?编辑:发现,我只需要使用 no_init 和不可复制:
class_<A, boost::noncopyable>("A", no_init)
python - 使用 Cython 创建 C 包装器 - Python
我一直在试图弄清楚如何包装以下 C 函数 = compress.c,compress.h。
我尝试按照教程进行操作,但是在创建.pxd文件后我不知道该怎么做:|
据我了解,这是我应该拥有的 pxd 文件
在此之后,我不知道该怎么做:|
帮助将是伟大的家伙!=)
编辑:
收到此错误
无论如何谢谢=)
c++ - Boost 自动链接库不是由 Boost 构建的,但预期的库是构建的
我正在开发一个可以通过编写 python 脚本来扩展的数学应用程序。
我正在使用 Qt 4.6.3(构建为静态库,调试和发布版本)和 Boost 1.43.0(构建为静态库,运行时链接也设置为静态,多线程版本,调试和发布)。一切都是用 MSVC++2008 构建的。Boost 构建了以下库:
- libboost_python-vc90-mt-s-1_43.lib
- libboost_python-vc90-mt-s.lib
- libboost_python-vc90-mt-sgd-1_43.lib
- libboost_python-vc90-mt-sgd.lib
我的项目编译,但在链接阶段出现以下错误:
为什么它不选择我编译的库之一?
我认为库名称中的 s 代表静态,但是自动链接功能似乎选择了一个动态库,我希望它全部静态链接到一个可执行文件中。
正则表达式库也是如此:我编译了相同的 4 个正则表达式库,快速测试显示此链接错误:
该怎么办?
exception - Inter-module exception name resolution through boost python does not work?
Here is my problem:
I have two C++ modules, A and B, which are built as dynamically-linked libraries. A offers basic math functions, and custom exception types. B is a higher level module that uses A.
B::someFunction() calls a function from A, and tries to catch custom exception A:MyExceptionFromA in order to convert it into a custom type B:MyExceptionFromB (since users of module B do not need to know about the implementation details of A).
Everything works fine as long as I remain in the C++ domain. However, if I expose B::someFunction() in python via boost python, the exception is not caught anymore in the C++ module.
I can catch std::runtime_error, from which A:MyExceptionFromA derives, and call typeid(e).name() to get the retrieve the correct mangled name, so I know the correct exception is thrown. Therefore I suspect that the problem comes from resolving this mangled symbol into the correct exception type.
I have found this link, which explains that "python uses [the insular] model to open extension modules, so that extension module writers don't need to know what symbols other extension modules might be using.". I'm suspecting this is part of the problem/solution, but I do not know enough about symbol resolution to figure out how to solve my problem.
Any ideas?
python - python如何加载Boost.Python库?
考虑以下原型 Boost.Python 模块,该模块从单独的 C++ 头文件中引入了“D”类。
当我将它编译到共享库时,我很困惑如何将它公开给 Python。
- 我应该怎么称呼图书馆?是吗?liba.so? b.so? libb.so?
- 图书馆需要在哪里?我可以把它放在子目录中吗?