如何在 Python 項目中引入 Rust 函數

目錄

  • 1. 初始化 Python 項目
  • 2. 添加 Rust 開發工具
  • 3. 初始化 Rust 項目
  • 4. 開發模式構建
  • 5. 驗證模塊是否成功安裝
  • 6. 測試 Rust 函數
  • 總結

(封面pid: 129416070)

Python 是一門非常流行的編程語言,具有易于使用和開發的特點。然而,隨著項目需求的增長和性能瓶頸的出現,有時我們需要借助其他語言來提高性能,尤其是在計算密集型任務中。Rust,作為一門高性能且內存安全的語言,是與 Python 集成的理想選擇。

本文將詳細介紹如何在 Python 項目中引入 Rust 函數,結合 maturin 工具,將 Rust 編寫的功能打包成 Python 模塊。

本文默認你已經安裝好了 uv 和 Rust 開發環境。

1. 初始化 Python 項目

首先,我們需要創建一個 Python 項目,并為其配置虛擬環境。在命令行中執行以下命令:

uv init foobar -p 3.12
cd foobar

這將初始化一個名為 foobar 的 Python 項目,并指定使用 Python 3.12 版本。

2. 添加 Rust 開發工具

在這個步驟中,我們將添加 maturin,這是一個非常方便的工具,可以幫助你將 Rust 代碼構建成 Python 可調用的擴展模塊。首先,執行以下命令以將 maturin 安裝到你的虛擬環境中:

uv add maturin

接下來,激活虛擬環境:

.venv\Scripts\activate

3. 初始化 Rust 項目

在你的項目中添加一個 Rust 模塊。在 foobar 目錄下,執行以下命令來創建一個名為 foo 的 Rust 項目:

maturin init foo
cd foo

這將創建一個帶有簡單示例代碼的 Rust 項目,src/lib.rs 文件中可以編寫你想要暴露給 Python 使用的 Rust 函數。
在這里插入圖片描述

4. 開發模式構建

為了能夠在開發過程中快速測試,我們使用 maturin develop 命令。這會將 Rust 代碼編譯成 Python 擴展,并將其安裝到當前 Python 環境中:

maturin develop

執行該命令后,Rust 編寫的模塊 foo 將自動安裝到 Python 環境中,可以直接在 Python 中進行導入和使用。

在這里插入圖片描述
在這里插入圖片描述

5. 驗證模塊是否成功安裝

你可以通過運行以下命令來驗證模塊是否成功安裝:

uv pip list

在這里插入圖片描述

6. 測試 Rust 函數

接下來,我們將測試通過 Rust 編寫的函數。在 Python 交互式命令行中輸入以下代碼:

import foo
print(foo.sum_as_string(114, 514))

在這里插入圖片描述

總結

通過以上步驟,你已經成功將 Rust 函數引入到 Python 項目中。maturin 使得 Rust 與 Python 的集成變得非常簡單,極大地提升了 Python 程序的性能。對于性能要求較高的項目,使用 Rust 編寫核心算法并通過 maturin 集成到 Python 中是一個非常有效的方案。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/77990.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/77990.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/77990.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java基礎系列-HashMap源碼解析2-AVL樹

文章目錄 AVL樹左旋右旋左旋右旋的4種情況LL 型RR 型LR 型RL 型 實際插入時怎么判斷是那種類型?插入時注意事項刪除節點 AVL樹 為避免BST樹退化成鏈表的極端情況, AVL 樹應運而生。 平衡因子取值(-1,0,1)…

新書速覽|Hadoop與Spark大數據全景解析(視頻教學版)

《Hadoop與Spark大數據全景解析:視頻教學版》 01 本書內容 《Hadoop與Spark大數據全景解析:視頻教學版》結合作者多年在大數據領域的開發實踐經驗,采用“理論實戰”的形式,以大量實例全面介紹Hadoop和Spark的基礎知識及其高級應用。作者將豐富的教學經…

TapData × 夢加速計劃 | 與 AI 共舞,TapData 攜 AI Ready 實時數據平臺亮相加速營,企業數據基礎設施現代化

在實時躍動的數據節拍中,TapData 與 AI 共舞,踏出智能未來的新一步。 4月10日,由前海產業發展集團、深圳市前海夢工場、斑馬星球科創加速平臺等聯合發起的「夢加速計劃下一位獨角獸營」正式啟航。 本次加速營以“打造下一位獨角獸企業”為目…

[密碼學基礎]密碼學常用名詞深度解析:從基礎概念到實戰應用

密碼學常用名詞深度解析:從基礎概念到實戰應用 密碼學是信息安全的基石,但其專業術語常令人望而生畏。本文系統梳理密碼學領域的核心名詞,結合技術原理、實際應用與攻擊場景,幫助開發者快速構建密碼學知識框架。文中代碼示例基于…

GD32H7單片機使用segger_rtt,rtt-viewer看不到輸出的問題,怎樣解決?

jlink版本目前是792,但估計只要能支持h7的jlink版本應該都可以。 將segger/JLink_V792n中,samples文件夾、RTT中四個文件拷貝出來放在單片機目錄中 在任意代碼部分引用segger_rtt.h,再調用函數 即可使用rtt打印功能,在rtt-viewe…

快速生成安卓證書并打包生成安卓apk(保姆教程)

一.生成安卓證書 目前市面上生成可以快速生成安卓證書的網站有很多個人推薦香蕉云編以下是網站鏈接 香蕉云編-app打包上架工具類平臺 1.進入網站如下圖 2.點擊生成簽名證書 3.點擊立即創建證書 4.點擊創建安卓證書 5.按照指引完成創建 6.點擊下載就可使用 二.打包安卓apk …

前端面試場景題

目錄 1.項目第一次加載太慢優化 / vue 首屏加載過慢如何優化 2.說說了解的es6-es10的東西有哪些 ES6(ES2015)之后,JavaScript 新增了許多實用的數組和對象方法,下面為你詳細介紹: 3.常見前端安全性問題 XSS&#…

Spring JDBC 的開發步驟(注解方式)

Spring JDBC 的開發步驟主要包括以下關鍵環節&#xff0c;結合代碼示例說明如下&#xff1a; 1. 添加依賴 在 pom.xml 中引入 Spring JDBC 和數據庫驅動依賴&#xff08;以 HikariCP 連接池和 MySQL 為例&#xff09;&#xff1a; <!-- Spring JDBC --> <dependency…

Java面試:探索Spring Boot與微服務的深度挑戰

場景&#xff1a;互聯網大廠Java求職者面試 在一個陽光明媚的下午&#xff0c;趙大寶來到了知名互聯網大廠的面試現場。他面臨的是一個嚴肅的面試官&#xff0c;準備對他的技術能力進行全面考核。 第一輪提問&#xff1a;基礎知識與Spring Boot應用 面試官&#xff1a;趙先生…

Spring Boot中的監視器:Actuator的原理、功能與應用

在 Spring Boot 應用中&#xff0c;監視器通常指 Spring Boot Actuator&#xff0c;一個內置的生產就緒工具&#xff0c;用于監控和管理運行中的應用。Actuator 提供了一系列 RESTful 端點&#xff0c;暴露應用的運行時信息&#xff0c;如健康狀態、性能指標、日志配置和環境變…

GitHub創建遠程倉庫

使用GitHub創建遠程倉庫&#xff1a;從零開始實現代碼托管與協作 前言 在當今軟件開發領域&#xff0c;版本控制系統已成為開發者必備的核心工具。作為分布式版本控制系統的代表&#xff0c;Git憑借其強大的分支管理和高效的協作能力&#xff0c;已成為行業標準。而GitHub作為…

Manus技術架構、實現內幕及分布式智能體項目實戰 線上高級實訓班

Manus技術架構、實現內幕及分布式智能體項目實戰 線上高級實訓班 模塊一&#xff1a;解密Manus分布式多智能體工作原理和架構內幕 ? 基于Claude和Qwen的大模型智能體Manus為何能夠迅速成為全球討論熱度最高、使用體驗最好、產業界最火爆的大模型智能體產品&#xff1f; ? Ma…

JS通過GetCapabilities獲取wms服務元數據信息并在SuperMap iClient3D for WebGL進行疊加顯示

獲取wms服務元數據信息并在三維webgl客戶端進行疊加顯示 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><tit…

【刷題Day21】TCP(淺)

說說 TCP 的四次揮手&#xff1f; TCP的四次揮手事用于安全關閉一個已建立的連接的過程&#xff0c;它確保雙方都能完成數據傳輸并安全地釋放連接資源。 簡述步驟&#xff1a; 第一次揮手&#xff08;FIN --> ACK&#xff09;&#xff1a;客戶端主動關閉連接&#xff0c;…

Springboot整合Redis主從

Springboot整合Redis主從 前言原配置現配置測試LettuceConnectionFactory.setShareNativeConnection 方法的作用 前言 SpringBoot版本&#xff1a;2.3.2.RELEASE 原配置 原yml配置內容&#xff1a; spring:# Redis服務器配置redis:host: 127.0.0.1# Redis服務器連接端口por…

git撤銷最近一次commit

在Git中&#xff0c;在撤銷最近一次的提交時&#xff0c;有幾種不同的方法&#xff0c;這取決于你想要的結果。下面是一些常見的方法&#xff1a; 1. 取消最近的提交&#xff08;但不刪除改動&#xff09; 如果你想要取消最近的提交&#xff0c;但是保留這些改動&#xff0c;以…

解決Docker 配置 daemon.json文件后無法生效

vim /etc/docker/daemon.json 在daemon中配置一下dns {"registry-mirrors": ["https://docker.m.daocloud.io","https://hub-mirror.c.163.com","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","ht…

QML--全局對象Qt

在 QML 中&#xff0c;Qt 是一個內置的全局對象&#xff0c;提供了許多核心功能、工具函數、環境信息和類型構造方法。以下是 Qt 全局對象的詳細分類和常見用途&#xff1a; 1. 工具函數 1.1 格式化與轉換 Qt.formatDate(date, format) / Qt.formatTime(date, format) 格式化…

前端筆記-Vue3(下)

學習參考視頻&#xff1a;尚硅谷Vue3入門到實戰&#xff0c;最新版vue3TypeScript前端開發教程_嗶哩嗶哩_bilibili vue3學習目標&#xff1a; VUE 31、Vue3架構與設計理念2、組合式API&#xff08;Composition API&#xff09;3、常用API&#xff1a;ref、reactive、watch、c…

Git遠程操作與標簽管理

目錄 1.理解分布式版本控制系統 2.遠程倉庫 3.新建遠程倉庫 4.克隆遠程倉庫 5.向遠程倉庫推送 6.拉取遠程倉庫 7.配置Git 7.1.忽略特殊文件 7.2.給命令配置別名 8.標簽管理 8.1.理解標簽 8.2.創建標簽 8.3.操作標簽 1.理解分布式版本控制系統 Git是目前世界上…