最近重新安裝了 macOS Big Sur,也順便想試試 Jupyter Notebook 的 Rust 運作環境,再加上這幾天放假比較有時間,就把安裝的過程記錄下來。

安裝 Miniconda

過去一直覺得 Anaconda 有點肥大,所以這次決定先從安裝比較精簡的 miniconda 開始:

$ brew install --cask miniconda

新增 conda-forge channel 等下才能安裝一些需要的套件如 jupyterlab:

$ conda config --add channels conda-forge
$ conda config --set channel_priority strict

然後需要初始化 conda 的 base 環境,一般都是跑 conda init,但它會加一段不是很通用的設定到我個人的 .zshrc,我不是很喜歡這種做法,所以就先只套用在目前的 shell 裡:

$ eval `conda shell.zsh hook`

創建新的 conda 環境

創建一個新的環境叫 rust-notebook:

(base) $ conda create -n rust-notebook python=3
(base) $ conda activate rust-notebook

安裝 JupyterLab

在新的環境指定安裝 jupyterlab 版本 2.2.9,因為最新的 3.0 似乎與最新的 jupyterlab-plotly 不相容:

(rust-notebook) $ conda install jupyterlab=2.2.9

然後安裝 jupyterlab-plotly:

(rust-notebook) $ jupyter labextension install jupyterlab-plotly

安裝 evcxr_jupyter

這邊假設 Rust 已經安裝完成,直接用 Cargo 安裝 Rust 的 Jupyter kernel:

$ cargo install evcxr_jupyter
$ evcxr_jupyter --install

啟動 JupyterLab:

(rust-notebook) $ jupyter lab

如果可以看到下列 Rust 圖樣應該就是成功了:

範例執行結果

試一下:

println!("Hello, Jupyter!");
Hello, Jupyter!

來畫個圖:

:dep plotters = { git = "https://github.com/38/plotters", default_features = false, features = ["evcxr", "line_series"] }
extern crate plotters;
use plotters::prelude::*;
use plotters::series::*;

let figure = evcxr_figure((640, 480), |root| {
    root.fill(&WHITE);
    let mut chart = ChartBuilder::on(&root)
        .caption("y=x^2", ("Arial", 50).into_font())
        .margin(5)
        .x_label_area_size(30)
        .y_label_area_size(30)
        .build_ranged(-1f32..1f32, -0.1f32..1f32)?;

    chart.configure_mesh().draw()?;

    chart.draw_series(LineSeries::new(
        (-50..=50).map(|x| x as f32 / 50.0).map(|x| (x, x * x)),
        &RED,
    )).unwrap()
        .label("y = x^2")
        .legend(|(x,y)| PathElement::new(vec![(x,y), (x + 20,y)], &RED));

    chart.configure_series_labels()
        .background_style(&WHITE.mix(0.8))
        .border_style(&BLACK)
        .draw()?;
    Ok(())
});
figure
y=x^2 0.0 0.2 0.4 0.6 0.8 -0.8 -0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 0.8 1.0 y = x^2

參考