问题标签 [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 投票
2 回答
7847 浏览

c++ - 暴露 std::vector使用 boost.python

我编写了一些生成 std​​::vector 的 C++ 代码。

我还有一个 python 脚本,它可以操作一些数据,现在,我像这样声明(如下)。

我可以很好地运行脚本。从我的 C++ 代码:

我不知道如何将我的 C++ 数据传输到 python。我有很多,但似乎没有什么确定的。

我的 C++ 中有

这似乎可行,但据我了解,它只为我的 python 脚本提供了一个类“PyVec”,而不是我需要的数据。我错了吗?

我还看到其他一些人在 python 邮件列表中使用 boost::shared_ptr

我也找到了这个例子,但发现它令人困惑。

我能想到几种方法

  1. 传递一些东西给boost::python::exec_file方法
  2. 使用boost_indexing_suite_ext
  3. 英格boost::shared_ptr

哪种方法最容易上手?对我来说,没有一种方法很清楚。

以下是我查看的更多链接: 来自python 网站的 boost网站 另一个邮件列表线程

更新:

这适用于将一个传递int给我的python代码,如下所示

但是我想传递一个向量,当我尝试以与上述类似的方式执行此操作时,我收到此错误

TypeError: No to_python (by-value) converter found for C++ type: std::vector >

所以,显然我需要告诉 python 如何处理 std::vector。我认为这段代码可以帮助解决这个问题。

但是由于 std::vector 很常见,所以必须有一个明确的方法来做到这一点……对吧?

0 投票
1 回答
1135 浏览

python - CPython、IronPython、Jython 脚本是否相互兼容?

我很确定 python 脚本可以在所有三个中工作,但我想确定一下。我在这里和那里阅读过关于可以编写 CPython、Jython、IronPython 的编辑器的信息,我希望我能深入了解其中的区别。

我的情况是我要测试 3 个不同的 api。每个 api 在代码方面执行相同的功能,但它们在实现上是不同的。我正在围绕每种语言的 api 编写包装器。每个包装器都应该使用 Boost::python、Jython 和 IronPython 向 python 公开完全相同的功能和实现。

我的问题是,使用这些公开的方法(每种语言都通用)编写的 Python 脚本是否适用于 Python 的所有三种“风格”?

就像我说的那样,我很确定答案是“当然”,但在我花太多时间做这件事之前,我需要确定一下。

0 投票
4 回答
2458 浏览

c++ - 如何使用常规 makefile 构建依赖于 boost 的项目?

我正在开发一个 c++ 项目,我们最近需要在其中包含一小部分 boost。boost 部分真的很小(Boost::Python),因此,使用 bjam 构建一切看起来有点过头了(此外,从事该项目的每个人都对 make 感到满意,并且没有 jam 知识)。

我已经做了很多测试,但是我找不到一种方法来在我的 makefile 中包含前面提到的库并使构建成功。

非常感谢您的所有帮助。:)

0 投票
4 回答
5632 浏览

c++ - 使用 Visual Studio 2008 构建 boost python 示例

我正在使用 Boost Python 库为我的 C++ 代码创建 python 扩展。我希望能够从 python 调用下面显示的 C++ 代码中的 'greet' 函数:

和python代码:

我已经设法使用 bjam 做到了这一点(生成了 hello_ext.pyd 并且效果很好),但现在我想使用 Visual Studio 2008 构建它。构建了一个 hello.dll (但既没有 hello_ext.dll 也没有任何.pyd)。调用我的 python 代码后,我得到一个错误:

ImportError:没有名为 hello_ext 的模块。

将 hello.dll 重命名为 hello.pyd 或 hello_ext.pyd 后,我得到另一个 ImportError: Dll load failed

如何使用 VS 2008 构建正确的 .pyd 文件?

0 投票
2 回答
3180 浏览

boost-python - Boost.python 因 libboost_python.so.1.41.0 失败:无法打开共享对象文件

我已经安装了 Boost.Python。安装过程中没有错误,但我有一个问题。当我尝试构建我的项目时,一切正常,但是当我运行包装的项目时出现错误:

我试图将项目复制到 libboost_python.so.1.41.0 也将 lib 复制到项目等。但每次我都有 sme 错误。

0 投票
2 回答
3762 浏览

c++ - 如何在函数和成员函数上编写一个包装器,在包装函数之前和之后执行一些代码?

我正在尝试编写一些包装类或函数,允许我在包装函数之前和之后执行一些代码。

理想情况下,包装器应该是通用的,适用于具有任何签名的函数和成员函数。

更多信息:

我正在寻找一种简单的方法来释放/重新获取围绕我昂贵的 C++ 调用的 GIL,而不必像这样手动编写瘦包装器:

这种包装器将针对各种功能重复多次,我想找到一个解决方案,让我避免对所有功能进行编码。

我尝试了一些方法,但我能想到的最好方法是要求用户明确说明返回值和参数的类型,例如:

但在我看来,应该可以将指针传递给函数(&foo_wrapper)并让编译器找出类型。

有谁知道我可以使用或指出正确方向的技术?

干杯!

0 投票
1 回答
3349 浏览

c++ - 提升功能的Python方法

我有一个使用 boost python 将 boost::function 作为参数导出到 Python 的方法。

从我读过的内容来看, boost::python 应该支持 boost::function 而不会大惊小怪,但是当我尝试使用 python 方法调用该函数时,它给了我这个错误

我用这段代码从python调用它

在 C++ 中它被定义为

这里的目标是一个计时器类,我可以在其中做类似的事情

创建一个执行 funcWithArgs 的计时器。多亏了 boost bind,这几乎可以与任何函数或方法一起使用。

那么我需要使用什么语法来让 boost::python 接受我的 python 函数作为 boost::function?

0 投票
2 回答
497 浏览

linux - Boost::Python:在构建 python-extension 时将自定义参数传递给 gcc

我需要传递-Wl,-rpath,\$$ORIGIN/lib/给 g++ 的链接器(原因)。有没有办法在 Jamroot 文件中传递这个参数?

0 投票
1 回答
948 浏览

c++ - How to use C++ operators within python using boost::python (pyopencv)

I'm using the pyopencv bindings. This python lib uses boost::python to connect to OopenCV. Now I'm trying to use the SURF class but don't know how to handle the class operator in my python code.

The C++ class is defined as:

How can I pass my arguments to that class?

Update: Thanks to interjay I can call the method but now I getting type errors. What would be the python boost::python::tuple ?

Gives me that:

0 投票
6 回答
8814 浏览

c++ - boost::python 导出自定义异常

我目前正在使用 Boost.Python 为 Python 编写 C++ 扩展。此扩展中的函数可能会生成包含有关错误信息的异常(不仅仅是描述所发生情况的人类可读字符串)。我希望我可以将这个异常导出到 Python,这样我就可以捕获它并使用额外的信息做一些事情。

例如:

不幸的是,Boost.Python 似乎将所有 C++ 异常(即 的子类std::exception)转换为RuntimeError. 我意识到 Boost.Python 允许实现自定义异常转换,但是,需要使用PyErr_SetObject一个PyObject*(用于异常的类型)和一个PyObject*(用于异常的值)——我都不知道如何从我的 Boost 中获取。 Python 类。也许有一种我还没有找到的方法(这会很棒)。否则有谁知道如何导出自定义 C++ 异常以便我可以在 Python 中捕获它?