派玩python之自部署JupyterLab

派玩python之自部署JupyterLab

序言

Python语言以敏捷易用著称,可以帮助我们快速完成很多突发工作。此外在统计分析,机器学习使用也非常广泛。可以说就像每个家庭都要备一把瑞士军刀一样, 如果能够有一个开箱即用的Python运行环境能够随时随地使用,就是太好不过了。
对于追求效率选择Python的人来说, 安装Python,调整环境变量的步骤都想免除。
这不, Jupyter的出现很好解决了这个问题。 它提供了免费即用的浏览器就能用执行容器,https://jupyter.org/try

这样就好了? 当然没有, 上面也说了,瑞士军刀要放家里。况且免费容器解一时之急,无法保证长期稳定使用。既然家中有树莓派,当然要自部署(self-hosted)了。

以下自部署使用通用方案,不仅适合树莓派,也适合其他可以运行Docker容器的任何平台,不限NAS,PC等。

正题

  1. 安装Docker容器和docker-compose(略)
    因为网上资源较多, 这里不赘述。 关于树莓派安装Ubuntu64的可以看之前文章

心急的用户直接

docker run -p 8888:8888 jupyter/scipy-notebook

想使用docker-compose规范化部署的继续往下看。

  1. 编辑docker-compose.yml文件
    juypter官方已经给出了Docker镜像, 我们直接使用即可。含AMD64和ARM64两个版本, 所以树莓派安装Ubuntu64是多么明智。 ARM64是最近两个月才出来,感谢一下。 但是注意ARM64只支持到jupyter/scipy-notebook这一层, 在下面Tensorflow和Spark过于庞大不太适合移动端了。
version: '3.1'
services:
  jellyfin:
    image: jupyter/scipy-notebook:latest
    restart: "unless-stopped"
    container_name: jupyter
    ports:
      - 8888:8888
    environment:
      - "JUPYTER_ENABLE_LAB=yes"
      - "RESTARTABLE=yes"
    command: start-notebook.sh --NotebookApp.password='sha1:6fc67477a931:5bfac3b859fb0ebca59703588a8c844cd7129ee5'
    volumes:
      - /your/path/on/the/host/work:/home/jovyan/work

其中password后面的混淆串,需要用IPython.lib.passwd()生成。它在包ipython里,因此在安装了里面执行即可。下面是在命令行执行的例子。

pip install ipython
python -c "import IPython;print(IPython.lib.passwd())"

此外再根据情况修改 volumes的目录, 保存文件名docker-compose.yml

如果不需要jupyter lab, 只需要jupyter notebook, 将文件中JUPYTER_ENABLE_LAB=yes注释或删除。

  1. 执行和访问
    在上述文件目录下执行docker-compose up -d 完成。访问 http://ip:8888/lab 使用。输入上面混淆前的密码就可以登入。 如图。

----_2021-10-21T12-26-10.901Z

图1 jupyter lab工作界面

到此安装完成。 此时在宿主机(host)上的work目录能够访问到jupyter lab工作目录,实现文件互通。进而,无论在host上进行git clone还是使用jupyter lab的Terminal使用git进行代码开发和同步都是可以的。

4.conda环境隔离和juptyer联动
当你开始开发, 有时候需要不同版本python,或者不同环境隔离时,就需要conda了。scipy版本镜像已经默认安装了conda,见图1右侧。默认在base环境。现在我们尝试让jupyterlab使用python3.6版本。在jupyter中,这个叫内核(kernel)。下面开始
首先像正常使用conda一样没区别, 创建一个新环境并启用,命令如下:

conda create -n python3.6 python=3.6 ipykernel
conda activate python3.6

上面顺带安装了ipykernel包,是为了将这个环境安装到jupyter。错过了切换后执行pip install ipykernel 是一样的。

现在执行命令

python -m ipykernel install --user --name Python3.6 --display-name "Python 3.6"

成功后关闭打开或者刷新一下jupyterlab页面就可以了, 不需要重启docker实例。点开ipynb文件右上角的kernel,发现已经出现了。如下图
-----2021-10-21-211937

图2 jupyter lab的change kernel界面

结束

本文全部内容到此结束, 下回介绍如何使用远程kernel,实现在树莓派使用jupyter notebook当作IDE开发, 运行放在远程算力强劲的机器上。