# 建立 Rust 專案
建立 Rust 資料夾
mkdir my_rust_lib
cd my_rust_lib
建立 Cargo.toml(Rust 的設定檔
Cargo.toml 內容:
[package]
name = "my_rust_lib"
version = "0.1.0"
edition = "2021"
[lib]
name = "my_rust_lib"
crate-type = ["cdylib"] # ← 關鍵!編譯成動態庫供
Python 使用
[dependencies]
pyo3 = { version = "0.26", features =["extension-module"] } # ← PyO3 橋接
建立 pyproject.toml(Python 的設定檔)
[build-system]
requires = ["maturin>=1.8,<2.0"]
build-backend = "maturin"
[project]
name = "my_rust_lib"
version = "0.1.0"
description = "A Python extension module written in Rust using PyO3"
requires-python = ">=3.11,<3.15"
[tool.maturin]
features = ["pyo3/extension-module"]
include = ["my_rust_lib/**/*"]
features = ["pyo3/extension-module"] 就是告訴編譯器靶crate 打包成可被 python import 的模組
如果沒加,編譯後的 .so 會是「一般動態函式庫」而不是「Python extension module」。在 Python 直接 import your_module 時可能會失敗,因為缺少 PyO3 預期的初始化符號。
如果只是做一個純 Rust 套件,然後透過 FFI (cffi, ctypes) 去 call .so,那就不需要 pyo3/extension-module。
# 撰寫 Rust 程式碼
src/lib.rs 結構:
use pyo3::prelude::*; // ← 導入 PyO3
....
# 編譯指令
編譯並輸出 wheel 套件檔案,會在 target/wheels/ 產生 .whl 安裝包。
maturin build --release -m my_rust_lib/Cargo.toml

# 安裝模組
把你剛編譯出來的 Rust-Python 模組 wheel,強制安裝到當前 Python 環境。
uv pip install --force-reinstall my_rust_lib/target/wheels/my_rust_lib-*.whl
直接點 import 的類,或是直接去 .venv/lib/python3.13/site-packages/ 應就能看到編譯好的模組檔

# Python 調用 Rust 模組
就可以在 Python 中直接調用 Rust 編譯好的模組
import my_rust_lib # ← 直接導入,就像普通 Python 模組
┌─────────────────────────────────────────────────┐
│ Python 程式 │
│ import my_rust_lib │
│ my_rust_lib.correct_text(...) │
└──────────────────┬──────────────────────────────┘
│ (Python C API)
↓
┌─────────────────────────────────────────────────┐
│ PyO3 橋接層 │
│ - 型別轉換 │
│ - 錯誤處理 │
│ - GIL 管理 │
└──────────────────┬──────────────────────────────┘
↓
┌─────────────────────────────────────────────────┐
│ Rust 編譯的機器碼 │
│ my_rust_lib.so │
│ - correct_text() [native code] │
│ - pinyin 轉換 [native code] │
│ - edit_distance [native code] │
└─────────────────────────────────────────────────┘
所以走一次流程大概就是
- 編譯 Rust 程式碼 → 生成優化的機器碼,.so 動態庫
- 鏈接 Python C API → 透過 PyO3 橋接
- 生成 .so 檔案 → my_rust_lib.cpython-313-darwin.so
- 安裝到虛擬環境 →
.venv/lib/python3.13/site-packages/my_rust_lib/
