- Python语法简洁,开发难度低,但是运行速度慢
- Rust语法复杂,开发难度高,但是运行速度快
我们可以将这二者结合,让Python在顶层调用,当Python遇到性能瓶颈时,Rust专门负责编写吃性能的模块。
- 在Rust侧,使用pyo3编写Python软件包/模块,然后使用maturin打包。
- 从Python模块的维度来说,打包后的Python库,应该包含两种文件:
*.pyd: 一个二进制文件,是rust编译链接后的产物,类比于Windows里的.dll、Linux里的.so、macOS里的.dylib。*.pyi: 一个文本文件,被称为Python存根文件,用于对外部实现的方法、模块进行Python层面的定义,并提供类型标注与注释。
- 从Python模块的维度来说,打包后的Python库,应该包含两种文件:
- 在Python侧,根据pyi文件,直接调用Rust二进制库文件。
这里是一个maturin项目的开发示例,如果你想从零开始构建一个maturin项目,可以按照如下步骤:
- 创建并激活一个Python虚拟环境
virtualenv .venv
source .venv/bin/activate- 安装maturin
pip install maturin- 初始化maturin项目
maturin init
# 随后会出现一个交互式命令,选择pyo3即可- 创建python存根文件与测试脚本
# 这里的YOUR_PY_MODULE_NAME与pyproject.toml中的project.name是一致的
touch YOUR_PY_MODULE_NAME.pyi
touch main.py-
在src目录下写Rust代码,开发功能
-
修订存根文件
-
运行maturin构建命令
maturin develop- 在python脚本,用来测试构建好的Python库
TODO