第2章:开发环境搭建
说实话,每次开始一个新项目,我最头疼的就是环境配置。明明代码逻辑都理清了,结果卡在「装不上」三个字上,特别憋屈。Rust 和 Python 的混合开发更是如此——两边工具链都得伺候好。
这一章,咱们就把环境彻底搞定。我带你一步步走,保证不踩坑。
2.1 安装 Rust 工具链
Rust 的安装其实很简单。官方推荐用 rustup,这是个版本管理工具,类似 Python 的 pyenv。
打开终端,执行下面这行命令:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
安装过程中会问你几个选项。我个人习惯选默认(default),省心。安装完成后,重启终端,验证一下:
rustc --version
cargo --version
如果看到版本号,说明 Rust 装好了。嗯,这里要注意:千万别用系统包管理器(比如 apt、brew)装 Rust,版本太旧,后面 PyO3 会报错。我吃过这个亏。
2.2 安装 Python 虚拟环境
Python 这边,我强烈建议用虚拟环境。为什么?你想想看,不同项目依赖的包版本可能冲突,混在一起迟早出事。
我个人偏爱 venv,它是 Python 3.3+ 自带的,不用额外装。创建虚拟环境很简单:
python3 -m venv rust_py_env
激活它:
- Linux/macOS:
source rust_py_env/bin/activate - Windows:
rust_py_env\Scripts\activate
激活后,终端前面会出现 (rust_py_env) 字样。这时候你装的所有包,都只在这个环境里生效。
pip install --user 装包到全局。我曾经这么干过,结果两个项目依赖的 numpy 版本打架,折腾了一下午才解决。虚拟环境就是用来隔离这些麻烦的。
2.3 配置 Cargo 与 PyO3 依赖
现在进入正题。我们要创建一个 Rust 项目,并引入 PyO3 库。PyO3 是 Rust 和 Python 之间的桥梁——说白了,它让 Rust 代码能被 Python 直接调用。
先创建一个新的 Rust 库项目:
cargo new --lib rust_py_hello
cd rust_py_hello
然后编辑 Cargo.toml 文件,加入 PyO3 依赖:
[package]
name = "rust_py_hello"
version = "0.1.0"
edition = "2021"
[lib]
crate-type = ["cdylib"]
[dependencies]
pyo3 = { version = "0.20", features = ["extension-module"] }
这里 crate-type = ["cdylib"] 是关键。它告诉 Rust 编译器:我们要生成一个动态链接库(.so 或 .dll),Python 才能加载它。没有这行,PyO3 没法工作。
接下来,在 src/lib.rs 里写一个简单的函数:
use pyo3::prelude::*;
#[pyfunction]
fn greet(name: &str) -> String {
format!("Hello, {}! 来自 Rust 的问候。", name)
}
#[pymodule]
fn rust_py_hello(_py: Python, m: &PyModule) -> PyResult<()> {
m.add_function(wrap_pyfunction!(greet, m)?)?;
Ok(())
}
这段代码做了三件事:
- 用
#[pyfunction]标记一个函数,告诉 PyO3「这个函数要暴露给 Python」 - 用
#[pymodule]定义一个 Python 模块 - 把函数注册到模块里
编译一下:
cargo build --release
编译成功后,你会在 target/release/ 目录下看到一个 librust_py_hello.so(Windows 上是 .pyd)。这就是我们要的产物。
2.4 验证 Hello World
最后一步,验证整个链路是否通畅。回到 Python 虚拟环境,把编译好的动态库复制到当前目录:
cp target/release/librust_py_hello.so .
然后写一个简单的 Python 脚本 test.py:
import rust_py_hello
result = rust_py_hello.greet("世界")
print(result)
运行它:
python test.py
如果看到输出:
Hello, 世界! 来自 Rust 的问候。
恭喜你,环境搭建成功了!
知识体系总览
下面这张图,帮你理清本章的核心逻辑:
这张图展示了从零到 Hello World 的完整路径。三个分支并行推进,最后汇聚到验证环节。我在实际项目中,经常用这张图给新人做 onboarding,效果不错。