通过 conda 安装 jupyterlab 并配置为 systemd 服务
基础安装
- 安装
anaconda
或者miniconda
,我个人比较喜欢后者 - 创建一个新的独立环境,比如说
conda create -n thelab
- 进入这个环境,
conda install jupyterlab
conda install jupyterlab-language-pack-zh-CN
中文包conda install jedi-language-server pyright python-lsp-server texlab
若干附加包,反正硬盘很便宜。
jupyter 配置
执行jupyter lab --generate-config
命令,生成~/.jupyter/jupyter_lab_config.py
,对其进行编辑。文件内有很详细的解释,主要需要编辑的地方包括:
- 如果需要远程访问,即任何不从本机的访问,即使你是用内网穿透、反向代理一类的办法,也要设置
c.ServerApp.allow_remote_access = True
- 绑定地址
c.ServerApp.ip
按实际需要改,比如用frp转发的话可以留默认值localhost
,端口c.ServerApp.port
按实际情况改; c.ServerApp.root_dir
是网页可操作文件的根目录,当然别依赖这个保证安全;- 如果希望服务一直开着,
c.ServerApp.quit_button = Fasle
避免手滑关闭服务; - 执行
jupyter lab password
设定密码,注意如果暴露公网,这玩意儿应该是很不安全的;
systemd 配置
因为jupyterlab
是安装在conda
环境中,从外面是不能直接调用的,必须先激活环境,这就给systemd
调用造成了一点困难。
所以,先写一个简单的包装脚本,放在miniconda
的安装目录下:
#!/bin/bash
rootDir=$(cd $(dirname $0); pwd)
source ${rootDir}/bin/activate thelab
jupyter lab
调用它就相当于激活后调用jupyter lab
了。
说张话啦!
接下来,写如下service
文件,放到/lib/systemd/system/jupyter-lab@.service
文件:
[Unit]
Description=jupyter-lab
After=network.target
[Service]
Type=exec
ExecStart= /usr/bin/bash /home/path/miniconda/jupyterlabwrapper.bash
Restart=always
User=%i
[Install]
WantedBy=default.target
User=%i
的作用是支持以用户身份运行服务,与上面文件名中的@
配套。之后,执行:
sudo systemctl enable --now jupyter-lab@$USER
就会创建一个以你自己的用户名为后缀的服务。如果是多人服务器,那么各自执行systemctl enable --now jupyter-lab@$USER
就会创建多个服务,当然每个人要自己配置端口和目录。
实际上写死自己的用户名估计也行。如果是那种只有root账户的精简vps把这一行删了也行。
然后,自己处理域名绑定,TLS一类的问题吧。
调用 conda 的其他环境做为 kernel
conda
或者venv
一类的优势是可以通过虚拟环境让多个开发环境独立——否则我们直接全局安装就行了,也不用折腾上面的jupyterlabwrapper.bash
。
但要让jupyterlab
把这个优势用起来,还是需要动一下手的。
假定我们想要安装一个名叫yiliangjiu
的独立环境,可以这样,首先conda create -n yiliangjiu
并激活、安装所有你想要独立的包,然后在这个环境内:
conda install ipykernel # 会安装一大堆东西,几乎是半个`jupyter`了,但这年头硬盘便宜嘛
ipython kernel install --user --name=yiliangjiu # 还有额外的 display name 选项迎合外观党,自己 ipython kernel install --help
然后,关闭所有页面,重启jupyter-lab
服务,然后在打开网页就看到新的 kernel 了。
如果不想要这个环境了,不是在yiliangjiu
环境下操作,而是要在jupyterlab
所在的环境下操作:
jupyter kernelspec list # 查看和确认名称
jupyter kernelspec uninstall yiliangjiu # 完成删除,并且会显示储存这个配置文件的目录
添加 julia kernel 到 jupyterlab
(还没实践,回头补充)
其他一些小经验
移动 anaconda / miniconda 的安装位置
结论是最好别移动。Windows没研究过,Linux下有大量脚本在安装的时候写死了路径,比如conda
、pip
这类命令其实全是脚本。
所以,卸了重装吧。
oh-my-zsh 环境下的 conda 命令自动补全插件
git clone https://github.com/esc/conda-zsh-completion ${ZSH_CUSTOM:=~/.oh-my-zsh/custom}/plugins/conda-zsh-completion
然后,编辑.zshrc
:
找到plugins=(… conda-zsh-completion)
(刚装好一般就一个git
插件),把conda-zsh-completion
加进去。
然后,找到关于source oh-my-zsh.sh
的命令,在这一行之后加上:
autoload -U compinit && compinit
退出再进来或者source .zshrc
就可以自动补全了。
重要
但是,安装了这玩意儿之后,手敲conda install
之后不要按Tab
,因为它似乎会调用python
联网查询可用的包,很慢还容易出错。