前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JupyterLab 实战

JupyterLab 实战

作者头像
AlphaHinex
发布2024-04-09 19:53:38
1560
发布2024-04-09 19:53:38
举报
文章被收录于专栏:周拱壹卒周拱壹卒

Project Jupyter[1] (/ˈdʒuːpɪtər/) 是一个旨在开发跨多种编程语言的交互式计算的开源软件、开放标准和服务的项目。

Project Jupyter 已经开发和支持了交互式计算产品 Jupyter Notebook 和 JupyterLab。

Jupyter Notebook 是经典的 Notebook 交互界面,JupyterLab 是下一代的 Notebook 交互界面。

preview

本文主要介绍 JupyterLab 环境搭建,包括远程密码访问及添加 Kernel 以支持其他语言。

演示环境准备

容器

本文以在 docker 容器中搭建 JupyterLab 为例进行说明:

代码语言:javascript
复制
# 拉取 python 镜像
$ docker pull python
# 启动容器并映射 8099 端口作为访问 JupyterLab 的端口
$ docker run -d --name pycontainer -p 8099:8099 python tail -f /dev/null
# 进入容器
$ docker exec -ti pycontainer bash

miniconda

虚拟环境的管理以使用 Miniconda[2] 为例,在上面准备好的容器中,安装并初始化,使用 Quick command line install[3] 中提供的 Linux 环境安装语句:

代码语言:javascript
复制
$ mkdir -p ~/miniconda3
$ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
$ bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
$ rm -rf ~/miniconda3/miniconda.sh

因为本文准备的容器中只有 bash shell,使用如下命令进行初始化:

代码语言:javascript
复制
$ ~/miniconda3/bin/conda init bash

初始化后需要重新进入一次终端使配置生效,可退出容器之后再次进入。

上面 wget 的地址如果下载较慢,可改为使用清华大学开源镜像站中的地址 https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh ,并为Anaconda配置国内镜像源[4]

代码语言:javascript
复制
# 添加 channel
$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
# 查看 channel
$ conda config --show channels
# 设置搜索时显示 channel 地址
$ conda config --set show_channel_urls yes
# 删除指定源
# conda config --remove channels 源名称或链接
conda config --remove channels defaults

为 JupyterLab 创建一个新的虚拟环境 lab_env

代码语言:javascript
复制
# 新虚拟环境中 Python 版本使用 3.12
$ conda create -n lab_env python=3.12
# 激活虚拟环境
$ conda activate lab_env

至此,本文用来演示的搭建 JupyterLab 的基础环境已经准备好。

不再需要这个演示的虚拟环境时,可以通过下面方式移除:

代码语言:javascript
复制
$ conda deactivate
$ conda env remove --name lab_env

安装 JupyterLab

可按 官方文档[5] 使用 pip 进行安装:

代码语言:javascript
复制
$ pip install jupyterlab
# pip install jupyterlab -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/

也可以直接使用 conda 安装:

代码语言:javascript
复制
$ conda install jupyterlab
# 安装后查看版本
$ jupyter --version
Selected Jupyter core packages...
IPython          : 8.20.0
ipykernel        : 6.28.0
ipywidgets       : not installed
jupyter_client   : 8.6.0
jupyter_core     : 5.7.1
jupyter_server   : 2.12.4
jupyterlab       : 4.0.10
nbclient         : 0.8.0
nbconvert        : 7.14.1
nbformat         : 5.9.2
notebook         : not installed
qtconsole        : not installed
traitlets        : 5.14.1

此时就可以启动 JupyterLab 了:

代码语言:javascript
复制
$ jupyter lab

但因为我们是在容器中启动的服务,默认配置是不能直接访问的,需要调整配置以允许远程访问。

密码登录及远程访问

JupyterLab 可以通过启动参数及配置文件对默认配置进行调整。

先来看下配置文件的方式:

代码语言:javascript
复制
# 生成配置文件
$ jupyter server --generate-config
Writing default config to: /root/.jupyter/jupyter_server_config.py

生成的 jupyter_server_config.py 配置文件内容较多,可以根据需要对配置进行调整,允许远程访问和密码登录(及其他几个参数)的配置可参考下面内容:

代码语言:javascript
复制
# Configuration file for jupyter-server.

c = get_config()  #noqa

## Allow requests where the Host header doesn't point to a local server
#
#         By default, requests get a 403 forbidden response if the 'Host' header
#         shows that the browser thinks it's on a non-local domain.
#         Setting this option to True disables this check.
#
#         This protects against 'DNS rebinding' attacks, where a remote web server
#         serves you a page and then changes its DNS to send later requests to a
#         local IP, bypassing same-origin checks.
#
#         Local IP addresses (such as 127.0.0.1 and ::1) are allowed as local,
#         along with hostnames configured in local_hostnames.
#  Default: False
c.ServerApp.allow_remote_access = True

## Whether to allow the user to run the server as root.
#  Default: False
c.ServerApp.allow_root = True

## The IP address the Jupyter server will listen on.
#  Default: 'localhost'
c.ServerApp.ip = '*'

## DEPRECATED in 2.0. Use PasswordIdentityProvider.hashed_password
#  Default: ''
# c.ServerApp.password = ''
c.PasswordIdentityProvider.hashed_password='argon2:$argon2id$v=19$m=10240,t=10,p=8$77oaPHievVOfjuE0GHjaSA$eBTBF0mfA5qSOJq4ou3fBYeDE70x72xnaF1SYo2D034'

## The port the server will listen on (env: JUPYTER_PORT).
#  Default: 0
c.ServerApp.port = 8099

## The directory to use for notebooks and kernels.
#  Default: ''
c.ServerApp.root_dir = '/root'

其中密码的 hash 值可以通过如下方式获取:

代码语言:javascript
复制
$ python
Python 3.12.1 | packaged by conda-forge | (main, Dec 23 2023, 08:03:24) [GCC 12.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from jupyter_server.auth import passwd
>>> passwd('hinex')
'argon2:$argon2id$v=19$m=10240,t=10,p=8$77oaPHievVOfjuE0GHjaSA$eBTBF0mfA5qSOJq4ou3fBYeDE70x72xnaF1SYo2D034'

或:

代码语言:javascript
复制
$ jupyter server password
Enter password:
Verify password:
[JupyterPasswordApp] Wrote hashed password to /root/.jupyter/jupyter_server_config.json
$ cat /root/.jupyter/jupyter_server_config.json
{
  "IdentityProvider": {
    "hashed_password": "argon2:$argon2id$v=19$m=10240,t=10,p=8$7wNypI7oYGfIR5fmStC8AQ$SraH34Dd2Oj4o2cnfI7MMEP/0CEnm7N7GgdfU6b6l1s"
  }
}

将宿主机中准备好的配置文件拷贝至容器中(因为容器内没有文本编辑器):

代码语言:javascript
复制
docker cp ~/Desktop/jupyter_server_config.py pycontainer:/root/.jupyter/

之后再次启动 JupyterLab 即可通过宿主机的 8099 端口访问到界面了:

代码语言:javascript
复制
$ jupyter lab

hello world

多个配置

因为默认的配置文件是放在用户的 ~/.jupyter 路径下,在一个环境中想启动多个不同配置的 JupyterLab 服务的时候,就需要通过 --config 参数指定配置文件路径,或通过启动参数传入配置:

代码语言:javascript
复制
$ jupyter lab --no-browser --ServerApp.port=8090 --ServerApp.root_dir=/root --PasswordIdentityProvider.hashed_password='argon2:$argon2id$v=19$m=10240,t=10,p=8$7wNypI7oYGfIR5fmStC8AQ$SraH34Dd2Oj4o2cnfI7MMEP/0CEnm7N7GgdfU6b6l1s' --ServerApp.allow_root=True --ServerApp.ip='0.0.0.0'

或:

代码语言:javascript
复制
$ jupyter lab --config=/root/jupyter_server_config.py

Kernels

Jupyter 官网中提到:

Jupyter supports over 40 programming languages, including Python, R, Julia, and Scala.

这需要 Jupyter kernels[6] 的支持来实现。

安装的 jupyterlab 依赖中,包括了第一个 Kernel —— ipykernel[7],所以我们可以直接使用 Python 代码进行交互式计算:

ipykernel

下面命令可以查看当前环境中存在的 kernel 列表:

代码语言:javascript
复制
$ jupyter kernelspec list
Available kernels:
  python3    /root/miniconda3/envs/lab_env/share/jupyter/kernels/python3

目前只有默认安装的 kernel,接下来我们安装一个新的 kernel。

Bash Kernel

bash_kernel[8]

代码语言:javascript
复制
pip install bash_kernel

或:

代码语言:javascript
复制
conda install bash_kernel

此时,我们的 kernel 列表中出现了新的 kernel:

代码语言:javascript
复制
$ jupyter kernelspec list
Available kernels:
  bash       /root/miniconda3/envs/lab_env/share/jupyter/kernels/bash
  python3    /root/miniconda3/envs/lab_env/share/jupyter/kernels/python3

重启 JupyterLab,在界面中调整 kernel 为 Bash,就可以在 notebook 中执行 bash 命令了:

bash

调整 kernel

  • 修改 kernel 在界面中的显示名
  1. 使用 jupyter kernelspec list 查找 kernel 安装路径
  2. 编辑其中的 kernel.json 文件,修改 display_name 属性中的显示名
  • 移除 kernel
代码语言:javascript
复制
$ jupyter kernelspec remove bash

参考资料

[1]

Jupyter: https://jupyter.org/

[2]

Miniconda: https://docs.conda.io/en/latest/miniconda.html

[3]

Quick command line install: https://docs.conda.io/projects/miniconda/en/latest/#quick-command-line-install

[4]

Anaconda配置国内镜像源: https://blog.csdn.net/anglemanyi/article/details/112647242

[5]

官方文档: https://jupyter.org/install#jupyterlab

[6]

Jupyter kernels: https://github.com/jupyter/jupyter/wiki/Jupyter-kernels

[7]

ipykernel: https://pypi.python.org/pypi/ipykernel

[8]

bash_kernel: https://github.com/takluyver/bash_kernel

[9]

Jupyter Lab 密码登录、远程访问: https://blog.csdn.net/qq_27370437/article/details/117845115

[10]

给jupyter设置密码以能远程访问的方法: https://zhuanlan.zhihu.com/p/27339792

[11]

PasswordIdentityProvider.hashed_password not working or ignored on AWS ECS: https://discourse.jupyter.org/t/passwordidentityprovider-hashed-password-not-working-or-ignored-on-aws-ecs/22514

[12]

Jupyter Notebook Kernels: How to Add, Change, Remove: https://queirozf.com/entries/jupyter-kernels-how-to-add-change-remove

让 AI 辅助编写内部代码

JavaCC 实战

How to integrate SEATA AT mode with Spring Cloud

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-01-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 周拱壹卒 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 演示环境准备
    • 容器
      • miniconda
      • 安装 JupyterLab
      • 密码登录及远程访问
        • 多个配置
        • Kernels
          • Bash Kernel
            • 调整 kernel
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档