当前位置: 首页 > news >正文

服务器部署notebook+xedu+机器学习编程环境多用户登录

参考:https://blog.csdn.net/qq_29183811/article/details/126772906

 

Linux部署JupyterHub实现多用户使用Jupyterlab

 

一、安装docker

1、安装

# 重启docker
systemctl restart docker # 设置docker为开机自启动
systemctl enable docker

  

二、拉取镜像并创建容器

1、拉取镜像

docker pull debian:latest

  

  • debian:latest 是 Debian 官方在 Docker Hub 上维护的镜像标签。
  • latest 默认指向 Debian 当前最新的稳定版(stable),例如 Debian 12(bookworm)或 Debian 11(bullseye),具体取决于 Debian 官方的更新策略。
  • 这个镜像是 最小化基础镜像(minimal base image),仅包含最基本的系统工具和库,适合作为构建其他镜像的基础。

举个例子:

截至今天(2025年8月16日),debian:latest 很可能指向 Debian 12 "bookworm",因为 Debian 12 是当前最新的稳定版(发布于2023年6月),除非 Debian 13 已经发布并成为新的 stable。

2、创建容器

docker run -itd --hostname=jupyterhub -v /etc/jupyterhub:/etc/jupyterhub --name=jupyterhub --restart=always -p 8000:8000 debian

  此处使用debian作为基本镜像进行搭建,也可以使用ubuntucentos等镜像,对外暴露端口号为8000,若有端口冲突,可改为其他端口,jupyterlab服务运行在容器的8000端口上。

 

3、进入容器

创建完成后进入容器,接下来的众多命令均在容器内执行:

docker exec -it jupyterhub /bin/bash

 

三、安装必要的包

1、更新软件源

 

apt-get update -y && apt-get upgrade -y && apt-get autoremove -y

  

image

 # 如果速速很慢,国外源的问题,可以尝试先修改源

# 1) 把官方源换成清华镜像(debian bookworm 为例)
sed -i 's|http://deb.debian.org|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list
sed -i 's|http://security.debian.org|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list

# 1. 把 https 换成 http(临时)
sed -i 's|https://mirrors.tuna.tsinghua.edu.cn|http://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list

# 2. 更新索引并安装缺失的包
apt-get update -y
apt-get install -y ca-certificates openssl

# 3. 再把 http 换回 https(永久)
sed -i 's|http://mirrors.tuna.tsinghua.edu.cn|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list

# 4. 后续正常更新
apt-get update -y && apt-get upgrade -y && apt-get autoremove -y

 

 

  

image

 

2、安装软件

apt-get install vim procps wget -y

  

image

 

四、安装Miniconda3

1、获取下载地址

下载地址:Miniconda3清华镜像站下载

选择较新版本,复制链接,

image

 

 Miniconda3-py310_22.11.1-1-Linux-x86_64.sh

 https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py310_22.11.1-1-Linux-x86_64.sh

 

2、下载并安装

# 下载
## wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py39_4.12.0-Linux-x86_64.sh
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py310_22.11.1-1-Linux-x86_64.sh

# 赋予可执行权限 
chmod +x ./Miniconda3-py310_22.11.1-1-Linux-x86_64.sh
# 执行安装 
./Miniconda3-py310_22.11.1-1-Linux-x86_64.sh

  

image

 回车,空格到询问 yes 这里,输入 yes

image

 

修改路径

image

 

image

 

 

 

 

 执行安装后,有几点注意:

  •  刚执行的时候是服务条款,一路按Enter,然后要输入的时候输入yes即可;

 

  •  接下来会让确认路径,默认为~/miniconda3不要装在root用户目录下,建议装在/opt/miniconda3目录下,装root目录下之后会出现很多问题;

 

  •  最后询问是否初始化,选择yes

 

 

  • 安装完成后可删除安装包,以节省硬盘空间

 

 

3、验证是否安装成功

安装完成后重启终端,然后再进去,再进入发现终端(base)开头,说明安装成功

 

验证一下

# 重新加载 shell 环境
source /root/.bashrc# 看版本
conda --version

  

 

image

 

 

五、安装nodejs和npm

nodejsnpm可以使用apt-get包管理工具进行安装:

 

apt install nodejs npm -y 

 

 

但版本可能不是很新,以下提供另一种安装方法:

1、下载

node.js中文官网:下载 | Node.js 中文网 (nodejs.cn)

 

image

 

 https://npmmirror.com/mirrors/node/v22.18.0/node-v22.18.0-linux-x64.tar.xz

 

访问界面,选择Linux 二进制文件 (x64),右键复制链接

返回终端,下载:

 

wget https://npmmirror.com/mirrors/node/v22.18.0/node-v22.18.0-linux-x64.tar.xz

  解压:

 

tar -xvf ./node-v16.17.0-linux-x64.tar.xz

  移动并重命名

 

mv node-v16.17.0-linux-x64/ /opt/nodejs

  

2、配置环境变量

 

vim /etc/bash.bashrc

  追加以下内容:

 

#set for nodejs
export NODE_HOME=/opt/nodejs
export PATH=$NODE_HOME/bin:$PATH

  使环境变量立即生效

 

source /etc/bash.bashrc

  

3、验证

nodejsnpm安装完成,使用以下命令进行验证

 

node -v # 查看node.js版本
npm -v  # 查看npm版本

  

 

image

 

 

六、配置镜像源

npm、pip和conda的软件源都是国外的,在国内访问比较慢,换源有利于提高下载速度。

1、npm换源

 

npm config set registry http://registry.npmmirror.com  # npm换淘宝源

  

2、pip换源

 

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple # pip换清华源

  

 

3、conda换源

 

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/   
conda config --set show_channel_urls yes 

  把 free 源和 msys2 源删掉(conda ≥ 4.7 后这两个基本没用)

conda config --remove channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --remove channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2

  

 

 

 

 

七、时区设置

不设置时区后续可能会出现一些问题。

终端执行:

 

dpkg-reconfigure tzdata

  

 选择时区时选择Asia/Shanghai

 

image

 城市

image

 

八、安装jupyter相关的库

1、需要npm安装的

 

npm install -g configurable-http-proxy

  

2、需要conda安装的

 

pycurl  

这里需要大内存;;------------------------  

conda install pycurl 

  

image

 

 

image

 

image

 

 

pycurl必须用conda装,用pip装会报错,或用源码编译安装,没有pycurl就会导致普通用户无法开启jupyterlab

 
 
  • pycurl 是 Python 对 libcurl 的封装,用来给 JupyterHub 提供 高性能 HTTP/HTTPS 客户端 能力(JupyterHub 内部用它做代理、API 调用、Spawner 与 Hub 通信等)。
  • 安装包本身并不大:
    • Linux x86_64 wheel 只有 ≈ 250 kB。
    • 但它依赖 libcurl 及 openssl 等系统库,Conda 会一次性把兼容版本一起拉下来,所以 下载量可能达到 5-10 MB。
  • 真正让你觉得“卡死”的原因通常不是包大小,而是 网络 + 依赖解析:

为什么看起来“卡”

  1. 依赖解析阶段
    Conda 要先算一遍 环境与依赖约束,这一步在容器/低配机器上 CPU 占用高,看起来像假死,其实后台在算。
  2. 清华源 TLS 握手慢
    如果刚装完 ca-certificates,但网络到 TUNA 的 TLS 握手偶尔延迟高,也会出现长时间停顿。
  3. 没有进度条
    旧版 Conda 在解析阶段不显示任何输出,所以 几分钟没动静 会让人误以为死机。

如何缓解

  • 第一次耐心等 3-5 分钟,别反复 Ctrl-C。
  • 换用 mamba(conda 的 C++ 实现,解析快很多):

离线安装

wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/mamba-1.5.8-py310h51d5547_0.conda
conda install ./mamba-1.5.8-py310h51d5547_0.conda
conda install -n base mamba -c conda-forge
mamba install pycurl

  

micromamba(跳过索引)

如果你机器内存小,micromamba 不会解析大索引,速度更快:
# 下载并解压
wget -qO- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/micromamba-1.5.8-0.tar.bz2 | tar -xj bin/micromamba
mv bin/micromamba /usr/local/bin/# 安装 pycurl / mamba 任意包
micromamba install pycurl -c conda-forge -y

  

 
 
 

3、需要pip安装的

 

pip install jupyterlab jupyterhub jupyterhub-idle-culler autopep8 pycodestyle mccabe pycodestyle pydocstyle pyflakes pylint rope yapf whatthepatch

  

解释一下安装的包的含义:

  • jupyterlabjupyter notebook环境
  • jupyterhubjupyterhub主体程序
  • jupyterhub-idle-culler用于处理用户空闲进程

 

image

 

 

九、配置jupyterhub

1、生成配置文件

 

jupyterhub --generate-config -f /etc/jupyterhub/jupyterhub_config.py

  

 

2、编辑配置文件

vim /etc/jupyterhub/jupyterhub_config.py

  

将以下内容追加到配置文件/etc/jupyterhub/jupyterhub_config.py

import sysc.Authenticator.admin_users = {'root'}  # 管理员用户
# 管理员是否有权在各自计算机上以其他用户身份登录,以进行调试,此选项通常用于 JupyterHub 的托管部署,以避免在启动服务之前手动创建所有用户
c.JupyterHub.admin_access = True
c.PAMAuthenticator.open_sessions = False # 解决多用户同时登录问题。
c.Spawner.args = ['--allow-root']  # 允许root用户使用
c.LocalAuthenticator.create_system_users = True  # 允许创建其他用户
c.Spawner.notebook_dir = '~'  # 设置工作目录
c.Spawner.default_url = '/lab'c.JupyterHub.extra_log_file = '/etc/jupyterhub/jupyterhub.log' # 指定额外的日志
c.JupyterHub.pid_file='/etc/jupyterhub/jupyterhub.pid' # 指定pid文件位置
c.JupyterHub.db_url='/etc/jupyterhub/jupyterhub.sqlite' # 指定数据库文件位置
c.JupyterHub.cookie_secret_file='/etc/jupyterhub/jupyterhub_cookie_secret'  # 指定cookie_secret文件位置
c.ConfigurableHTTPProxy.pid_file='/etc/jupyterhub/jupyterhub-proxy.pid' # 设置proxy.pid文件位置# 设置用户一小时内无使用则关闭jupyterlab服务
c.JupyterHub.services = [{'name': 'idle-culler','command': [sys.executable, '-m', 'jupyterhub_idle_culler', '--timeout=1800'],}
]c.JupyterHub.load_roles = [{"name": "list-and-cull",  # name the role"services": ["idle-culler",  # assign the service to this role],"scopes": [# declare what permissions the service should have"list:users",  # list users"read:users:activity",  # read user last-activity"admin:servers",  # start/stop servers],}
]

  

十、启动

(1)正常启动

创建启动脚本:

vim /etc/jupyterhub/start_jupyterhub.sh

  写入以下内容:

nohup jupyterhub -f /etc/jupyterhub/jupyterhub_config.py > /dev/null 2>&1 &

  赋予可执行权限:

chmod +x /etc/jupyterhub/start_jupyterhub.sh

  然后执行脚本启动jupyterhub

/etc/jupyterhub/start_jupyterhub.sh

  

(2)设置开机自启动

若每次启动都需要手动运行脚本来启动是在太麻烦,所以我们将脚本添加到容器的自启动中,让其随着容器的启动而启动。

容器在启动时,会先执行/root/.bashrc文件,我们将要执行的脚本加入其中即可实现jupyterhub随容器的启动而启动

vim /root/.bashrc

  添加以下内容:

if [ -f /etc/jupyterhub/start_jupyterhub.sh ]; then/etc/jupyterhub/start_jupyterhub.sh
fi

  

添加完成后,我们可以退出容器,然后让容器重启,看重启后jupyterhub是不是自动启动了

退出 docker

exit 

# 重启容器
docker resatrt jupyterhub

 

十一、访问

1、进入容器

创建完成后进入容器,接下来的众多命令均在容器内执行:

docker exec -it jupyterhub /bin/bash

 

 

1、设置容器 root 密码

在访问前先设置密码,root用户为管理员,docker中的root用户默认是没有密码的,需要我们设置一个:

 

passwd root

  

image

 确认 root 允许登录
容器默认允许 root 登录,但如果你改过 sshd_configpam 配置,就可能被禁用。
临时测试可以:

grep root /etc/shadow

  

 

2、登录

然后再进行登录

 

查看登录日志

 tail -f /etc/jupyterhub/jupyterhub.log

  

image

 

让 root 重新出现在白名单

编辑配置文件 /etc/jupyterhub/jupyterhub_config.py,确认并追加:
# 如果文件里已有,就改;没有就加在最后
c.Authenticator.admin_users = {'root'}          # 管理员
c.Authenticator.allowed_users = {'root'}        # 允许登录

  

 重启 JupyterHub 使配置生效

# 先停掉旧进程
pkill -f jupyterhub# 再启动
/etc/jupyterhub/start_jupyterhub.sh

  

 

然后再进行登录

用户登录:http://IP:8000/hub/login
用户管理:http://IP:8000/hub/admin

  

image

 

登录的密码是你系统用户的密码。若是要添加用户,在用户管理界面添加用户后,还需要在系统终端中修改密码。

登录界面:

登陆后的jupyterlab界面:

image

 

十二、用户管理

1、单个或较少用户管理

(1)添加用户

使用root账户登录管理界面,然后点击Add Users添加用户,添加用户时候,每一行一个用户。可选择Admin设置添加的用户是否是管理员

image

 

添加后的界面如下:

image

 

(2)修改用户

添加用户后,可以点击Edit User进行用户的删除、修改用户名和赋予管理员权限等操作。

image

 

(3)修改和设置用户密码

jupyterhub无法在管理界面设置密码,设置密码需要在终端中进行设置。在jupyterhub终端中添加的用户,将被默认添加到系统用户中,并在/home文件夹下生成相应的用户目录:

查看用户

 ls /home/

  

image

 

因此,修改密码需要在终端中使用passwd命令来修改密码:

  • root用户可直接使用passwd 用户名来修改密码,且修改密码不需要知道当前的密码:

image

 

2、多用户批量管理

当需要有大量添加大量用户时,我们就需要使用chpasswd命令来批量修改密码

(1)添加用户

首先在管理面板中批量添加用户

image

 

(2)批量修改密码

然后将用户名和密码对应,写成用户名:密码的形式,存储在文件中,如存储在passwd.txt文件中,文件内容如下所示:

lab01:3200201137
lab02:3200204233
lab03:3190707121
lab04:3200201232
lab05:3201902211
lab06:3200209116
lab07:3211902229
lab08:3211901113
lab09:3190113205
lab10:3210204416
lab11:3210204328
lab12:3210204326
lab13:3210204314
lab14:3210204428
lab15:3210201309
lab16:3200204317
lab17:3201901231
lab18:3201901103
lab19:3201901107
lab20:3210201225

  

然后在终端执行以下命令,即可完成用户密码的批量修改

chpasswd < passwd.txt

chpasswd < passwd.txt

  

这样添加的用户就可以通过用户名和设置的密码来访问了

十三、jupyterlab功能扩展
jupyterhub是用来管理多用户使用jupyterlab,但我们实际去写代码的界面其实还是jupyterlab。初始的jupyterlab功能十分有限,没有代码提示和自动补全、没有代码自动保存、没有代码格式化,所以我们需要通过安装插件来补全这些功能。jupyterlab插件有很多,这里介绍几个常用的。
 

 

1、中文界面

默认的jupyterlab是英文界面,我们需要安装插件来中文化

pip install jupyterlab-language-pack-zh-CN

  

image

 

安装后需要配置

 

管理员的页面 

http://ip:8000/user/root/lab

 

image

 

2、自动保存

自动保存功能不需要安装插件,且jupyterlab是开启的,但jupyterlab中自动保存间隔是120秒,我们需要修改这个值。

  • 依次打开设置->高级设置编辑器->JSON设置编辑器

image

 

  • 然后添加自己的设置

image

 

3、自动闭合括号

设置->笔记本,勾选自动闭合括号

image

 

4、代码格式化

jupyterlab_code_formatter

# 安装插件
pip install jupyterlab_code_formatter
# 安装格式化工具
pip install black isort

  

该插件安装后需要重启才生效。

当我们写完代码后,点击如图所示的图标,代码就会被自动格式化:

5、树目录

jupyterlab-unfold

pip install jupyterlab-unfold

  

6、绘制可交互图

jupyterlab-matplotlib

pip install ipympl

  该插件安装后,使用matplotlib绘图时只要加上以下代码,即可绘制可交互的图像:

%matplotlib widget

  

绘制的效果如下,可以点击图中的点查看对应数值,以及放大缩小图像等:

image

 

7、代码补全和自动提示

pip install jupyterlab-lsp python-lsp-server

  

安装后重启,重启完成后进入到jupyterlab界面,然后进行设置。

进入设置,选择Code Completion,勾选Continuous hinting后刷新界面即可

image

 

效果如下,和Pycharm等IDE提供的代码提示类似:

 

image

 

 

8、代码执行时间

 

pip install jupyterlab_execute_time

  如图所示,可以看到上次执行代码的时间和执行耗时:

 

image

 

9、绘制流程图

 

pip install ipydrawio

 安装重启后,在开始页,可以看到增加了两个选项,点击可以创建绘图

 

image

 

 创建的绘图界面如下,和drawio相似,其实就是drawio的jupyterlab插件:

 

image

 

10、多用户设置同步问题
当我们安装完插件后,需要进行一些设置才能够使用,但配置后我们发现只有当前用户可以使用,其他用户并没有进行配置。这是因为每个用户配置后相应的配置文件均保存在~/.jupyter文件夹下,若我们需要多个用户同时进行某项配置时,最简单的办法是直接使用配置好的用户的.jupyter文件夹替换要配置用户的文件夹即可,那样所有用户的配置都一样了。

值得注意的是,替换文件夹后要配置相应的权限,以免替换后被替换的用户无法访问配置文件而无法加载。最简单的方法是以下设置:
 

 

chmod -R 777 ~/.jupyter

  

 

  • 当用户成百上千的时候,这么替换也属实麻烦,可以编写python或shell脚本去实现替换,以加快效率

 

十四、解决终端无法正常显示中文

1、安装locales

 

apt-get install locales -y

  

2、添加配置

 

dpkg-reconfigure locales

  选择zh_CN.UTF-8 UTF-8

image

 

 

3、查看语言设置

 

locale

  

 

一键修复(两条命令即可)

 

# 1. 把 zh_CN.UTF-8 设为默认
update-locale LANG=zh_CN.UTF-8 LC_ALL=zh_CN.UTF-8# 2. 重新加载 shell 环境
source /etc/default/locale

  

当前 shell 没有继承 /etc/default/locale
Debian 容器里默认的 /bin/sh -> dash 并不会自动读取它。
手动 source 也不行,是因为:
    1. dash 不认识 LANG=xxx 这种 Bash 语法;
    2. 容器启动时并没有执行 login / pam_env,所以所有变量都是空的。
# 1. 直接在当前 shell 里导出
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8# 2. 验证
locale

  

 

image

 

 若不是,可以添加环境变量

 

export LANG=zh_CN.UTF-8

  

 追加到/etc/bash.bashrc文件中,然后再使其生效

 

source /etc/bash.bashrc

  

4、效果

设置完成后重新打开终端,设置成功

原来的显示

 

image

 

 现在的显示

 

image

 

 

十五、解决matplotlib绘图异常

1、问题描述

matplotlib绘图代码如下:

 

import numpy as np
import matplotlib.pyplot as pltplt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']x=np.linspace(-np.pi,np.pi)
y1=np.sin(x)
y2=np.cos(x)
plt.title("常见三角函数")
plt.plot(x,y1,x,y2)
plt.show()

  报错:

 

Font family [‘sans-serif‘] not found.Falling back to DejaVu Sans

  

 

image

 

 原因:系统中缺少SimHei字体

 

 

2、问题解决

(1)获取matplotlib的字体目录

 

pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

  

import matplotlib
print(matplotlib.matplotlib_fname())

  

 

(2)打开字体目录

由上一步获取的地址修改得到

 

cd /opt/miniconda3/lib/python3.10/site-packages/matplotlib/mpl-data/fonts/ttf

  

 

3)下载SimHei字体

下载地址:https://www.fontpalace.com/font-download/SimHei/

下载后复制到上一步得到的字体目录

image

 

(4)清除matplotlib缓存

将服务器文件 复制到 容器

# 语法:docker cp <本地文件> <容器名>:<容器内绝对路径>
docker cp ./SimHei.ttf jupyterhub:/opt/miniconda3/lib/python3.10/site-packages/matplotlib/mpl-data/fonts/ttf/

  

image

 

进入容器

docker exec -it jupyterhub /bin/bash

  

(4)清除matplotlib缓存
# 先获取缓存路径
import matplotlib
matplotlib.get_cachedir()

  

'/root/.cache/matplotlib'

  

# 清除缓存
rm -rf /root/.cache/matplotlib

  

 

(5)修改配置文件

配置文件即第一步获取的文件

容器里 执行:

python -c "import matplotlib; print(matplotlib.matplotlib_fname())"

  

 

 这个地址是python地址版本和自己对应

vim /opt/miniconda3/lib/python3.10/site-packages/matplotlib/mpl-data/matplotlibrc

  修改的几处如下:

# 删除前面的#号
font.family:  sans-serif# 删除前面的#号,并在后面添加SimHei
font.serif:    SimHei, DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif# 将True盖为False
axes.unicode_minus: False

  

(6)重启

重启后再运行没问题了

十六、内存占用问题
用户每打开一个Notebook文件,系统就会开始一个jupyter notebook内核进程,用户退出后进程不会自动终止;

jupyterhub虽然可以自动释放资源,但并不会释放jupyter notebook内核进程;

当多个用户访问后,内存一直在增加,没有得到释放;

暂时没有好的解决方法,只能够让jupyterhub容器定时重启;

我们使用Linux中的crontab命令设置定时重启jupyterhub容器,crontab是Linux系统下用于执行定时任务的一个工具,用法可以自行百度。

 

crontab -e

  

Debian 基础镜像为了瘦身,默认不带 cron / crontab

apt-get update && apt-get install -y cron

  

添加以下字段:

 

30 2 * * * docker restart jupyterhub

  

 

  • 此字段指定每天凌晨2点30分重启jupyterhub容器 

 

 

 

 进入容器 安装 xedu环境

docker exec -it jupyterhub /bin/bash
 
 

 

 

XEdu-python==0.2.3
MMEdu==0.1.28
BaseML==0.1.5
BaseNN==0.3.1
BaseDT==0.1.3
easy-xedu==0.2.3
BaseDeploy==0.0.4

 

 

  • 公共环境(common)里一次性装好你列出的那些库;
  • JupyterHub 默认把它作为“模板”,每个用户第一次登录时 自动克隆 到自己的独立环境;
  • 之后用户自己在自己的环境里随意增删包,互不干扰。
下面给你一条命令 + 一段配置,10 分钟搞定。

 

1. 在容器里创建公共环境并装好所有库

 

source /opt/miniconda3/etc/profile.d/conda.sh# 创建公共环境(一次性装好你列出的全部包)
conda create -n common python=3.10 \XEdu-python==0.2.3 MMEdu==0.1.28 BaseML==0.1.5 BaseNN==0.3.1 BaseDT==0.1.3 \easy-xedu==0.2.3 BaseDeploy==0.0.4 \numpy pandas matplotlib scikit-learn jupyterlab -y

  

正确做法(两步)

  1. 先创建公共环境(只装 conda 能解决的包)
    source /opt/miniconda3/etc/profile.d/conda.sh
    conda create -n common python=3.10 numpy pandas matplotlib scikit-learn jupyterlab -y
    conda activate common
    

    先装一个可用的 PyTorch(如 1.13.1):

     

    pip install torch==1.13.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
    

      

    再用 pip 装 XEdu 系列包  

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple \XEdu-python==0.2.3 MMEdu==0.1.28 BaseML==0.1.5 BaseNN==0.3.1 \BaseDT==0.1.3 easy-xedu==0.2.3 BaseDeploy==0.0.4

  

 

https://pytorch.org/get-started/previous-versions/

 

 

 

2. 修改 JupyterHub 配置,实现「首次登录自动克隆」

编辑 /etc/jupyterhub/jupyterhub_config.py追加以下内容:

 

# 公共环境名称
COMMON_ENV = 'common'# 每个用户首次登录时,自动复制公共环境到自己的独立环境
c.Spawner.pre_spawn_hook = lambda spawner: (spawner.run_command(['/opt/miniconda3/bin/conda', 'create', '--clone', COMMON_ENV,'-n', spawner.user.name, '-y']) if COMMON_ENV not in spawner.run_command(['/opt/miniconda3/bin/conda', 'env', 'list'])[0] else None
)# JupyterHub 启动时使用该用户自己的环境
c.Spawner.conda_env = '{username}'

  

3. 重启 JupyterHub

pkill -f jupyterhub
/etc/jupyterhub/start_jupyterhub.sh

  

5. 额外说明

  • 升级公共库:只需在 common 环境里 conda update xxx不会污染已克隆的个人环境。
  • 重置个人环境:管理员可 conda remove -n alice --all,用户下次登录会重新克隆。

一句话总结

conda create -n common … 装好库 → 配置 pre_spawn_hook → 重启 JupyterHub,
用户首次登录即拥有独立、已预装 XEdu 系列库的环境,互不干扰。

 

http://www.sczhlp.com/news/13173/

相关文章:

  • neovim初探
  • Ubunutu终端配置
  • 数论专题-裴蜀定理
  • Proto实践
  • 【大二病也要学离散!】第六章 欧拉图与哈密顿图
  • 动态dp总结
  • Script-Server 脚本Web化管理工具​​ - Leonardo
  • 题解:[CSP-S2019] Emiya 家今天的饭
  • ESP32-S3 控制 SD卡
  • ESP32-S3 控制 WIFI
  • ESP32-S3 控制 红外遥控
  • ESP32-S3 控制 舵机
  • 代码随想录算法训练营第八天(字符串篇)|Leetcode151翻转字符串中的单词,卡码网右旋转字符串,Leetcode28实现Strstr(),Leetcode459重复的子字符串
  • 数论专题-欧拉定理与费马小定理
  • ESP32-S3 控制 OLED液晶显示
  • Arduino PWM 引与 Atmega 引脚对应关系
  • ESP32-S3 控制 超声波测距
  • 无痕检测是否注册iMessage服务,iMessages数据筛选,iMessage蓝号检测协议
  • 电脑win10-菜单栏-搜索栏-鼠标一放入输入框中或者点进二级菜单中就会反复失效-bldbaseservice
  • ESP32-S3 控制 DHT11温湿度传感器
  • ESP32-S3 控制 RTC实时时钟
  • 前端Vite介绍(现代化前端构建工具,由尤雨溪创建,旨在显著提升开发体验和构建效率)ES模块(ESM)、与传统Webpack对比、Rollup打包
  • 8.16
  • ESP32-S3 控制 DS18B20温度传感器
  • Uniapp 之使用renderjs实现APP中腾讯地图搜索定位选点
  • [论文笔记] Indirection-bounded Callgraph Analysis
  • c语言矩阵的倒置
  • ESP32-S3 控制 WS2812 RGB 彩灯
  • 一步一步学习使用LiveBindings(15)TListView进阶使用(3),创建自定义的列表项打造天气预报程序
  • ESP32-S3 控制 ADC