如何在 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.mzph.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是目前世界上…