#python #cargo #cargo-subcommand #rust

nightly app cargo-pyinit

一个Cargo插件,使将crate转换为Python扩展模块更容易

2 个版本

0.1.3 2021年9月28日
0.1.0 2020年12月28日

#449 in Cargo 插件

MIT/Apache

13KB
118

cargo-pyinit

Cargo 扩展,将Rust crate转换为混合Python/Rust库。

此crate基于PyO3 https://github.com/PyO3/pyo3

先决条件

您需要

setuptools_rust 可以使用pip安装

pip install setuptools_rust

而toml可以这样安装

pip install toml

安装

从GitHub

git clone https://github.com/rexlunae/cargo-pyinit.git
cd cargo-pyinit
cargo install --path .

从Cargo

cargo install pyinit

用法

pyinit只能用于创建或修改库crate。

在源目录内部

cd my-create-directory
cargo pyinit

如果目录已经是Cargo crate,则将其转换为适合与Python一起使用的混合crate。如果目录为空,则将创建一个与所在目录同名的新的库crate。

在目录外部

cargo pyinit crate-name

这将创建指定的目录(如果需要),然后创建一个新的crate或修改现有的crate。

与PyO3的示例代码不同,pyinit创建了一个新文件(pylib.rs),它成为库的基础,并从旧的lib.rs(或之前叫什么名字)导入所有内容。这稍微分离了Python接口的定义,但也意味着某些只能在crate顶级允许的项目(如功能标志)需要手动移动。在创建新crate时,结果将直接与cargo build或Python设置工具一起工作,但如果您正在修改现有的crate,您可能需要手动将一些内容从lib.rs移动到pylib.rs。您还需要手动构建Python接口。这不是自动发生的。

生成的混合crate有一个setup.py,可以用python setup.py develop安装为开发版本,或者用python setup.py install安装为发布版本。您还可以使用pip install .

依赖项

~4–6MB
~102K SLoC