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

python - 使用 pyo3 的 Python 的 Rust 绑定

我正在尝试为 Python 生成 Rust 绑定。这是一个简单的例子:

如何为通用 Rust 类型生成绑定?

0 投票
1 回答
31 浏览

python - 将使用 Rust 制作的 Python 库发布到 pypi

这可能吗?
经过一番研究,似乎可以使用库 setuptools-rust 来轻松分发,但看起来用户也需要这个库 setuptools-rust。
没有 setuptools-rust 有什么方法可以使安装工作吗?

0 投票
0 回答
29 浏览

python - 如何使用pyo3将python变量从python文件返回到rust文件

这个论坛上的所有其他问题都告诉你如何使用 rust 在 python 中做一些事情,但我想做相反的事情。

我的 main.py 脚本中有一个函数可以读取用户的输入并将其存储。我想将该信息传递给一个 rust 文件,然后该文件将作为占位符打印此字符串。这是我的python代码:

我想使用callback()in rust 的输出。我该怎么做呢?

0 投票
0 回答
146 浏览

python - PyO3 在 M1 上找不到 Rust 编译器,尽管安装了 cargo / rustc / rustup 并且在路径上

我正在尝试让 PyO3 在我的 Mac M1 mini 上工作。如果我按照步骤开始使用 PyO3:

我得到“rustc ...未安装或不在PATH中”:

我看到这个错误在 PyO3 问题中出现了很多,但通常通过安装 rustup 来解决。但是我已经安装了 rustup 并且在路径上:

(再次添加到 PATH 以确保。)我也尝试了 x86 工具链,结果相同。Cargo build 在 maturin 生成的string_sumrust 代码上也运行良好:

我的 M1 设置、自制设置、rust 设置、python 设置或其他我错过的东西是不是很奇怪?

更多信息:

我也尝试过使用setuptools-rust类似的效果,既直接调用 setup.py 也使用pip install ..

0 投票
1 回答
56 浏览

python - 如何用 NDArray 输入和输出用 PyO3 包装函数?

我想包装一个函数,该函数采用一维 NDArray (rust-numpy) 和一个 usize 作为参数,并使用 PyO3 返回一个一维数组以从 python 调用代码。不幸的是,我找不到一个很好的例子来说明如何处理 PyO3 中的数组。这是我到目前为止的代码:

我添加了装饰器和模块包装功能。现在我收到此错误:

这是我的 cargo.toml:

有人可以告诉我如何实际修改 SMA 函数以与 PyO3 一起使用吗?谢谢!

0 投票
0 回答
39 浏览

rust - 如何在 Rust 中迭代 pyo3 PyObject?

我有一个预先导入的模块,我正在使用 python gil 调用一个方法,如下所示。

这将返回 rust 对象 PyObject,但返回的是 python list。我想遍历这个列表以将内部转换成我可以在 Rust 中使用的东西(它是一个 Numpy 数组的 Python 列表,我正在使用 numpy/ndarray 板条箱)。

我对如何迭代这个有点困惑。如果我尝试cast_asa PyList,我会收到警告:UnsafeCell<PyObject> cannot be shared between threads safely. 它似乎extract也不起作用。

如何迭代这个 PyObject?谢谢。

编辑:根据要求添加更多详细信息

List[numpy.ndarray]如果您使用的是 python Typing 系统,则python 的返回值是 a 。由于每个 numpy 数组的长度可能不同,我不能将其全部转换为 python 中的 numpy 数组并通过它。示例输出如下:

我在 Rust 中尝试过的内容:

  • let pylist = res.cast_as::<PyList>(py)?;

    编译失败:UnsafeCell<PyObject> cannot be shared between threads safely

  • let pylist = res.extract::<PyList>(py)?;

    编译失败:the trait 'PyClass' is not implemented for 'PyList'。请注意我use pyo3::prelude::*;在顶部。

  • let pyany = res.extract::<Vec<PyArray1<f64>>>(py)?;

    编译失败:the trait bound 'Vec<PyArray<f64, Dim<[usize; 1]>>>: pyo3::FromPyObject<'_>' is not satisfied。这个 PyArray 来自numpy板条箱。

0 投票
0 回答
23 浏览

python - Rust Pyo3 绑定:如何重用 python 方法

我有一个 Rust 类struct A<X>{...},我想创建几个 Python 类,每个类都有不同的X

所有这些类实现的许多方法看起来都是一样的。我怎么能重用所有这些代码

我想避免使用一个巨大的宏。

0 投票
1 回答
30 浏览

python - 如何使用 pyo3 将 Rust 函数作为回调传递给 Python

我正在使用 Pyo3 从 Python 调用 Rust 函数,反之亦然。

我正在努力实现以下目标:

  • Python 调用rust_function_1

  • Rust 函数rust_function_1调用 Python 函数python_function,将 Rust 函数rust_function_2作为回调参数传递

  • Python 函数python_function调用回调,在本例中为 Rust 函数rust_function_2

我不知道如何rust_function_2作为回调参数传递给python_function.

我有以下 Python 代码:

我有以下非编译 Rust 代码:

错误信息是: