4 个版本
0.1.3 | 2023 年 2 月 21 日 |
---|---|
0.1.2 | 2022 年 7 月 6 日 |
0.1.1 | 2021 年 10 月 7 日 |
0.1.0 | 2021 年 5 月 3 日 |
#319 在 Cargo 插件 中
每月 27 次下载
8KB
167 行
cargo-single-pyo3 
通过 pyo3 从单个 Rust 文件构建 Python 模块的实用工具。受 cargo-single 启发。
安装
cargo install cargo-single-pyo3
示例
首先,创建一个包含 pyo3 模块的单个 Rust 文件。在文件顶部添加任何依赖项作为双斜杠注释。例如,如果您创建 foo.rs
并包含以下内容:
// rand = "*"
use pyo3::prelude::*;
use pyo3::wrap_pyfunction;
#[pyfunction]
fn sum_as_string(a: usize, b: usize) -> PyResult<String> {
// using rand to demonstrate library support
let c = rand::thread_rng().gen_range(0 ..= 1);
Ok((a + b + c).to_string())
}
#[pymodule]
fn foo(py: Python, m: &PyModule) -> PyResult<()> {
m.add_function(wrap_pyfunction!(sum_as_string, m)?)?;
Ok(())
}
然后运行
cargo single-pyo3 foo.rs
这将生成一个 foo.so
文件,然后您可以导入它
$ python3
>>> import foo
>>> foo.sum_as_string(1, 2)
'3'
>>> foo.sum_as_string(2, 2)
'5'
使用说明
模块名称: 文件名是模块的名称,例如 foo.rs
生成 foo.so
。 #[pymodule] 函数的名称必须相同。
构建过程: 工具在您的临时目录中创建与模块名称关联的 Cargo 项目,例如 /tmp/foo
。这可能会引起同一台机器上的用户或项目之间的冲突问题,所以请小心(或者如果您有不同的偏好,请提交 PR)。
Pyo3 版本: pyo3 的 Cargo 依赖项会自动生成。如果您需要更改版本,请使用 --pyo3
标志,例如 --pyo3 0.13
。您还可以使用 --pyo3 github
来使用主分支上的最新版本。截至 2021 年 5 月 7 日,github 选项对于在 OS X 上构建是必要的。
依赖项
~1.2–2MB
~34K SLoC