如何在 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 中是一个非常有效的方案。
相关文章:
如何在 Python 项目中引入 Rust 函数
目录 1. 初始化 Python 项目2. 添加 Rust 开发工具3. 初始化 Rust 项目4. 开发模式构建5. 验证模块是否成功安装6. 测试 Rust 函数总结 (封面pid: 129416070) Python 是一门非常流行的编程语言,具有易于使用和开发的特点。然而,随着项目需求的增长和性能…...
聊聊SpringAI流式输出的底层实现?
在 Spring AI 中,流式输出(Streaming Output)是一种逐步返回 AI 模型生成结果的技术,允许服务器将响应内容分批次实时传输给客户端,而不是等待全部内容生成完毕后再一次性返回。 这种机制能显著提升用户体验ÿ…...
MySQL 8 自动安装脚本(CentOS-7 系统)
文章目录 一、MySQL 8 自动安装脚本脚本说明📌 使用脚本前提条件1. 操作系统2. 用户权限3. 网络要求 📌 脚本的主要功能1. 环境检查2. MySQL 自动安装3. 自动配置 MySQL4. 防火墙配置5. 验证与输出 📌 适用场景 二、执行sh脚本1. 给予脚本执行…...
在Notepad++中使用NppAtyle插件格式化代码
参考链接:Artistic Style 使用教程(中文版) 1.下载NppAStyle插件(根据版本,选择32位或者64位) https://github.com/ywx/NppAStyle/releases 2.菜单栏中选择:插件->打开插件文件夹 创建文件夹…...
【k8s系列7-更新中】kubeadm搭建Kubernetes高可用集群-三主两从
主机准备 结合前面的章节,这里需要5台机器,可以先创建一台虚拟机作为基础虚拟机。优先把5台机器的公共部分优先在一台机器上配置好 1、配置好静态IP地址 2、主机名宇IP地址解析 [root@localhost ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost…...
拼多多面经,暑期实习Java一面
项目中的设计模式 mysql连接过程,索引,分库分表场景,路由策略 redis使用场景,分片集群怎么搭建与路由,数据一致性 分布式锁怎么用的,具体使用参数 线程池怎么用的,过程 sql having 分布式事务 如…...
FramePack:让视频生成更高效、更实用
想要掌握如何将大模型的力量发挥到极致吗?叶梓老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具(限时免费)。 1小时实战课程,您将学习到如何轻松上手并有效利用 Llama Factory 来微调您的模型,以发挥其…...
ctfshow web8
前言 学习内容:简单的盲注脚本的书写 web8 这个题目题目手动注入很麻烦 主要是他过滤了 union 空格和 过滤了union的解决方法 1、使用盲注(报错注入和盲注) 2、使用时间盲注 3、堆叠注入 盲注脚本的书写 首先他是有注入点的 然后熟悉requests包的使用 …...
gem5-gpu教程03 当前的gem5-gpu软件架构(因为涉及太多专业名词所以用英语表达)
Current gem5-gpu Software Architecture 这是当前gem5-gpu软件架构的示意图。 Ruby是在gem5-gpu上下文中用于处理CPU和GPU之间内存访问的高度可配置的内存系统 CudaCore (src/gpu/gpgpu-sim/cuda_core.*, src/gpu/gpgpu-sim/CudaCore.py) Wrapper for GPGPU-Sim shader_cor…...
TDengine 查询引擎设计
简介 TDengine 作为一个高性能的时序大数据平台,其查询与计算功能是核心组件之一。该平台提供了丰富的查询处理功能,不仅包括常规的聚合查询,还涵盖了时序数据的窗口查询、统计聚合等高级功能。这些查询计算任务需要 taosc、vnode、qnode 和…...
AOSP Android14 Launcher3——点击桌面图标启动应用动画流程
在Launcher3中,点击桌面应用图标时,会有一个从 图标位置起始到全屏的动画过程,使得应用的打开过程不是生硬的启动过程。 这个动画具体是怎么实现的呢?本文对这个过程进行一个梳理 在Launcher中,动画大体上可以分为两类…...
windows端远程控制ubuntu运行脚本程序并转发ubuntu端脚本输出的网页
背景 对于一些只能在ubuntu上运行的脚本,并且这个脚本会在ubuntu上通过网页展示运行结果。我们希望可以使用windows远程操控ubuntu,在windows上查看网页内容。 方法 start cmd.exe /k "sshpass -p passwd ssh namexxx.xxx.xxx.xxx "cd /hom…...
【官方正版,永久免费】Adobe Camera Raw 17.2 win/Mac版本 配合Adobe22-25系列软
Adobe Camera Raw 2025 年 2 月版(版本 17.2)。目前为止最新版新版已经更新2个月了,我看论坛之前分享的还是2024版,遂将新版分享给各位。 Adobe Camera Raw,支持Photoshop,lightroom等Adobe系列软件&#…...
如何使用flatten函数在Terraform 中迭代嵌套map
简介 flatten 接受一个列表,并用列表内容的扁平序列替换列表中的任何元素。 > flatten([["a", "b"], [], ["c"]]) ["a", "b", "c"] > flatten([[["a", "b"], []], [&quo…...
原生 HTML 的`title` 属性修改触发事件为鼠标移入移出显示
HTML中title属性的适用范围 在 HTML 中,title 属性是全局属性(Global Attribute),这意味着它可以被应用到所有 HTML 标签上。无论是块级元素(如 <div>)、行内元素(如 <span>),还是表单元素(如 <input>),都可以添加 title 属性。 常见使用 title…...
【论文精读】Reformer:高效Transformer如何突破长序列处理瓶颈?
目录 一、引言:当Transformer遇到长序列瓶颈二、核心技术解析:从暴力计算到智能优化1. 局部敏感哈希注意力(LSH Attention):用“聚类筛选”替代“全量计算”关键步骤:数学优化: 2. 可逆残差网络…...
jmeter中监控服务器ServerAgent
插件下载: 将ServerAgent上传至需要监控的服务器,mac/liunx启动startAgent.sh(启动命令:./startAgent.sh) 在jmeter中添加permon监控组件 配置需要监控的服务器IP地址,添加需要监控的资源 注意…...
网络结构及安全科普
文章目录 终端联网网络硬件基础网络协议示例:用户访问网页 OSI七层模型网络攻击(Hack)网络攻击的主要类别(一)按攻击目标分类(二)按攻击技术分类 网络安全防御 典型攻击案例相关名词介绍网络连接…...
JVM虚拟机-JVM调优、内存泄漏排查、CPU飙高排查
一、JVM调优的参数在哪里设置 项目开发过程中有以下两种部署项目的方式: 项目部署在tomcat中,是一个war包;项目部署在SpringBoot中,是一个jar包。 (1)war包 catalina文件在Linux系统下的tomcat是以sh结尾,在windows系…...
安全复健|windows常见取证工具
写在前面: 此博客仅用于记录个人学习内容,学识浅薄,若有错误观点欢迎评论区指出。欢迎各位前来交流。(部分材料来源网络,若有侵权,立即删除) 取证 01系统运行数据 使用工具:Live-F…...
FPGA开发流程初识
FPGA 的开发流程可知,在 FPGA 开发的过程中会产生很多不同功能的文件,为了方便随时查找到对应文件,所以在开始开发设计之前,我们第一个需要考虑的问题是工程内部各种文件的管理。如 果不进行文件分类,而是将所有文件…...
Docker 中将文件映射到 Linux 宿主机
在 Docker 中,有多种方式可以将文件映射到 Linux 宿主机,以下是常见的几种方法: 使用-v参数• 基本语法:docker run -v [宿主机文件路径]:[容器内文件路径] 容器名称• 示例:docker run -it -v /home/user/myfile.txt:…...
C# 类型、存储和变量(栈和堆)
本章内容 C#程序是一组类型声明 类型是一种模板 实例化类型 数据成员和函数成员 预定义类型 用户定义类型 栈和堆 值类型和引用类型 变量 静态类型和dynamic关键字 可空类型 栈和堆 程序运行时,它的数据必须存储在内存中。一个数据项需要多大的内存、存储在什么地方…...
基于深度学习Yolo8的驾驶员疲劳与分心行为检测系统
基于深度学习Yolo8的驾驶员疲劳与分心行为检测系统 【包含内容】 【一】项目提供完整源代码及详细注释 【二】系统设计思路与实现说明 【三】疲劳检测模型与行为分析统计 【技术栈】 ①:系统环境:Windows/Mac/Linux ②:开发环境:P…...
AOSP Android14 Launcher3——远程窗口动画关键类SurfaceControl详解
在 Launcher3 执行涉及其他应用窗口(即“远程窗口”)的动画时,例如“点击桌面图标启动应用”或“从应用上滑回到桌面”的过渡动画,SurfaceControl 扮演着至关重要的角色。它是实现这些跨进程、高性能、精确定制动画的核心技术。 …...
Linux系统学习----概述与目录结构
linux 是一个开源、免费的操作系统,其稳定性、安全性、处理多并发已经得到业界的认可,目前很多企业级的项目 (c/c/php/python/java/go)都会部署到 Linux/unix 系统上。 一、虚拟机系统操作 1.网络连接的三种方式(桥接模式、nat模式、主机模…...
python pdf转图片再OCR
先pdf转图片 import os from pdf2image import convert_from_path# PDF文件路径 pdf_path /Users/xxx/2022.pdf # 输出图片的文件夹 output_folder ./output_images2022 # 输出图片的命名格式 output_name page# 如果输出文件夹不存在,创建它 if not os.path.ex…...
(2)Docker 常用命令
文章目录 Docker 服务器Docker 镜像Docker 容器本地 RegistryRUN vs CMD vs ENTRYPOINTRUNCMDENTRYPOINT 限制容器对内存、CPU 和 IO 资源的使用内存CPUBlock IO设置权重bps 和 iops cgroup 和 namespacecgroupnamespacMount namespaceUTS namespaceIPC namespacePID namespace…...
虚拟列表技术深度解析:原理、实现与性能优化实战
虚拟列表技术深度解析:原理、实现与性能优化实战 引言 在当今数据驱动的互联网应用中,长列表渲染已成为前端开发的核心挑战。传统的一次性全量渲染方式在数据量超过千条时,往往导致页面卡顿、内存飙升等问题。虚拟列表(Virtual L…...
服务器简介(含硬件外观接口介绍)
服务器(Server)是指提供资源、服务、数据或应用程序的计算机系统或设备。它通常比普通的个人计算机更强大、更可靠,能够长时间无间断运行,支持多个用户或客户端的请求。简单来说,服务器就是专门用来存储、管理和提供数…...
