建立 Rust 專案
建立 Rust 資料夾
1 | mkdir my_rust_lib |
建立 Cargo.toml(Rust 的設定檔
1 | Cargo.toml 內容: |
建立 pyproject.toml(Python 的設定檔)
1 | [build-system] |
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 程式碼
1 | src/lib.rs 結構: |
編譯指令
編譯並輸出 wheel 套件檔案,會在 target/wheels/ 產生 .whl 安裝包。
1 | maturin build --release -m my_rust_lib/Cargo.toml |
安裝模組
把你剛編譯出來的 Rust-Python 模組 wheel,強制安裝到當前 Python 環境。
1 | 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 編譯好的模組
1 | import my_rust_lib # ← 直接導入,就像普通 Python 模組 |
1 | ┌─────────────────────────────────────────────────┐ |
所以走一次流程大概就是
- 編譯 Rust 程式碼 → 生成優化的機器碼,.so 動態庫
- 鏈接 Python C API → 透過 PyO3 橋接
- 生成 .so 檔案 → my_rust_lib.cpython-313-darwin.so
- 安裝到虛擬環境 →
.venv/lib/python3.13/site-packages/my_rust_lib/
若您覺得這篇文章對您有幫助,歡迎分享出去讓更多人看到⊂◉‿◉つ~
留言版