问题标签 [pyo3]

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

python - 将 Python 字典列表传递给 Rust 函数 PyO3

我正在尝试在 rust 中编写一个函数,我可以从 python 调用该函数,该函数接受一个字典列表(想想 pandas 类似数据框的数据)并从 rust 访问这些键和值。我怎样才能做到这一点?我正在使用pyo3. 我是否需要定义一个与 python dict 输入的键、值对匹配的结构?

作为一个示例函数,我试图传入一个字典列表并将与键对应的值相加key为一个总数。我的 python 字典列表中的每个字典都有key对应于 int 的键。

0 投票
1 回答
537 浏览

rust - PyO3 - 为枚举派生 FromPyObject

我正在尝试使用 PyO3(版本:0.13.2)从 Rust 构建 Python 包。现在我被困在试图让转换为枚举工作。我有一个像这样的简单枚举:

我根据文档添加#[derive(FromPyObject)]但是,我收到以下错误:

错误:无法为空结构和变体派生 FromPyObject --> src/main.rs:3:10 | 3 | #[派生(FromPyObject)] |
^^^^^^^^^^^^^ | = 注意:此错误源自派生宏(在 Nightly 构建中,使用 -Z 宏回溯运行以获取更多信息)

在示例中,所有枚举值都具有与之关联的类型。如果这是错误的根源,有什么办法可以解决我的枚举吗?

谢谢你的帮助。

解决方案

这是我最终得到的解决方案。我是 Rust 新手,所以使用它需要您自担风险。感谢这个问题中的 Ahmed Mehrez为宏提供了基础。

您将需要以下依赖项。

该宏为枚举实现 IntoPy 和 FromPyObject。它转换为/从 int 转换。另外,您现在可以迭代枚举!

在 Python 中,您需要重新定义枚举并将值与 Rust 模块一起使用。

0 投票
1 回答
383 浏览

python - Pyo3:`&Py 没有实现特征`PyClass``

我正在学习 rust 并尝试使用pyo3maturin制作一个非常简单的 python 模块。不过,我在 rust 代码上遇到了问题,

货运.toml

src/lib.rs

镜头/初始化.py

构建输出

我看到问题出在#[pyfunction]. length当我有一个仅适用于字符串并且函数会返回的更简单版本时,一切都运行良好,PyResult<()>我最终只会返回Ok(()),但现在我不确定如何让这个函数引发 python 错误,如果不支持类型。

0 投票
1 回答
79 浏览

rust - 如何从以前的宏生成代码生成宏?

为了创建一个使用泛型类型的结构的 pyo3 驱动的 Python 类,我想使用包装器来生成不需要为每个特定类型执行此操作所需的代码。

我创建了一个生成代码的宏,但我需要将宏生成的函数注册为 Python 模块的函数。

一种方法是跟踪宏中使用的标识以使用它们并wrap_pyfunction使用另一个宏生成,但我找不到任何相关的东西。

(当然,任何其他生成代码的解决方案都会受到热烈欢迎)

我现在拥有的(简化的)代码:

0 投票
1 回答
579 浏览

asynchronous - Rust 显示预期的特征对象`dyn Future`,在将函数作为参数传递时发现不透明类型

我正在尝试创建一个模块,我需要在其中将异步函数作为参数传递。我已经通过了元素,但我无法从错误消息中推断出我应该做什么。它告诉我类型推断存在一些不匹配。

这是我收到的错误消息cargo check

请让我知道应该在此处进行哪些更改。提前致谢。

0 投票
1 回答
314 浏览

python - 如何在 Rust PyO3 中将异步函数作为参数传递

当我们编写 vanilla rust 并且必须将异步函数作为参数传递给另一个函数时,我们执行以下操作:

但是,当我#![pyfunction]对获得异步python函数做同样的事情时,我得到了一个错误。

在阅读 PyO3 的文档时,我发现我可以将其包含PyAny为参数。

但是,在实现以下功能时:

我收到以下错误。

如何在我的代码中实现这一点。如果这是不可能的,我会理解,如果是这种情况,我会要求您向我推荐一个替代方案。

更新:

我找到了另一种方法,我创建一个空结构并以下列方式调用该方法。但如果我能在不创建空结构的情况下通过,我将不胜感激。

但是在将异步函数作为参数传递时会出现错误

0 投票
0 回答
70 浏览

python - Rust-PyO3 在从 python 调用异步函数后创建死锁/变得无响应

以上是我在项目中使用的 python 和 rust 文件。我正在尝试将异步函数作为参数传递给我的 rust lib,然后使用 tokio 运行时调用它。当我执行我的 python 文件时,我遇到了死锁,因为甚至^C没有退出它。

请让我知道如何正确等待 rust 中的 python 函数。

提前致谢。

0 投票
1 回答
207 浏览

python - 如何从 Rust 调用 Python 异步函数?

我已经阅读了这个答案(How to call Rust async method from Python?),而我想做的恰恰相反。

我想调用一个 Python 异步函数并在 tokio 的运行时等待它。可能吗?

我已经尝试了一些,但我在输出中遇到了错误。

这就是我的 python 文件的样子:

这就是我的 lib.rs 的样子:

我收到以下错误:

我显然正在传递一个异步函数并将其转换为未来。我无法弄清楚我哪里出错了。我已经多次阅读pyo3-async的文档,但我仍然无法弄清楚。我真的很感激一些帮助。

提前致谢。

0 投票
1 回答
175 浏览

python - 如何在 pyo3 中编写课程?

我正在使用最新版本的 pyo3(主分支),目前尚不清楚如何将一个类的实例存储Store在另一个类中,例如下面的示例。例如,下面的代码由两个类组成,Store并且MyClass会在一定程度上起作用。

但是,当这些类在以下示例中的 Python 中使用时,断言会因为Store被克隆而失败。

如何修改 Rust 代码,使其保持对同一实例的引用Store?我认为它可能需要使用PyCell,但我不确定。

谢谢!

0 投票
0 回答
107 浏览

python - 无法将 pip 模块与 PyO3 一起使用

最近我一直在做一个涉及生成 docx 文件的项目。由于 Rust 的 docx 支持还很不成熟,我决定python-docx通过 PyO3 使用 Python 的模块。

到目前为止,这是我的代码:

不幸的是,我遇到了两个非常严重的错误。

错误 #1:

错误 #2:

如何解决这些错误?

注意:是的,我已确定python-docx已安装。它位于/home/<my username>/.local/lib/python3.8/site-packages