天天看點

實戰經驗分享:使用 PyO3 來建構你的 Python 子產品

PyO3 主要用于建立原生 Python 的擴充子產品。PyO3 還支援從 Rust 二進制檔案運作 Python 代碼并與之互動,可以實作 rust 與 Python 代碼共存。在一些對性能要求較高的子產品上,可以考慮使用 PyO3 建構對應的功能子產品。PyO3 的功能分離,不用過多擔心子產品之間的耦合性,并且在速度上能有一定的提升。

github位址: https://github.com/PyO3/pyo3

版本規定如下:

Python 3.6+

Rust 1.41+

接下來我們通過一個小的 demo 了解一下從 PyO3 編譯子產品到 Python 中正常使用的整個流程。

編譯完成之後,我們會在 target 檔案夾下面發現一個 wheel 檔案。檔案名組合為 “子產品名 + 目前 Python 版本+目前系統型号”,比如:string_sum-0.1.0-cp39-cp39-macosx_10_7_x86_64.whl

建立 python 檔案:

編譯工具的選擇和使用

官方提供了兩種編譯工具的選擇:

rust 寫的 maturin

傳統的setup.py的方式

使用 maturin 編譯

使用 setup.py 編譯

編寫 setup.py 檔案:

會引用本地的檔案:

docker 中的應用

同樣的,如果建立的 App 本身是在 docker 内部運作的。那麼第一步我們需要安裝 rust 的環境 dockerfile。具體如下:

具體目錄如下:

看過之前的文章的小夥伴《靈魂畫手:漫畫圖解 SSH》 ,應該對 rsa 的整個加解密流程有所了解啦。那我們不妨用 PyO3 來建構一個 Python 的 rsa 加解密包。使用場景如下:

用戶端本地生成公私鑰,通過前期認證過程,将公鑰發送給服務端儲存,後期通信過程中,用戶端主動發送消息給服務端,用戶端通過私鑰對資訊加密,服務端通過對應的公鑰進行解密。

github 位址: https://github.com/hzjsea/pyo3-crypto

後續又擴充了一些内容,比如 MD5 加密,簽名等等。

webpack 從 0 到 1 建構 vue

Ansible 快速入門