如何在你的项目中混合 Rust 和 Python

如何在你的项目中混合 Rust 和 Python

在在2021年StackOverflow年度开发者调查[1]中,Rust被评为“最受欢迎的语言”(连续第六年!),Python被评为“最受欢迎”的语言。那么为什么不混合两种语言呢!本次介绍将建立一个结合Python和Rust代码的混合项目。
为什么?Python解释方法和动态类型加速了我们的开发工作流程。但是对于更复杂的工作,我们经常会遇到性能问题。
Rust是实现Python项目本机性能升级的理想选择。本机优化使用低级语言和编译器绕过Python解释器。
通过结合Rust和Python,您可以获得两全其美:使用Python的快速交互式开发环境和使用Rust的本机性能。
Python+Rust项目—作者的图片
在以下部分中,我将设置一个混合Python/Rust项目的示例。我们的项目将在同一个项目和工件中结合Python代码和Rust。
混合项目的好处是显而易见的:您在同一个存储库中共享您的Rust和Python代码并创建一个工件。结果,您将两种语言结合在同一个项目中;使用原生Rust组件迭代和扩展Python代码变得更加容易。此外,只需部署一个工件,就可以更轻松地维护和共享您的项目。
缺点很明显:两种语言在同一个目录下,如何构建、测试和部署这样的项目?
集成Rust和Python的主要方式是PyO3框架。使用PyO3,我们可以用Rust编写原生Python模块。当然,该框架也支持从Rust调用Python,但我将只关注使用原生Rust模块扩展Python。
PyO3将您的Rust代码包装到本机python模块中。因此,绑定生成很容易且完全透明。
棘手的部分是构建混合Python和本机代码项目(Python+[Rust、C或C++])时代码的打包。那么如何制作集成Python和原生代码的轮子呢?
Python代码无需编译即可分发,与平台无关;安装轮子会.pyc即时创建文件(Python字节码)。但是我们的Rust代码需要编译和分发为共享库(二进制代码)。
打包是这个项目的难点:创建一种通用的、多平台的方式来生成混合Python-Rust包。
可以帮助您实现此目的的工具是Maturin。Maturin管理创建、构建、打包和分发混合Python/Rust项目。
PyO3+Maturin—图片作者
首先,使用pip.
它包括maturin二进制文件,一个命令行界面。
可执行文件提出了maturin几个选项。让我们放大构建和开发。
为了测试一个混合的Rust-Python项目,我们现在可以使用maturinnew命令初始化我们的库。
对于我们的项目,我们使用选项–bindingspyo3和–mixedmy_project.该my_project参数与此示例的目标项目目录匹配。
生成的项目将目录中的Python包my_project与Rust项目定义Cargo.toml和基于Rust的src目录集成在一起。
好的,我们有了基本的项目骨架。我们现在可以添加一个简单的Rust函数来公开。
项目结构—作者图片
我们需要在Python运行时可调用的Python模块中声明和导出Rust函数。我们首先使用#[pymodule]Rust宏创建一个模块。在我们的函数中,my_project我们将声明Rust和Python之间的绑定。
让我们从<>块的简单函数开始。我们的导出函数is_prime通过将其除以前面的数字来检查其输入的素数。对于数字num,我们检查2和之间数字的除法余数√num。
在<>块中,我们将函数添加到导出的模块中。
在该<>块中,我们添加了一些简单的单元测试。
使用Maturin,构建一个原生Rust模块并将其导出到Python解释器中只需一行代码。
该命令构建Rust原生模块并将其部署在当前的virtualenv中。
在引擎盖后面,命令maturindevelop:
我们可以在Python中添加一个简单的基于属性的测试来检查is_primeRust函数的行为。
我们首先为HypothesisPython包添加一个依赖项。要将依赖项添加到我们的项目中,我们可以编辑该pyproject.toml文件。Maturin支持PEP621,启用Python元数据规范。
我们现在可以运行maturindevelop命令了。
(1)使用–extrastestMaturin选项安装Python测试依赖项。
我们添加了一个简单的基于属性的测试。
我们终于可以运行基于属性的Python测试了。
还有我们的Rust测试。

主题测试文章,只做测试使用。发布者:最新稳定辅助网,转转请注明出处:https://www.744broad.com/14064.html

(0)
上一篇 2023年3月4日 上午6:46
下一篇 2023年3月4日 上午6:52

相关推荐

  • 基于WebAssembly提升网盘文件处理效率在兴盛优选的实践

    基于WebAssembly提升网盘文件处理效率在兴盛优选的实践 为促进团队协作办公,辅助团队提升办公效率,更好的进行数据管理,公司成立了「兴盛网盘」项目。在保障数据安全的同时提升用户体验,也成为了我们工作中的重要命题。而文件传输与处理的效率,作为影响网盘使用体验的关键因素,是企业智能研发团队近期努力的方向。文件秒传功能,一般都会在前端对文件内容进行一次Has…

    RUST资讯 2023年2月27日
    30
  • 31.8米路程“走”了19天,行业新技术破解老建筑平移难题

    31.8米路程“走”了19天,行业新技术破解老建筑平移难题 长江日报大武汉客户端10月23日讯(记者冷靖华)近百岁老建筑贺衡夫怡庐第二次平移从10月5日至今,“走”出31.8米路程花了19天。为何平移一次需要这么多天?移动一座百年老建筑会遇到哪些困难?长江日报记者特地探访了平移现场,请来现场技术专家解答这些疑问。贺衡夫怡庐经过两次平移共“挪动”41.8米,主…

    RUST资讯 2023年2月15日
    100
  • 懒癌星人最爱的清洁工具

    懒癌星人最爱的清洁工具 有一位做清洁工作的妇人,天天打扫街道,十分勤劳。可是,她的衣服很脏,村名都讨厌她,见到她,总是掩着鼻子走过。寺内的禅师叫她来听佛法,鼓励她学禅理。可是,村里的人不赞成,跑来责问说:“禅师啊!你常说清洁的话,叫人做清洁的行为,为什么要和肮脏的女人谈话呢?难道你不觉得讨厌吗?”禅师严肃地看他一眼,回答:“这妇人保持村子清洁,对我们贡献那么…

  • 五百元以内的前置过滤器,选购时认准这5点,性价比之王就是你

    五百元以内的前置过滤器,选购时认准这5点,性价比之王就是你 现在很多人都会在装修时安装一个前置过滤器,想来也不难理解。前置过滤器的价格不高,效果却显而易见。再干净的自来水,也不敢保证里面一点泥沙、铁锈、水藻都没有。使用一年前置过滤器,就能明显看到滤芯上沾满了污垢——如果没有前置过滤器,这些脏东西都有可能被我们吃进肚子里。前置过滤器的价格,最贵可以卖到两三千元…

  • 精品推荐—稀有咸丰重宝铜币

    精品推荐—稀有咸丰重宝铜币 宝泉局:为清代钱币铸造局名。位于东四四条83号,为明清户部所属铸造钱币的工厂。清代宝泉局下属东、西、南、北四作厂,全部位于东城界内。东作厂在乾隆《京城全图》中为一方形大空院,东南角为两进院官厅,其他场所零星布置四、五座小房,与现存格局不同,应是在乾隆十五年(1750年)以后多次改建扩建,但官厅的位置仍在原处。从现在的建筑遗存来看,…

    RUST资讯 2023年2月28日
    40
  • 今日现货黄金、现货白银价格操作建议(2015-03-13)

    今日现货黄金、现货白银价格操作建议(2015-03-13) 中金网03月13日讯,周四(3月12日)国际现货黄金价格收报1153.57美元/盎司,下跌1.56美元,跌幅0.14%;现货白银价格收报3088元/千克,上涨19元,涨幅0.62%。周五(3月13日)亚市早盘,现货黄金开于1153.65美元/盎司,目前价格于1157.63美元/盎司附近交投;现货白银…

    RUST资讯 2023年2月28日
    40
  • 云计算和运维

    云计算和运维 当下,越来越多的公司开始将业务迁移到云上。下面我站在中小规模业务的角度,说一下云计算的利弊。首先说一下好处,云计算大大降低了运维和部署的难度,不需要自己搭建机房,也不需要托管。使用传统机房,一旦设备出现问题,需要机房的工作人员配合才可以。这中间的沟通成本会极大的影响业务。还有就是,雇佣一个经验丰富的运维工程师的成本也是非常可观的,使用云计算,可…

    RUST资讯 2023年3月10日
    40
  • AI 阁下可知文言编程之精妙?

    AI | 阁下可知文言编程之精妙? 『运筹OR帷幄』转载本文转载自公众号机器之心(ID:almosthuman2014)作者:思、一鸣编者按「昔者苍颉作书,而天雨粟,鬼夜哭」,汉字的出现,诞生了世界上一个伟大的文明。而编程语言的出现,让人类和计算机产生了真正的联系,推动了现代文明的发展。那么,将古代汉语和编程语言结合又会产生怎样的火花?最近,GitHub上出…

    RUST资讯 2023年2月16日
    80
  • Linux BitTorrent 客户端 Fragments 2.0 全新发布

    Linux BitTorrent 客户端 Fragments 2.0 全新发布 Fragments2.0的发布使其成为Linux发行版中最方便用户使用的BitTorrent客户端之一。让我们来看看有什么新变化。Fragments是Linux上最好的BitTorrent客户端之一。最新的Fragments2.0是一个重大升级,它使用Rust、GTK4和Liba…

    RUST资讯 2023年2月19日
    70
  • 安全经理看过来!50佳前瞻性安全项目

    安全经理看过来!50佳前瞻性安全项目 在科技快速发展的同时,新的威胁不断涌现,IoT等电子设备数量几十亿的增长让技术创新望尘莫及,一直在向数字经济转型的企业,其风险态势正在以惊人的速度发生改变。面对这一切,如何主动发现并部署新型的安全手段来最小化威胁和企业风险呢?将于今年5月份举行的CSO502017大会上,一系列前沿技术整装待发。CSO50是安全媒体CSO…

    RUST资讯 2023年2月22日
    90
关注微信