Rust交互式编程环境搭建

简介: 数据科学和机器学习社区似乎压倒性地偏爱Jupyter Notebook。本文将带领大家一步一步搭建起Rust交互式编程环境。让Jupyter 可以运行Rust代码。

Rust交互式编程环境搭建

数据科学和机器学习社区似乎压倒性地偏爱Jupyter Notebook。这主要是因为在数据科学领域使用Jupyter Notebook有三大优势:

  1. Jupyter Notebook将IPython的交互式特点发挥到了极致

    熟悉机器学习和数据分析的朋友应该知道:分析和建模是非常碎片化的工作,而每一个片段又有着非常强的独立性,甚至可以说除了数据本身之外,每一块的代码之间并没有很强的关联性。数据分析和建模的过程往往是一个不断实验的过程。我们需要一次又一次地改变数据预处理方式、尝试不同的特征工程方案、不厌其烦地调整模型参数。每一步工作都需要反复实验、反复修改,而下一板块需要用到的只不过是上一板块输出的数据。通过Jupyter Notebook,我们可以以最快的速度得知自己做出的调整是好是坏,并尽快进入到下一次的实验当中。

  2. Jupyter Notebook更利于汇报和教学

    因为Jupyter Notebook本身的模块化和内容的清晰化,使其天生具备如PPT一般的展现工作成果的功能。并且Jupyter Notebook中可以将输出结果嵌套在Notebook中,并且支持Markdown写作,这就让我们可以在Jupyter Notebook中输入任何需要展现的内容,并且这些内容都会以一种有组织、有层次、逻辑严密的形式展示出来。

  3. 内置大量魔术命令

    Jupyter Notebook 内置大量的魔术命令(比如%Matplotlib inline,%timeit等),可以方便的输出我们关心的指标,帮我们更快地进行分析。

上述三点让Jupyter Notebook成为数据科学领域的最佳工具。

Jupyter Notebook的默认内核是Python,也可以替换成R,JavaScript 等动态语言。编译型语言,例如C++、Java,需要额外的扩展工具来支持。Rust作为静态编译型语言,自然也需要外部工具扩展来实现交互式编程,其中最成熟的当属Google开源的EvCxR(Evaluation Context for Rust)。本文将带领大家一步一步搭建起Rust交互式编程环境。

maxresdefault.jpg

1. 安装Miniconda

有很多方法可以安装并建立交互式编程环境,这里我推荐用Miniconda

Miniconda是一款小巧的python环境管理工具,安装包大约只有50M多点,其安装程序中包含conda软件包管理器和Python。一旦安装了Miniconda,就可以使用conda命令安装任何其他软件工具包并创建环境等。

你也可以不装Miniconda,直接安装Jupyter Lab。但我建议用Miniconda,因为除了交互式编程环境,我们还需要Miniconda来管理包和虚拟环境。

Miniconda的官网上有详细的安装教程。如果你像我一样使用Linux,你可以在控制台运行如下命令:

wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh

chmod +x Miniconda3-latest-Linux-x86_64.sh 

./Miniconda3-latest-Linux-x86_64.sh

上面的命令将下载Miniconda的安装脚本并启动交互式安装。按照提示一步步完成安装,当你看到

Thank you for installing Miniconda3!

说明安装成功。

2. 创建环境

Miniconda安装好后,我们需要创建并配置环境。如果在安装时已经将Miniconda加入到环境变量PATH中,那么你可以直接在控制台、Poweshell或CMD中运行conda命令。

我们可以通过下面的命令创建并配置环境:

conda create -n rustenv python=3

其中rustenv是环境名,你可以替换成任意你喜欢的名字。

上面的命令会创建一个名叫rustenv的conda环境并下载最新的Python 3包。你将看到一个即将下载安装的包的列表,并询问你是否继续。输入y进行安装。等待安装成功后,你将看到如下信息:

Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
# $ conda activate rustenv
#
# To deactivate an active environment, use
#
# $ conda deactivate

消息提示输入如下命令激活并进入环境:

conda activate rustenv

输入执行后你将看到控制台提示符最前端会出现括号括起来的环境名。

(rustenv) jarod_laptop:~ jarod$

命令行提示符前的环境名有助于你识别当前在那个环境下。每次电脑重启,都需要执行conda activate rustenv进入rustenv环境。

3. 安装Jupyter Lab

环境安装好后,你可以输入jupyter lab启动Jupyter Lab实例。但是,如果你是新建的环境,执行jupyter lab会看到一个报错,

(rustenv) jarod_laptop:~ jarod$ jupyter lab
-bash: jupyter: command not found

这是因为没有安装Jupyter Lab造成的。接下来我们通过如下命令安装Jupyter Lab:

conda install -c conda-forge jupyterlab

4. 安装Jupyter Lab扩展

Jupyter Lab有很多扩展插件可以实现丰富的扩展功能,其中一个非常有用的插件是plotly。它可以让Jupyter渲染Plotly可视化图表。在conda环境下执行下面的命令即可安装:

jupyter labextension install jupyterlab-plotly

这个安装可能需要花点时间。安装成功后控制台会再次出现输入提示符。

Jupyter Lab还支持主题换肤,如果你喜欢深色主题,可以试一下下面这个主题:

jupyter labextension install @shahinrostami/theme-purple-please

p1.png

图1. Jupyter Lab深色主题

5. 安装Rust

有很多中方法可以安装Rust,大家可以参考Rust官方教程。推荐用rustup安装。我用的操作系统是Linux,可以在控制台通过如下命令安装:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

本专栏的示例代码兼容多个Rust版本,由于我本机的Rust版本为1.65.0,我可以保证所有代码和包都可以在Rust 1.65.0下正常运行。你可以通过下面命令将Rust版本锁定为1.65.0

rustup default 1.65.0

运行上面代码可能会提示你将Cargo加入环境变量PATH,

source $HOME/.cargo/env

其他控制台,如zsh,输入上面命令可能无效,你可以用跟基本的命令添加环境变量

export PATH="$HOME/.cargo/bin:$PATH"

添加完后重启控制台,确保环境变量写入。你可以输入

cargo version

确认是否安装成功。如果控制台上输出cargo版本(cargo 1.65.0),说明安装好了。

6. 安装 EvCxR

接下来我们来安装EvCxR Jupyter内核。EvCxR可以让Rust运行在Jupyter Notebook上。你可以参考官网的方法来完成EvCxR的安装。我这里推荐的安装方法是:

cargo install evcxr_jupyter
evcxr_jupyter --install

7. 小试牛刀

安装完EvCxR后,我们就可以试一下整个环境能够跑起来。打开控制台,进入上面我们创建的conda环境,然后运行如下命令:

jupyter lab

这条命令将启动Jupyter Lab服务,并打开浏览器显示Jupyter Lab的前端界面。

p2.png

图2. Jupyter Lab前端界面

如果在界面上Notebook和Console中能看到Rust图标,这就说明我们环境搭建好了。

我们可以新建一个Rust Notebook。点击Notebook栏的Rust图标就可以创建一个以Rust为内核的notebook。如果环境搭建没问题,那么会在当前目录下新建一个名为Untitled.ipynb的空白notebook。我们可以试着在上面写一些Rust代码,按照管理,我们来写个“Hello World!”:

println!("Hello World!");

如果环境配置一切正常,那么运行上面代码你将看到输出Hello World!

总结

本章我们已经下载、安装、配置和测试了我们的Rust交互式编程环境。我们喜爱的Jupyter环境现在可以运行Rust代码了!随着Rust的日渐壮大,很多原本Python上好用的包在Rust都有相对应的实现。后面我将陆续给大家介绍Python机器学习常用包的Rust替代,让大家逐渐用Rust替代Python完成机器学习任务。

目录
相关文章
|
Rust 安全 Go
揭秘Rust语言:为何它能让你在编程江湖中,既安全驰骋又高效超车,颠覆你的编程世界观!
【8月更文挑战第31天】Rust 是一门新兴的系统级编程语言,以其卓越的安全性、高性能和强大的并发能力著称。它通过独特的所有权和借用检查机制解决了内存安全问题,使开发者既能享受 C/C++ 的性能,又能避免常见的内存错误。Rust 支持零成本抽象,确保高级抽象不牺牲性能,同时提供模块化和并发编程支持,适用于系统应用、嵌入式设备及网络服务等多种场景。从简单的 “Hello World” 程序到复杂的系统开发,Rust 正逐渐成为现代软件开发的热门选择。
450 1
|
Rust 安全 区块链
探索Rust语言:系统编程的新选择
【10月更文挑战第27天】Rust语言以其安全性、性能和并发性在系统编程领域受到广泛关注。本文介绍了Rust的核心特性,如内存安全、高性能和强大的并发模型,以及开发技巧和实用工具,展示了Rust如何改变系统编程的面貌,并展望了其在WebAssembly、区块链和嵌入式系统等领域的未来应用。
|
Rust 算法 安全
如何学习Rust编程?
【10月更文挑战第12天】如何学习Rust编程?
285 1
|
Rust 安全 Java
探索Rust在系统级编程中的应用
【10月更文挑战第9天】Rust语言以其现代化设计、安全性和高性能,在系统级编程领域逐渐崭露头角。本文探讨Rust在操作系统开发、设备驱动、嵌入式系统和网络编程中的应用,介绍其核心优势及实施步骤,帮助读者了解如何在项目中有效利用Rust。
|
Rust 安全 编译器
初探 Rust 语言与环境搭建
Rust 是一门始于2006年的系统编程语言,由Mozilla研究员Graydon Hoare发起,旨在确保内存安全而不牺牲性能。通过所有权、借用和生命周期机制,Rust避免了空指针和数据竞争等问题,简化了并发编程。相较于C/C++,Rust在编译时预防内存错误,提供类似C++的语法和更高的安全性。Rust适用于系统编程、WebAssembly、嵌入式系统和工具开发等领域。其生态系统包括Cargo包管理器和活跃社区。学习资源如"The Book"和"Rust by Example"帮助新手入门。安装Rust可通过Rustup进行,支持跨平台操作。
459 2
初探 Rust 语言与环境搭建
|
Rust 安全 Java
探索Rust在系统编程中的崛起
Rust 是一种由 Mozilla 研究院开发的现代系统编程语言,以其在安全性、并发性和内存管理方面的优势,逐渐成为开发者的新宠。Rust 提供内存安全保证且性能媲美 C/C++,支持跨平台开发,并具备强大的并发编程工具。本文将介绍 Rust 的核心优势、工作原理及实施方法,探讨其在系统编程中的崛起及其面临的挑战。尽管 Rust 学习曲线较陡,但其广泛的应用场景和不断壮大的社区使其成为构建高性能、安全应用的理想选择。
|
Rust 网络协议 安全
Rust在系统编程中的案例分享
Rust在系统编程中的案例分享
330 10
|
Rust 开发者
揭秘Rust编程:模块与包的终极对决,谁将主宰代码组织的新秩序?
【8月更文挑战第31天】在软件工程中,模块化设计能显著提升代码的可读性、可维护性和可重用性。Rust 作为现代系统编程语言,其模块和包管理机制为开发者提供了强有力的工具来组织代码。本文通过对比模块和包的概念及使用场景,探讨了 Rust 中的最佳实践。
238 2
|
Rust 安全 JavaScript
探索Rust在系统编程领域的前景:虚拟机和编译器开发的新篇章
【8月更文挑战第31天】在系统编程领域,性能与安全性至关重要。Rust作为一种新兴语言,凭借其独特的内存安全和并发特性,正逐渐成为虚拟机和编译器开发的首选。本文通过案例分析,探讨Rust在这些领域的应用,例如Facebook的Compiler VM (CVM)项目和实验性的JavaScript JIT编译器Mithril。Rust的静态类型系统和所有权模型确保了高性能和安全性,而其强大的包管理和库生态则简化了虚拟机的开发。随着Rust社区的不断成熟,预计未来将有更多基于Rust的创新项目涌现,推动系统编程的发展。对于追求高性能和安全性的开发者而言,掌握Rust将成为一个重要战略方向。
420 1
|
Rust 安全 物联网
解锁物联网安全新纪元!Rust如何悄然革新系统级编程,让智能设备“零风险”连接未来?
【8月更文挑战第31天】随着物联网(IoT)技术的发展,设备安全与效率成为关键挑战。Rust语言凭借其内存安全、高性能和并发优势,逐渐成为物联网开发的新宠。本文通过智能门锁案例,展示Rust如何确保生物识别数据的安全传输,并高效处理多用户请求。Rust的应用不仅限于智能家居,还广泛用于工业自动化和智慧城市等领域,为物联网开发带来革命性变化。
472 1