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

c++ - 在 Linux 中将 boost-python 与 C++ 一起使用

我的开发商店已经组装了一个相当有用的基于 Python 的测试套件,我们想用它来测试一些基于 Linux 的 C++ 代码。我们已经得到了他们与 Boost 一起发布的测试项目来编译(在目录中输入“bjam”并且它可以工作),但是我们的实际项目存在问题。

从源代码(v1.35.0)构建boost库和bjam,当我运行bjam时,我在bin/gcc-4.1.2/debug目录中得到一个.so。我运行 python 和“import”,我得到: ImportError: libboost_python-gcc41-d-1_35.so.1.35.0: cannot open shared object file: No such file or directory

查看库目录,我有以下内容: libboost_python-gcc41-mt-1_35.so libboost_python-gcc41-mt-1_35.so.1.35.0 libboost_python-gcc41-mt.so

显然我需要 -d 而不是 -mt 库,或者指向 -mt 库而不是 -d,但我不知道如何让我的 Jamroot 文件做到这一点。

当我安装 Debian Etch 的库版本时,我得到“/usr/include 中没有 Jamfile” - 并且有一个 debian 错误说他们遗漏了系统级 jamfile。

我更有希望让它从源头工作,所以如果有人有任何解决图书馆问题的建议,我想听听他们的意见。

对答案 1 的回应:感谢您的提示。那么,你知道我将如何让它使用 MT 库吗?这似乎是 bjam 或我正在使用的 Jamfile 的问题,我认为我处于调试模式,即使我找不到任何标志。虽然我知道如何在对 GCC 的调用中包含特定库,但我看不到从 Boost 端配置它的方法。

0 投票
4 回答
9039 浏览

c++ - CPP 中嵌入的 Python:如何将数据返回给 CPP

在从事 C++ 项目时,我一直在寻找第三方库来处理不是我核心业务的东西。我找到了一个非常好的库,完全符合需要,但它是用 Python 编写的。我决定尝试使用 Boost.Python 库在 C++ 中嵌入 Python 代码。

C++ 代码如下所示:

Python 代码的(非常)简化版本如下所示:

现在的问题是:“MyFunc”执行得很好,我可以看到“结果”的打印。我不能做的是从 C++ 代码中读取“结果”。extract 命令永远不会在任何命名空间中找到“结果”。我尝试将“结果”定义为全局,我什至尝试返回一个元组,但我无法让它工作。

0 投票
2 回答
4179 浏览

c++ - 如何创建派生自抽象 C++ 类的类的 python 对象实例?

这是我的代码:

我想从 c++ 抽象类派生 python 类,然后将此对象传递回 c++。我应该如何做到这一点而不会崩溃?

0 投票
3 回答
13804 浏览

c++ - 如何在 boost::python 嵌入式 python 代码中导入模块?

我正在使用 boost::python 将一些 python 代码嵌入到应用程序中。我能够正确评估打印语句或其他表达式,但是当我尝试导入模块时,它没有导入并且应用程序正在退出。此外,嵌入式代码中的 globals() 函数调用也会产生运行时错误。

在这里,我尝试使用 boost 导入函数导入 urllib2,这可以正常编译和运行,但是使用以下 exec 语句,它会出错。

或者当我删除 boost 导入功能并从嵌入式代码中进行导入时,它会给出错误。我尝试使用 try: except: block 但这也不起作用。这是因为 C++ 应用程序无法找到 urllib2 py 模块的位置还是什么?有没有办法在尝试导入之前设置模块的路径?

这只是为内部使用而构建的,因此可以接受一些路径的硬编码。

编辑:更多信息:
这就是发生的事情。我尝试了.. catch 并在出现异常时调用 PyErr_Print() ,并且在有模块导入甚至函数调用时一直将其视为错误。错误信息:

谁能想到任何理由?

0 投票
1 回答
5822 浏览

python - 如何在 Python 中为包装的 C++ 函数传递指向数组的指针

我是 C++/Python 混合语言编程的新手,对 Python/C API 不太了解。我刚开始使用 Boost.Python 为 Python 包装一个 C++ 库。我坚持包装一个将指向数组的指针作为参数的函数。以下 (2nd ctor) 是它在 C++ 中的原型。

通过在 boost::python 中这样包装它,我做得对吗?

请注意,它已成功编译和链接,但我不知道如何在 Python 中调用它。我的天真尝试如下失败。

我的第二个问题是我还需要包装析构函数吗?请说明在某些情况下是否需要这样做,但并非总是如此。

0 投票
2 回答
1409 浏览

c++ - Boost.Python 和 Python 异常

如何让 boost.python 代码知道 python 异常?

例如,

如果我将它导出到 python,它不会在 Ctrl-C 上中断。我认为其他例外不会以这种方式起作用。

这是一个玩具示例。我真正的问题是我有一个可能需要数小时才能计算的 C 函数。我想打断它,例如,如果它需要更多的时间。但我不想杀死python实例,在函数内被调用。

提前致谢。

0 投票
6 回答
2265 浏览

c++ - 如何在 Boost::Python 中向 C++ 类型添加自定义隐式转换?

在我的 C++ 代码中,我有一个 Foo 类,其中有许多将 Bar 类型变量作为参数的方法:

Bar 有许多构造函数,它们从许多常见类型(例如 int、std::string、float 等)创建新对象:

我用 Boost::Python 包装了它,现在我可以直接使用 Python 文字调用我的 Foo 方法,因为它们被隐式转换为 Bar 对象。

现在,我还希望能够使用其他 Python 类型,例如元组,如下所示:

但我不想触碰最初的 Bar 定义,也不想用 Boost::Python 的东西污染我的 C++ 库。我想在我的绑定代码中编写一个包装函数,但我不明白这是否可行,以及这样做的正确方法是什么。

换句话说:我可以注册一个工厂函数以用作 Python 中的自动转换吗?

0 投票
1 回答
2106 浏览

c++ - 如何使用 Boost.Python 重载运算符

我正在尝试使用 Boost.Python 重载 C++ 类的运算符。

据此我正在以正确的方式进行操作......但我有一堆编译器错误。

这是我试图查明问题的一个简单示例:

以下是编译器错误:

我在这里错过了什么吗?

谢谢

0 投票
2 回答
3887 浏览

python - 从 boost python 返回一个 c++ 数组(指针)

我目前正在为我正在开发的 c++ 库编写 python 绑定。该库读取一些二进制文件格式,读取速度非常重要。在优化库以提高速度时,我注意到 std::vector (在我正在阅读的实例中使用)占用了大量的处理时间,所以我用 new[] 分配的简单数组替换了那些(无论这是好的/明智的做法可能是另一个问题)。

现在我遇到了如何让 python 访问这些数组的问题。boost::python 中似乎没有内置解决方案(我至少找不到一个)。

示例代码来说明情况:

我想我可以使用一个包装函数,只要 python 想要访问它们,就可以从数组中构造一个 boost::python::list 。由于我对 boost::python 还很陌生,所以我想在开始破解之前,我应该询问是否有任何好的、标准或内置的解决方案来解决这个问题。

那么,你会如何推荐使用 boost::python 包装数组呢Instancedata

0 投票
5 回答
20770 浏览

c++ - 如何获取 Python 异常文本

我想在我的 C++ 应用程序中嵌入 python。我正在使用 Boost 库 - 很棒的工具。但我有一个问题。

如果 python 函数抛出异常,我想捕获它并在我的应用程序中打印错误,或者获取一些详细信息,例如导致错误的 python 脚本中的行号。

我该怎么做?我在 Python API 或 Boost 中找不到任何函数来获取详细的异常信息。

PyErr_Print() 只是将错误文本打印到 stderr 并清除错误,因此无法解决