问题标签 [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 回答
111 浏览

rust - 将 PyAny 转换为给定类型的 PyRef,而不需要额外的提取成本?

有效但不是我想要的最小示例:

所以这将引用一个MyStruct生活在python堆中的人并对其进行比较,我的理解是不会发生复制/克隆。

但这不是pythonic的方式。参数other不必是同一类型。TypeError比较方法应该只返回,而不是提高 a NotImplemented

我正在尝试更改签名,以便

  • 我可以接受任意 python 对象。我以为&PyAny会恰到好处
  • 然后我可以检查类型,或尝试转换,但无需将对象从 Python 堆克隆到 Rust 堆。

有什么方法可以将 a&PyAny转换为 a PyRef<MyStruct>吗?

0 投票
1 回答
254 浏览

python - PyO3 将 rust 结构转换为 &PyAny

我有一个结构

我有这个功能

pyclass问题是,我怎样才能从一个期望的函数返回一个标有PyResult<&'py PyAny>

0 投票
1 回答
156 浏览

python - PyO3 在 Rust 中实现 python 可迭代类

找到了如何在 Rust 中实现 PyIterProtocol 的示例。

但我无法弄清楚如何实现一个可迭代但本身不是迭代器的容器类。本质上,我希望能够在 Python 中分解我的对象,例如

0 投票
1 回答
183 浏览

python - PyO3 将 rust 结构转换为 PyObject

我有一个简单的类注释#[pyclass]

现在我有表格的功能

我应该用一些东西来注释我的结构以使其派生pyo3::ToPyObject吗?

0 投票
1 回答
134 浏览

rust - 如何更改一个值,使其在 Rust 中没有静态生命周期

我有以下函数,它使用 PyO3 调用 python 函数并获得结果(在这种情况下,int分配给 a i32):

当我尝试编译时,出现以下错误:

我对 Rust 很陌生,可能正在做一些愚蠢的事情(很可能是 X/Y 问题)。我怎样才能得到一个py.eval与python解释器没有生命周期的价值(这是我假设在这里发生的事情)?

0 投票
1 回答
225 浏览

python - 使用 PyO3 和 rust-cpython 制作的 Rust 库在运行 pytest 时不会导入

在遵循有关编译 Rust 库以进一步从 Python 导入的各种教程(我已经尝试过PyO3rust-cpython)时,我已经能够构建一个简单的库并成功地从我的main.py交互式 Python shell 中导入它。

但是,在尝试测试纯 Python 和我的 Rust 库并对其进行基准测试时,我总是遇到导入错误:

同样,该库从主 python 文件和交互式 shell(如IPython.

我在 macOS Big Sur 上,Python 3.8 使用pyenv. 这是我的Cargo.toml

PyO3从andrust-cpython到相同的结果,其他一切都非常琐碎。

0 投票
0 回答
44 浏览

rust - pyo3 - 获取异步函数的结果

我正在尝试将 rust 异步函数导出到 python。

这就是我想在我的 python 文件中使用的方式。

在 Rust 中,我确实喜欢

但是在这里我得到了这个错误future cannot be sent between threads safely

在这里卡了很长时间,甚至不知道我在做什么..

提前致谢!

0 投票
1 回答
210 浏览

python - 如何使用 PyO3 构建混合 Python Rust 包

我正在寻找有关如何构建 Python 包的信息,该包包含用 Rust 编写的扩展模块,两种语言混合在一起。我正在将 pyO3 用于 FFI,但似乎找不到有关如何执行此操作的示例。具体来说:我的 rust 库公开了一种类型,该类型后来被 python 类包装。只有 python 类应该为以后的用户公开,并且包应该是结构化的,这样它就可以被推送到 PyPI。

例如:

在生锈的一面

在蟒蛇方面

我会感谢任何信息、来源、示例等!

0 投票
0 回答
43 浏览

python - 使用 pyo3 crate 时如何在 Rust 程序中捕获 Python 解释器的标准输出

我正在使用 crate 提供的 Python 解释器的 Rust 绑定pyo3

我有以下代码:

我希望script从我的 Rust 程序中捕获和访问写入 stdout 的所有内容,而不是写入实际的 stdout。

也就是说,在这个例子中,程序实际上不应该 print abc,但它应该将它存储在内存中的某个地方,并交给我一个引用、拥有的字符串或其他东西。

理想情况下,这将通过回调来工作,在创建输出时将它们一个接一个地交给我。

0 投票
1 回答
96 浏览

python - Pyo3绑定对象的静态生命周期注释

我正在尝试使用 Rust 及其 Tokio 运行时创建一个客户端,并使用 and 将其绑定到pyo3python pyo3-asyncio。举一个最小的例子,假设我想要一个Client连接到127.0.0.1:1234并有一个echo方法来处理通过套接字传入的数据的类。我希望该函数返回一个 Python 协程,以便我可以将它与asyncPython 代码库中的函数一起使用。示例用例:

我已经按照文档pyo3-asyncio并找到了这个函数。我写了这个(希望是最小的)片段来重现这个问题:

问题似乎是self,也就是说Client,有一个匿名的生命周期,但预计会有'static一个。编译器说:

有没有办法可以确保客户端的静态生命周期?也许我错误地解决了这个问题?