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

python - PyO3-Maturin 发布命令不会将自述文件和许可证上传到 PyPi

我建立了一个 rust-python 项目并使用 Maturin 将其发布到 PyPi。该项目的结构类似于 maturin 自述文件中的示例,并添加了许可证文件:

当我使用maturin publish自述文件时,许可证文件不会上传到 pypi。

我还想在 PyPi 上发布自述文件和许可证文件,但找不到有关如何使用 maturin 执行此操作的任何信息,或者只是将丢失的文件单独添加到 PyPi...

我将不胜感激有关如何将自述文件和许可证文件获取到 PyPi 的任何信息

0 投票
1 回答
99 浏览

python - 返回对 PyO3 中成员字段的引用

假设我有一个像这样的 Rust 结构

我希望能够编写X通过访问的python代码Y

在 PyO3 中实现它的最佳方法是什么?目前我做了两个包装类

但是,这需要clone(). 我宁愿返回参考。当然我知道如果X是 a pyclass,那么我可以很容易地回到PyRef它。但问题是它X来自Y一个 Rust 库,我不能傻傻地添加#[pyclass]到它们中。

0 投票
1 回答
70 浏览

python - 复制的套接字没有被腌制

我正在尝试复制一个套接字并将其发送到 Python 中的另一个进程。

套接字是在 rust 中创建的,并通过 PyO3 作为 Python 对象共享。

这是共享套接字代码

下面是 python 代码,我试图在其中启动两个不同的进程。我尝试使用本机多进程库、多进程库的分支甚至是 pathos 库。

但是,我仍然收到无法序列化对象的错误。

我收到以下错误:

在概念上这里的某个地方出错了吗?解决方案是什么?

PS:

我正在尝试在此过程中启动服务器运行时。

0 投票
1 回答
120 浏览

python - 如何在 pyproject.toml 文件中配置 os 特定的依赖项 [Maturin]

我有一个使用 Maturin(https://github.com/PyO3/maturin)构建的 rust 和 python 项目。它说它需要一个pyproject.toml用于 python 依赖项的文件。

我有一个依赖项uvloop,它在 windows 和 arm 设备上不受支持。我添加了有条件地导入这些包的代码。但是,我不知道如何有条件地安装这些软件包。现在,这些软件包默认安装在每个操作系统上。

这是 pyproject.toml 文件。

还有github链接,jic大家有兴趣:https ://github.com/sansyrox/robyn/pull/94/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711R21

0 投票
0 回答
68 浏览

rust - 如何将 PyO3 接口改进为通用结构?

我创建了一个 Rust 库,用于从 Python 中进行一些繁重的处理。它工作得相当好,但我留下的代码感觉臃肿且难以维护,所以我认为必须有更好的方法。我使用各种特征和枚举尝试了一些不同的选项,但很难做出任何真正的改进。我没有做过那么多 Rust,所以我猜测(并希望)我错过了一个好的、干净的解决方案。

rust 包基本上只是一个单一的核心结构,包含一些数据和相当多的实现方法。然后,它被一个 pyclass 结构包装以处理 Python 的接口。核心结构需要是通用的,或者至少最终的 python 类需要能够处理几种不同的数据类型。更复杂的是,我在其他 Rust 项目中使用了核心结构,所以我想将任何与 python 相关的东西排除在核心结构之外。

我最终使用了一系列巨大的宏来创建一些接口结构,一个来处理每种不同的数据类型。我发现这些宏很难使用,但我还没有想出简化或删除它们的方法。因此,如果有人对从这里去哪里有任何想法或提示,那将非常感激。

这是我的代码的一个极其简化的版本:

接口中实现的方法显然远比本例中的复杂和独特,因此泛化接口方法会很困难。

感谢您的任何想法。

0 投票
0 回答
70 浏览

rust - 是否可以通过 rust 中的 pyo3 将代数矩阵类型暴露给 python

我能够使用 pyo3 将用 Rust 编写的简单函数公开给 python,但看不到公开复杂的“特征”/矩阵类型的方法。有谁知道这是否可能?

库文件

0 投票
1 回答
45 浏览

multithreading - PyO3 - 防止用户提交的代码循环和阻塞服务器线程

我正在用 Rust 编写一个游戏,每个玩家都可以向服务器提交一些 python 脚本,以便自动执行游戏中的各种任务。我计划使用pyo3从 rust 中运行 python。

但是,如果玩家提交这样的脚本,我会看到一个问题:

现在,当服务器调用函数(使用类似的东西PyAny::call1())时,线程将在到达无限循环时挂起。

我的第一个想法是一次pyo3执行 python 一个语句,因此如果脚本运行超过某个阈值则能够退出,但我认为不pyo3支持这一点。

我的下一个想法是给每个玩家自己的线程来运行他们自己的脚本,这样如果他们的一个脚本卡住了,它只会影响他们的游戏玩法。但是,当线程陷入无限循环时,我仍然遇到无法杀死线程的问题——如果很多玩家提交了刚刚循环的脚本,很多线程将开始使用大量 CPU 时间。

我所需要的只是以某种方式执行 python 脚本,如果其中一个确实循环,它根本不会影响服务器的性能。

谢谢 :)

0 投票
2 回答
127 浏览

rust - 如何让 Cargo 显示导致重建的文件?

我正在使用cargo,maturinpytest构建一个混合的 Python/Rust 项目。在开发过程中,我经常循环使用以下命令:

似乎 cargo 和 maturin 在没有理由的情况下编译依赖项。经过一些实验,我发现如果我运行

  • cargo ...
  • maturin ...
  • cargo ...
  • maturin ...

第二次运行cargoandmaturin将重新编译依赖项,即使我没有手动更改任何源文件。

我没有一个小例子来重现这个,所以我试图用完整的系统来调试它。为此,我想知道 cargo 和/或 maturin 认为哪些文件已过时。一旦我知道这一点,完整的解决方案可能会很明显。

但是,似乎没有我可以传递的标志给我这些信息。 cargo -vv test ...产生很多关于它正在编译什么以及如何编译的输出,但不是为什么。 maturin甚至似乎没有-v可用的标志。

我找到cargo-outdated了,但这似乎与依赖版本有关。

我有两个 Rust 包,每个包有 5-10 个直接依赖项和大约 100 个总依赖项。

如何找出导致cargo/maturin重建依赖项的文件?

0 投票
1 回答
130 浏览

python - 将HashMap的HashMap导出到Python

我有一个用 Rust 编写的文本解析器,并希望使用pyo3.

解析器返回 a HashMapwithin aHashMap并且 inner 的值HashMap是 type serde_json::Value。当我尝试将其作为 a 返回时,PyObject我收到一个我无法解决的错误。

这是我的问题的一个最小示例:

运行这会导致错误

目标是从 Python 调用这个函数,它返回dict如下:


编辑:实施的解决方案

(基于@orlp 的回答)

0 投票
0 回答
58 浏览

python - 在 Actix Web 套接字中执行 Python 异步函数

我正在尝试在 actix Web 套接字中执行 python 异步函数。

我能够弄清楚如何执行同步功能并将响应发送回网络套接字。但是,我无法对异步函数做同样的事情。

以下是我的方法:

我收到以下错误:

如果您需要我提供更多详细信息,请告诉我。

NEW_APPRROACH

我取得了一些进展并采用了一种新方法,将 python 函数包装在异步函数中。

但是现在,我收到了一个错误,即从未等待过协程