问题标签 [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.
python - PyO3-Maturin 发布命令不会将自述文件和许可证上传到 PyPi
我建立了一个 rust-python 项目并使用 Maturin 将其发布到 PyPi。该项目的结构类似于 maturin 自述文件中的示例,并添加了许可证文件:
当我使用maturin publish
自述文件时,许可证文件不会上传到 pypi。
我还想在 PyPi 上发布自述文件和许可证文件,但找不到有关如何使用 maturin 执行此操作的任何信息,或者只是将丢失的文件单独添加到 PyPi...
我将不胜感激有关如何将自述文件和许可证文件获取到 PyPi 的任何信息
python - 返回对 PyO3 中成员字段的引用
假设我有一个像这样的 Rust 结构
我希望能够编写X
通过访问的python代码Y
在 PyO3 中实现它的最佳方法是什么?目前我做了两个包装类
但是,这需要clone()
. 我宁愿返回参考。当然我知道如果X
是 a pyclass
,那么我可以很容易地回到PyRef
它。但问题是它X
来自Y
一个 Rust 库,我不能傻傻地添加#[pyclass]
到它们中。
python - 复制的套接字没有被腌制
我正在尝试复制一个套接字并将其发送到 Python 中的另一个进程。
套接字是在 rust 中创建的,并通过 PyO3 作为 Python 对象共享。
这是共享套接字代码
下面是 python 代码,我试图在其中启动两个不同的进程。我尝试使用本机多进程库、多进程库的分支甚至是 pathos 库。
但是,我仍然收到无法序列化对象的错误。
我收到以下错误:
在概念上这里的某个地方出错了吗?解决方案是什么?
PS:
我正在尝试在此过程中启动服务器运行时。
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
rust - 如何将 PyO3 接口改进为通用结构?
我创建了一个 Rust 库,用于从 Python 中进行一些繁重的处理。它工作得相当好,但我留下的代码感觉臃肿且难以维护,所以我认为必须有更好的方法。我使用各种特征和枚举尝试了一些不同的选项,但很难做出任何真正的改进。我没有做过那么多 Rust,所以我猜测(并希望)我错过了一个好的、干净的解决方案。
rust 包基本上只是一个单一的核心结构,包含一些数据和相当多的实现方法。然后,它被一个 pyclass 结构包装以处理 Python 的接口。核心结构需要是通用的,或者至少最终的 python 类需要能够处理几种不同的数据类型。更复杂的是,我在其他 Rust 项目中使用了核心结构,所以我想将任何与 python 相关的东西排除在核心结构之外。
我最终使用了一系列巨大的宏来创建一些接口结构,一个来处理每种不同的数据类型。我发现这些宏很难使用,但我还没有想出简化或删除它们的方法。因此,如果有人对从这里去哪里有任何想法或提示,那将非常感激。
这是我的代码的一个极其简化的版本:
接口中实现的方法显然远比本例中的复杂和独特,因此泛化接口方法会很困难。
感谢您的任何想法。
rust - 是否可以通过 rust 中的 pyo3 将代数矩阵类型暴露给 python
我能够使用 pyo3 将用 Rust 编写的简单函数公开给 python,但看不到公开复杂的“特征”/矩阵类型的方法。有谁知道这是否可能?
库文件
multithreading - PyO3 - 防止用户提交的代码循环和阻塞服务器线程
我正在用 Rust 编写一个游戏,每个玩家都可以向服务器提交一些 python 脚本,以便自动执行游戏中的各种任务。我计划使用pyo3
从 rust 中运行 python。
但是,如果玩家提交这样的脚本,我会看到一个问题:
现在,当服务器调用函数(使用类似的东西PyAny::call1()
)时,线程将在到达无限循环时挂起。
我的第一个想法是一次pyo3
执行 python 一个语句,因此如果脚本运行超过某个阈值则能够退出,但我认为不pyo3
支持这一点。
我的下一个想法是给每个玩家自己的线程来运行他们自己的脚本,这样如果他们的一个脚本卡住了,它只会影响他们的游戏玩法。但是,当线程陷入无限循环时,我仍然遇到无法杀死线程的问题——如果很多玩家提交了刚刚循环的脚本,很多线程将开始使用大量 CPU 时间。
我所需要的只是以某种方式执行 python 脚本,如果其中一个确实循环,它根本不会影响服务器的性能。
谢谢 :)
rust - 如何让 Cargo 显示导致重建的文件?
我正在使用cargo
,maturin
并pytest
构建一个混合的 Python/Rust 项目。在开发过程中,我经常循环使用以下命令:
似乎 cargo 和 maturin 在没有理由的情况下编译依赖项。经过一些实验,我发现如果我运行
cargo ...
maturin ...
cargo ...
maturin ...
第二次运行cargo
andmaturin
将重新编译依赖项,即使我没有手动更改任何源文件。
我没有一个小例子来重现这个,所以我试图用完整的系统来调试它。为此,我想知道 cargo 和/或 maturin 认为哪些文件已过时。一旦我知道这一点,完整的解决方案可能会很明显。
但是,似乎没有我可以传递的标志给我这些信息。 cargo -vv test ...
产生很多关于它正在编译什么以及如何编译的输出,但不是为什么。 maturin
甚至似乎没有-v
可用的标志。
我找到cargo-outdated
了,但这似乎与依赖版本有关。
我有两个 Rust 包,每个包有 5-10 个直接依赖项和大约 100 个总依赖项。
如何找出导致cargo
/maturin
重建依赖项的文件?
python - 将HashMap的HashMap导出到Python
我有一个用 Rust 编写的文本解析器,并希望使用pyo3
.
解析器返回 a HashMap
within aHashMap
并且 inner 的值HashMap
是 type serde_json::Value
。当我尝试将其作为 a 返回时,PyObject
我收到一个我无法解决的错误。
这是我的问题的一个最小示例:
运行这会导致错误
目标是从 Python 调用这个函数,它返回dict
如下:
编辑:实施的解决方案
(基于@orlp 的回答)
python - 在 Actix Web 套接字中执行 Python 异步函数
我正在尝试在 actix Web 套接字中执行 python 异步函数。
我能够弄清楚如何执行同步功能并将响应发送回网络套接字。但是,我无法对异步函数做同样的事情。
以下是我的方法:
我收到以下错误:
如果您需要我提供更多详细信息,请告诉我。
NEW_APPRROACH
我取得了一些进展并采用了一种新方法,将 python 函数包装在异步函数中。
但是现在,我收到了一个错误,即从未等待过协程