问题标签 [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 从 Rust 加载 Numpy 时出现 _ctypes 扩展的问题
我正在尝试使用 pyO3 使用 Rust 中的 numpy,所有这些都在 conda 环境中。为了让 pyO3 链接,我也使用 conda 安装了 GCC 工具链。
我现在可以做一些简单的事情,比如显示sys.path
。但是,当我尝试导入 numpy 时,如下所示:
发生以下情况:
有趣的是,当我只键入 时python -c "import numpy"
,并没有出现问题。
如果有帮助,我会使用它RUSTFLAGS="-C linker=$CC" cargo +nightly run
来构建和运行代码。
python - Pycharm 无法识别已编译的 .pyd,即使它在脚本运行时有效
我有一个用 pyo3 和 rust 制作的二进制模块。它位于带有导入它的脚本的目录中。该目录被标记为源根目录,所以这不应该是问题。导入下有红色波浪标记,但是当我运行脚本时,它运行良好。
测试.py:
输出为 3,所以它正在工作。如何使 pycharm 表现良好?
rust - How to implement a Rust function that returns a Python object using PY03
From Python, I want to call a Rust function that returns a Python object:
I am not sure how to create this function since the PYO3 guide on class instantiation describes how to instantiate such an object as a PyRef
, however I can't work out how to return such a reference from a pyfunction
.
This is what I am trying:
However, PyRef
does not seem to be a valid return type (compiler says "wrong number of type arguments: expected 1, found 0"), and I don't know how to convert a PyRef
into something that can be returned such as a PyObject
.
python - 如何在 PyO3 中实现 python 运算符
我正在尝试为我的数学库实现一个 rust 中的向量类。
但我不知道如何重载标准运算符(+、-、*、/)
我尝试从 std::ops 实现 Add 特征,但没有成功
我还尝试将__add__
方法添加到 #[pymethods] 块
但仍然无法正常工作。
使用第二种方法,我可以看到该方法存在,但 python 不将其识别为运算符重载
rust - 如何使用 PyO3 在嵌入在 Rust 代码中的 Python 代码中执行地板除法?
我正在尝试在 Rust 中内联 Python 代码,但是当 Python 代码具有用于地板除法的运算符时,它会失败,//
就像它是 Rust 注释一样被忽略。
例如:
37.46
即使它应该打印,它也会打印12.0
(37.46 除以 3 的结果)。
一个可能的解决方案是将这个除法替换为foo = math.floor(37.43 / 3)
,但如果可能的话,我宁愿不必修改 Python 代码。我也担心它可能会影响性能。
有没有办法在使用 PyO3 嵌入 Rust 代码的 Python 代码中使用地板除法运算符(或等效运算符)?
rust - pyo3 的 PyContextProtocol 示例?
在该__enter__
方法中,我想返回一个可在 Rust 和 Python 中访问的对象,以便 Rust 能够更新对象中的值,而 Python 可以读取更新的值。
我想要这样的东西:
但我收到以下错误:
python - 如何使用 pyo3 构建模块层次结构?
尝试使用 pyo3 和此代码构建模块层次结构
代码构建和工作正常,除了当我尝试导入它时,我收到了这个错误
根据我从 python 文档中了解到的情况,如果模块具有__path__
属性,它就是一个包。
我可以用m.add("__path__", vec![""])?;
, 在这import
按预期工作之后添加它,但仅当从带有.so
文件的目录启动 python 时,这是预期的。
问题是我事先不知道__path__
。如何解决这个问题,有没有办法强制 python 设置__path__
?
python - 将 Python 对象传递给 Rust
我正在尝试将 Python 对象传递给 rust 并使用 Python 对象的字段执行操作。
Python:
锈:
从 Python 调用时的预期结果是:
而是在编译时出现 Rust 错误:
有没有办法在 rust 中列出对象字段和方法并操作字段?
python - 使用 PyO3 和 Maturin 进行交叉编译(unixlike to windows)
我想知道是否有人有使用 pyo3 和 maturin 交叉编译到 windows 的经验。
pyo3文档说:
交叉编译 PyO3 模块相对简单,需要一些软件:
目标的工具链。The appropriate options in your Cargo .config for the platform you're targeting and the toolchain you are using. 已经为您的目标编译的 Python 解释器。与上述解释器匹配的标头。
我从这里找到了解释器,但我不明白如何获得 windows python 解释器和库,甚至不明白这意味着什么。
我正在使用maturin构建 python 轮子,它在 OS X 上运行良好,但我不知道如何开始为 windows 进行交叉编译。
谁能帮我吗?
rust - 如何使用 &str 和 String、本机类型和 PyResult 管理内存将值从 Rust 传递到 Python 时?
使用 PyO3,我能够从 Rust 传递&str
和String
类型到 Python:
Python 可以很好地调用这些:
我也可以将它们包装成相同PyResult<&str>
的PyResult<String>
行为。
如果有的话,我需要知道什么以及我需要采取其他步骤来确保这里的内存得到正确处理?如果我不想维护对相同字符串的引用,我是否需要告诉 GIL String
s 以便在必要时释放它们?
如果我需要做更多,我是否也需要对其他方法做同样的事情,比如当我创建一个 Rust 时struct
?