问题标签 [py++]

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

c++ - Python 非平凡的 C++ 扩展

我有相当大的 C++ 库和几个支持它的子库,我需要把整个东西变成一个 python 扩展。我使用 distutils 是因为它需要跨平台,但如果有更好的工具,我愿意接受建议。

有没有办法让 distutils 首先编译子库,然后在从主库创建扩展时链接它们?

0 投票
3 回答
6515 浏览

c++ - 使用 Py++ 生成的代码作为 Python 扩展

我需要包装现有的 C++ 库以在 Python 中使用。在阅读了有关选择合适的方法来包装 C++ 以在 Python 中使用的答案后,我决定使用 Py++。

我使用教程文件浏览了Py++的教程,并在 中获得了预期的输出generated.cpp,但我还没有弄清楚要做什么才能实际使用生成的代码作为我可以在 Python 中导入的扩展。我确定我现在必须编译代码,但是用什么?我应该使用bjam吗?

0 投票
3 回答
1197 浏览

c++ - 从 Python 调用 IB API

IB = 盈透证券

似乎有两个主要选择

  1. 痛饮
  2. Boost.Python + Py++

我在一定程度上了解使用这两种方法的相对优缺点。但是几乎所有的讨论(在 SO 中)都在讨论这些工具中的哪一个更适合复杂的任务。我想问的是,我应该使用这两个中的哪一个来将一些数据传递给然后调用 API 的 c++ 例程?

我想我只是在问学习曲线!

0 投票
1 回答
608 浏览

python - Python 扩展(Boost.Python & Py++)和 dlopen 混淆

我在 Windows 和 Linux 下使用 Py++/Boost.Python 包装一个 C++ 项目。Windows 中的一切都运行良好,但我对 Linux 中的行为有点困惑。C++ 项目内置于一个名为 libsimif 的共享库中,但我想将其拆分为 3 个单独的扩展模块。为简单起见,我只讨论其中的两个,因为第三个的行为是相同的。第一个称为存储,包含数据结构的定义。它不依赖于其他两个扩展模块中定义的任何内容。第二个模块,控制,使用存储中定义的数据结构。在 C++ 方面,用于存储和控制的头文件和源文件位于完全不同的目录中。我尝试了许多不同的配置来构建扩展,但保持一致的一件事是,对于存储,我只为存储目录中包含的头文件生成 Py++ 包装器,并且只在该目录中构建源文件以及 Py++ 生成的源代码。控制扩展同上。

我正在使用的当前配置将 libsimif 作为库传递给 distutils.Extension 构造函数。然后在启动 Python 之前,我需要确保在 LD_LIBRARY_PATH 中找到 libsimif。然后我可以启动 Python 并导入任一模块(或从它们),一切都按预期工作。以下是此工作配置的一些示例输出:

如您所见,两个模块都有自己的共享库和独特的符号集。现在这就是我感到困惑的原因。在 Linux 中,我们总是将 dlopen 标志设置为包括 RTLD_NOW 和 RTLD_GLOBAL。如果我这样做,会发生以下情况:

所以,这里的存储导入正常,但控制抱怨一堆重复注册。然后在检查模块时,控制是完全错误的。即使文件报告了正确的共享库,它也尝试导入存储两次。也许并不奇怪,如果我在存储之前更改导入顺序和导入控制,会发生以下情况:

类似的行为,但现在存储导入是 FUBAR。有谁明白这里发生了什么?

我在用着:

  • x64 RHEL6 上的 x64 Python 2.6.6。海合会版本 4.4.6
  • x64 RHEL5 上的 x64 Python 2.6.5。海合会版本 4.1.2
0 投票
1 回答
517 浏览

c++ - 在 boost.python/pyplusplus 中包装 int 指针成员变量

如果我使用的是 boost.python 或 pyplusplus,我该如何包装一个 int 指针,或者任何作为类成员变量的指针?

例如,我将如何包装x以下类:

0 投票
1 回答
410 浏览

python - 使用 Boost.Python 包装和传递 HWND

我为 C++ 遗留类创建了一个 Boost.Python 包装器(使用 Py++),该类在其构造函数中采用 HWND 窗口句柄。但是,当我尝试使用它时将模块导出到 python 后,我收到类型不匹配错误。

这是我要包装的 C++ 类:

Py++ 输出:

生成的包装器:

在 python 中,我得到不匹配错误:

如何纠正这个问题,以便能够将 Python 中的窗口句柄(来自 win32gui)传递给 C++ 类,并与之交互?

环境:Visual Studio 2008、Boost 1.44、gcc-xml 0.9.0、py++ 1.0.0、pygccxml 1.1.0

0 投票
1 回答
1158 浏览

python - Boost.Python:在 Python 中填充传入的缓冲区

我想知道是否可以在 Python 中填充缓冲区(具有以下条件),如果可以,如何?

我有一个 C++ 缓冲区,我需要填写 Python。缓冲区的地址是通过GetAddress返回指向缓冲区地址的void 指针的方法获得的。

使用 Py++,我可以生成 Boost.Python 包装器以将类导出到 Python,如下所示:

在 Python 中,GetAddress 的输出是指向内存地址的 void *:

问题是 Python 不允许我对 void * 地址对象做任何事情。如果我尝试访问缓冲区中的第二个元素,则以下操作均无效:

环境:Visual Studio 2008、Boost 1.44、gcc-xml 0.9.0、py++ 1.0.0、pygccxml 1.1.0、Python 2.6.6

0 投票
1 回答
150 浏览

c++ - 如何使用 boost::python 从 Python 类型中提取包装的 C++ 类型?

我已经使用 Py++ 包装了一个 C++ 类,并且在 Python 中一切正常。我可以实例化 c++ 类、调用方法等。

我现在正在尝试将一些 Python 嵌入到 C++ 应用程序中。这在大多数情况下也可以正常工作。我可以调用 Python 模块上的函数、获取返回值等。

我正在调用的 python 代码返回我包装的类之一:

我从 C++ 调用这个函数,如下所示:

问题是提取器从未实际提取/转换 PyObject* 为 MyClass(即 extractor.check() 始终为假)。

根据文档,这是提取包装 C++ 类的正确方法。

我尝试从 Python 函数返回基本数据类型(ints/floats/dicts),并且它们都被正确提取。

有什么我想念的吗?有没有另一种方法来获取数据并转换为 MyClass?

0 投票
0 回答
312 浏览

python - 如何将 python 对象从 C++ 库转换为 JSON?

我使用 boost.python 和 py++ 创建了一个共享库。我可以从库中定义的类型实例化对象。我想通过 json 对这些对象进行编码/解码。我使用jsonpickle模块。但是,它不编码属性。我做了一些研究。最有可能出现问题是因为编码对象__dict__是空的。

共享库中的示例类:

这是python包装器:

来自python的代码片段:

并且,输出:

请注意,json 输出中没有xor y

有什么建议吗?

谢谢。

0 投票
1 回答
82 浏览

python - p++ 编译和设置中的 Python 语法错误

我正在尝试将 py++ 移植到最新版本的 python,但我遇到了它抱怨的以下代码。我是 python 新手。任何帮助都非常感谢,并提前感谢。

错误:

代码如下: