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

python - 为了使用 Python 从 Rust 程序内部调用函数,最佳实践是什么?

我想实现一个由 Python UI 和一些 Rust 数据存储和函数组成的系统。用户执行 python 代码,然后在子进程中执行 Rust 程序。我希望 Rust 程序在后台运行,等待与 Python UI 交换变量或函数调用(例如每次按下按钮时)。

我的障碍是:

  1. 我试图制作一个简单的 Rust FFI 库,可以使用 Python 中的 ctypes 调用,但我不知道这个库如何能够与在后台运行的已编译 rust 程序进行通信。

  2. 另一种方法是使用 PyO3 使用 rust 制作 python 模块。但是我再次无法理解这将如何与 rust 程序合作交换数据

0 投票
2 回答
502 浏览

python - actix Actor 如何拥有 PyO3 Python?

我正在尝试创建具有 PyO3 Python 解释器和 Py 对象的 Actix Actor。

问题是创建python解释器actor的正确方法是什么?

我认为由 Actor trait 定义的静态引起的错误。 https://docs.rs/actix/0.7.4/actix/trait.Actor.html

有没有 Actor 或 Context 的方式让对象需要生命参数?

rust 版本:nightly-2018-09-04,actix 版本:0.7.4

这是当前代码。

此代码无法编译此错误。

0 投票
2 回答
1325 浏览

python - 编写一个等效于 Python 函数的 pyo3 函数,该函数返回其输入对象

我正在为我的库编写一个 Rust 后端,我需要在以下函数中实现等价的功能pyo3

这应该返回与输入相同的对象,并且获取返回值的函数应该持有对输入的新引用。如果我在 C API 中写这个,我会写成:

PyO3PyObject中,我发现导航, PyObjectRef, &PyObject, Py<PyObject>,之间的差异非常令人困惑Py<&PyObject>

这个函数最幼稚的版本是:

除其他外,的生命周期x和返回值不一样,加上我看不到pyo3增加引用计数的机会x,事实上编译器似乎同意我的观点:

我可能有一种方法可以使用参数手动增加引用计数_py并使用生命周期注释来使编译器满意,但我的印象是pyo3打算使用对象生命周期来管理引用计数本身。

编写此函数的正确方法是什么?我应该尝试将其包装在Py容器中吗?

0 投票
1 回答
357 浏览

rust - 如何将 PyObjectRef 转换为 PyString?

我有一个接受 Python 列表的函数。我希望列表由字符串组成。我如何提取它们?

软件版本:Python 3.7、nightly Rust 1.33.0、pyo3 0.5.2。

0 投票
1 回答
229 浏览

rust - 使用 kwargs 从 Python Rust 函数调用失败

我很难去kwargs上班。我明白,就像#[args(args="*")]是为了args#[args(kwargs="**")]是为了kwargs

但是,当我打包以下使用pyo3-pack并尝试test1使用任何参数调用时,我得到了错误MyClass.test1()() takes at most 0 argument (1 given)

我究竟做错了什么?

0 投票
3 回答
1265 浏览

python - PyO3 中自定义结构的向量

我是 Rust 和 PyO3(来自 Python)的新手,所以这对于更有经验的人来说可能是显而易见的。

我在 PyO3 中声明了一个 pyclass 结构。

然后我Block在一个 rust 函数中使用,它接受一个向量Block并输出一个 int 向量(下面的签名)

当我使用编译时nightly-x86_64-apple-darwin,出现以下错误:

我该如何解决这个问题?

编辑: Caio 是对的。我在追溯错误时犯了一个错误。以前我写过

然后我在一个 rust 函数中使用 Block,该函数接受一个 int 向量并输出一个 Block 向量(下面的签名)

但实际的违规功能是:

我已经更新了问题以使其更清楚。

0 投票
0 回答
42 浏览

python - 测试用 X 语言编写的 Python 扩展的推荐方法

我有一些class A是我使用 PyO3 在 Rust 中编写的 Python 扩展的一部分。class A被导入并按原样使用,以及作为更大 Python 包的一部分在我的 Python 代码中被子类化。它并不意味着是一个独立的 Rust 库。

我想进行测试,class A但我不确定是否应该用 Rust、Python 或两者都编写测试。

测试用另一种语言(如 Rust)编写的 Python 扩展的推荐方法是什么?

0 投票
1 回答
152 浏览

python - PyO3中对象向量的垃圾收集

我有 2 个 pyclassBlockBlockGroup.

我是 PyO3 的新手,我已经阅读了有关垃圾收集的文档,但我并没有完全理解它。

如果您的类型拥有对其他 python 对象的引用,则需要与 Python 的垃圾收集器集成,以便 GC 知道这些引用。

鉴于BlockGroup拥有具体Block对象,我是否需要实现自定义垃圾收集?

0 投票
1 回答
1280 浏览

python - 如何使用 pyo3 从 Python 文件中调用 Rust 函数?

我正在开发一个视频游戏,我需要texture:"", coords:"", text:"", action:""从 Python 文件中设置 Rust 对象(例如,添加一个带有 的按钮)。

我正在使用 pyo3 crate 来链接 Python 和 Rust。我成功地从我的 Rust 代码调用 Python 脚本,但我找不到如何从 Python 文件调用 Rust 函数。

执行我的 Python 脚本的 Rust 代码:

我想从我的 Python 脚本中调用的 Rust 函数:

我的 Python 脚本:

我得到这个输出:

0 投票
1 回答
606 浏览

rust - 如何为我的 rust 结构实现特征 FromPyObject

考虑一个通过 pyo3 暴露给 python 的简单 rust 类

现在有一个函数应该以这种方式用python中的两个这样的结构调用:

因此一个定义

现在编译器声称PyMyStruct应该实现 trait FromPyObject

但我不知道如何PyMyStructPyAny...检索实例、指针或其他任何东西。有人可以帮我吗?