Wenyin 的拾萃园
Jupyter on WSL2

WSL2 似乎因为用了容器的缘故比 WSL1 的隔离做得更好了,当然也会给用户带了一些配置上的麻烦。

我们直接从已经安装好的 WSL2 出发,如果读者还未安装 WSL2,请参照微软官方教程

本攻略配置:Windows 10 版本 OS Build 20262.1, WSL2 Ubuntu 20.04

WSL2 最劝退新手的当然是没有 GUI 用户界面了,对于没有见过 UNIX 类系统的同学可能上手很困难,但是不要怕,科研人员需要知道的基本操作非常少。下面我们一步步实现在 Ubuntu 20.04 上启动 Jupyter。

安装 包 Install Packages

崭新的 WSL2 没有 Python3 的包,我们先更新源,之后安装以下几个包,其中的 python3-pip,即 pip 是我们常用到的 Python 包管理器。

sudo apt update && upgrade
sudo apt install python3 python3-pip ipython3

然后安装 Jupyter,

pip3 install jupyter

现在 Jupyter Lab 体验更好,可以顺便安装一下。

pip3 install jupyter

配置 Configure Jupyter

由于 WSL2 没有图形界面,Jupyter Notebook 启动的时候自动开启浏览器,这在 WSL2 中当然就不必要了。我们通过配置 Jupyter Notebook 来关掉这一功能,首先让 Jupyter Notebook 生成手动配置文件,

jupyter notebook --generate-config

有些教程可能会让你在 ~/.bashrc 中添加命令别名 alias 来将 jupyter-notebook 命令替换成 jupyter notebook --no-browser,这并不是一种优雅的做法,并不推荐。

生成的文件默认会放在 /home/<username>/.jupyter/jupyter_notebook_config.py,命令运行完也会显示 jupyter_notebook_config.py 的路径。

你可以

(1) 在 Windows 里直接控制 Ubuntu 的文件(可能 Windows 10 稳定版用户还没有这个功能),用自己喜欢的编辑器修改,我喜欢 VS Code;

(2) 也可以选择在 Ubuntu 中直接修改,用 Vim 或 nano。

vim ~/.jupyter/jupyter_notebook_config.py

Vim 的操作一向让人头疼,对新手不友好,但是掌握简单的命令仍然有必要。
进入 Vim 之后一开始并不是编辑模式,所以滚键盘也不会对文本有任何改动,反而可能会按到一些奇怪的按钮。先按 i 字母转到插入模式,终端左下角会显示 <Insert>,然后通过上下左右 ↕↔ 按钮移动光标,修改完成后按 Esc 退出,左下角的 <Insert> 会消失,按 :wq 保存并退出,按 :q 不保存退出。

下面我们对该文件中的一些选项进行修改。

启动时不自动打开浏览器 Do not open browser automatically

解除对下面选项的注释,并将值设为 False。

c.NotebookApp.open_browser = False

访问 Visit Jupyter

在 WSL 中自然是无法用浏览器打开 Jupyter,这时我们的 WSL 作为本地网的服务器,Jupyter 即是对外提供的服务,Windows 则是客户(Client)。为了允许从 Windows 的访问,我们修改以下两项。

# 允许任何来源访问你的服务器
c.NotebookApp.allow_origin = '*'
# Notebook 服务器会监听所有的 IP 地址
c.NotebookApp.ip = '0.0.0.0'

启动 Launch Jupyter

然后就可以启动你的 jupyter 了。

jupyter notebook

jupyter_notebook_success_on_WSL.png

Jupyter 会给你三个链接进行登录,但是前面两个我似乎登录不上,127.0.0.1 的那个可以。

参考 Reference

Setting up JupyterLab on Windows 10 with WSL 2

Jupyter Notebook in Windows subsystem for Linux (WSL)

Why I can't access remote Jupyter Notebook server?

Bonus

如果你是重度 Jupyter 使用者的话,也可以顺便安装一下插件,Jupyter notebook extensions,这个 README 适合于各平台用户,而且刚好该链接中给出的安装插件的例子是我相当钟爱的 fold/unfold 插件。