});

jupyter lab on win10

Highlight: Solved the jupyter lab using ServerApp rather than Notebook settings issue. [github issue #5970 #437]
解决了jupyter lab 3.0.14 配置时ServerApp, Notebook等文件设置优先级问题。

210707得新server一台,配置miniconda python-3.9-jupyter环境时,因为jupyte_server的加入,整个结构变得混乱,在此记录下。

jupyter lab安装

Miniconda的下载安装不赘述。
在安装好的shell中输入下列语句安装

conda install jupyterlab
# or
pip install jupyterlab

jupyter的依存关系

在安装间隙,讲解下conda、sever、lab、notebook、python的关系:

  • python为核心,在其之上还有一个简单包装-ipython(interactive python)
    除了没有web界面,ipython已经具备了notebook的所有核心功能。
  • notebook在ipython基础上增加基于web的GUI,界面相对简单,没有侧面的导航栏和丰富的插件管理器
  • 新版本的jupyter lab在安装时还会自带jupyter server,此前是jupyter lab的插件之一,目前来看**只负责转发和协调各类端口转发**,日后可能还会具备多用户协作功能。
  • 上述的三种jupyter软件(notebook, lab, server) 均为python的库。
    三者间的依存关系是后文冲突频发的重要原因。
    可以简单理解为,notebook负责写,lab协调各notebook,server则只是转发。
  • conda是一款环境environment和包package管理器,类似虚拟机平台vmware等,负责创建虚拟环境以及安装各种包时自动搜寻补充关联包。
    通过conda可以制造其他虚拟环境实现不同版本的python共存。

jupyter lab配置

需要先生成配置文件,这里注意生成的是notebook的配置文件
新版本会自动传递notebook的配置文件给lab和server,这一看似方便的举动,造成了网上频发错误和疑惑
即使在官方区也有存在疑问
如篇首提及的:
https://github.com/jupyter/notebook/issues/5970
https://github.com/jupyter-server/jupyter_server/issues/437

# 以下代码在cmd中输入
jupyter notebook --generate-config

# 按照提示查看目录中的jupyter_notebook_config.py文件

和linux中配置类似,首先生成password
生成时一定要注意,虽然 notebook配置文件中提示用notebook.auth生成,但是因为最终notebook会将该命令传递给lab。

# 先在conda_shell中输入ipython进入python环境
from jupyter_server.auth import passwd; passwd()
# 依次输入密码按下Enter两次后会返回
'sha1:####'

再修改下述两项即可完成配置,本地运行只需访问localhost:8888

# your_dir替换为你的路径,前方一定要加上r,表示为raw防止路径中的'\'被转译
# sha1:your_passwd_sha1替换为上一步生成的密码(再次注意要用jupyter_server.auth)
c.NotebookApp.notebook_dir = r'your_dir'

# sha1:your_passwd_sha1替换为上一步生成的密码(再次注意要用jupyter_server.auth)
c.NotebookApp.password = 'sha1:your_passwd_sha1'

# '*'表示匹配所有ip,即所有人都可以访问
c.NotebookApp.ip = '*'

# 禁止用host的浏览器打开jupyter,做服务器启动时比较有用
c.NotebookApp.open_browser = False 

# 打开jupyter lab的端口
c.NotebookApp.port = 88**

# 允许远程访问 
c.NotebookApp.allow_remote_access = True

环境(env)/内核(kernel)的安装与卸载

首先进入对应环境中

# 下文中的your_env_name均替换为所需要添加的环境的名称
# cmd或conda prompt中
conda activate your_env_name
# 安装ipykernel并载入当前环境
conda install ipykernel
python -m ipykernel install --name your_env_name --user USER_NAME (非服务器可以省略)

# 卸载需进入jupyter 中
jupyter kernelspec remove ENV_NAME
# 彻底删除环境还是通过conda
conda env remove -n ENV_NAME

带日志启动与静默运行

将日志记录在jupyter lab 根目录下,可在web端进行trouble shooting
也可以不打开浏览器

# 新建或覆盖日志文件
jupyter lab > '$jupyter_root_dir$\log.txt' 2>&1

# 在原日志文件上追加
jupyter lab >> '$jupyter_root_dir$\log.txt' 2>&1

# 追击日志文件且不开启浏览器
jupyter lab >> '$jupyter_root_dir$\log.txt' 2>&1 --no-browser

其他可能的报错与解决

nodejs缺失

jupyter 启动时cmd中返回如下图

[W 07:35:51.998 LabApp] Could not determine jupyterlab build status without nodejs

可能是nodejs未安装或版本过低,用conda安装即可

conda install nodejs

Unicodeescape

syntaxerror: (unicode error) 'unicodeescape' codec can't decode bytes in pos

出现这类情况多半是路径前忘加上 r”
导致被转译为正则表达式。
更改路径设置为 r’C:/####’即可

各种包下载缓慢或终端

该问题在按照pytorch官网指示,复制代码配置时出现下载终端,或大小不匹配。
因为pytorch包较大,pytorch和cuda包一起大约2.8GB,
国内连接(包括香港地区)很慢,用清华tuna库不支持最新版python 3.9更新
本次解决方法是修改conda的重连和断连参数,避免连接不稳定时引发的中止
其他修改方案可以【参考CSDN】

# 查看conda配置信息
conda config --show

# 修改对应信息
# 分别是重连,读取超时时间和重试次数
conda config --set remote_connect_timeout_secs 40
conda config --set remote_read_timeout_secs 100
conda config --set remote_max_retries 10

配置powershell可进行env切换

采用jupyter lab远程连接时,默认进入PS。无法直接用conda切入对应环境进行包的安装等其他配置操作。
参考https://blog.csdn.net/qq_38163755/article/details/88144767
按如下代码设置

# win+R 输入
sysdm.mpl

# 添加下列路径进入环境变量
$CONDA_ROOT_DIR/Miniconda
$CONDA_ROOT_DIR/Miniconda/Scripts
$CONDA_ROOT_DIR/Miniconda/Library/bin

# 打开anaconda prompt,输入以下命令
conda install -n root -c pscondaenvs pscondaenvs

# 以管理员身份启动PowerShell,并执行以下命令,输入y同意
Set-ExecutionPolicy RemoteSigned

# 重置conda和powershell的绑定
conda init powershell

# 重启powershell测试即可

补充:也可以采用cmd直接写入环境变量

# 检查现有所有环境变量
set

# 检查path变量
set path (或者 path)

# 追加环境变量
set PATH=%PATH%;d:\xxx

jptlb环境配置 (针对>jupyter lab v3.0 & python3.9)

安装sklearn后,发现jupyter内载入提示package not found
但本地切换环境后再cmd/bash内运行python时则一切正常
表明问题在于jupyter无法载入环境
经查是ipykernel 对于 python3.9支持较差
目前采用conda forge源中的nb_conda_kernels进行环境切换
安装后即可自动检测所有的conda环境,无需再使用ipykernel等安装
安装代码如下:

conda install -c conda-forge nb_conda_kernels

最新了解到,jupyter lab v3.0 后将notebook独立出来包装为ServerApp,这可能也是无法使用pykernel的原因之一,各个环境下似乎没有在安装jupyter notebook。在子环境查询jupyter –version,返回jupyter notebook not installed.
具体原因尚不明确,待探究。

相关链接

关于jupyter的基本操作,如环境与包管理,可阅读:
centos7配置jupyter lab (python-3.7)
关于远程访问jupyter服务(可能需要密码访问):
将win10系统电脑转换为服务器

展望

查询config时,发现有SSL设置。
后续尝试下HTTPS协议,和frp转发。