在Notebook里安装第三方库后想做到环境随开随用,核心做法是把环境配置固化为代码文件或镜像,而不是依赖单个实例的实时状态。
很多人在Jupyter Notebook或Kaggle里遇到过同一个问题:今天装好的库,明天打开就提示ModuleNotFoundError,原因是Notebook平台默认不保留实例的本地文件系统,重启后回到初始状态,本文将围绕Notebook里安装的第三方库怎样做到环境随开随用展开,给出四个可落地的方案。
Notebook环境重启后为什么丢库
Notebook本质是一个运行在远程服务器上的交互式界面,你所安装的第三方库,写入了当前实例的site-packages目录,当实例被回收、重启或换一台机器分配给你时,文件系统被重置为镜像快照,所有新增的库自然消失。
行业共识是:Notebook平台优先保证轻量与安全,而非持久化,这决定了你无法通过“装一次”来彻底解决环境问题,但换个思路,既然机器会重置,那我们就让“安装动作”每次自动执行,或者把环境打包成镜像,下次直接加载。
以下方案按照从简单到复杂的顺序排列,你可以根据自己的使用场景选择。
Jupyter Notebook第三方库环境配置方法:从requirements.txt到startup脚本
用requirements.txt记录依赖并在启动时自动安装
这是最轻量、也最通用的方法,思路是把所有第三方库名称和版本写进一个文件,然后每次创建会话后执行一次安装命令。
操作步骤:
在当前环境中导出依赖清单,打开Notebook运行以下代码:
!pip freeze > requirements.txt
-
编辑requirements.txt,删除不需要的包,保留核心第三方库,如果你用的是Jupyter Notebook且不确定哪些是项目必需的,可以手写一份精简版,只列真正依赖的库。
-
将requirements.txt上传到你的工作目录或云盘(如Google Drive、简米云OSS)。
-
每次新建Notebook后,先运行:
!pip install -r requirements.txt
按需修改为国内镜像源可显著提速,常见写法如下:
!pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
这个方案能解决80%以上“今天装好明天丢”的场景,缺点是每次启动需要等待几十秒安装时间,但胜在简单可靠,适合个人学习和小型数据分析项目使用。
设置ipython startup脚本自动预装常用库
Jupyter内核在启动时会自动执行~/.ipython/profile_default/startup/目录下的Python文件,你可以利用这个机制,让常用库在会话建立时自动导入并懒安装。

以Jupyter Notebook自定义环境为例操作:
在Notebook中执行以下代码,确认当前用户目录:
import os
print(os.path.expanduser('~'))
-
在返回值路径下创建
.ipython/profile_default/startup/目录。 -
新建一个
auto_setup.py大致为:
import subprocess
import sys
import importlib
required_packages = {
'numpy': 'numpy',
'pandas': 'pandas',
'matplotlib': 'matplotlib'
}
for import_name, package_name in required_packages.items():
try:
importlib.import_module(import_name)
except ImportError:
subprocess.check_call([sys.executable, '-m', 'pip', 'install', package_name])
这段代码会检测常用库是否存在,缺失时自动安装,配合国内镜像源写法,可把安装命令改为:
subprocess.check_call([sys.executable, '-m', 'pip', 'install', package_name, '-i', 'https://pypi.tuna.tsinghua.edu.cn/simple'])
注意:这个方案依赖你的Notebook镜像里预装了ipython及对应profile目录权限,部分托管型Notebook服务不允许修改该目录,需要先验证可行性。
Kaggle Notebook安装第三方库重启失效的解决办法
在Kaggle中使用持久化数据集或公开脚本保存配置
Kaggle Notebook重启后实例被清空,但它有一个特性你的环境配置可以存储在Dataset中,具体做法是:
-
将requirements.txt或conda环境导出文件(environment.yml)上传为一个新的Kaggle Dataset。
-
打开你的Kaggle Notebook,点击右侧“Add Input”,搜索并添加该数据集。
-
每次启动后运行:
!pip install -r /kaggle/input/你的数据集名称/requirements.txt
如果你的环境包含conda包(例如GDAL、GeoPandas等依赖系统库的包),导出环境文件用:
!conda env export > environment.yml
上传后在Notebook中执行:
!conda env create -f /kaggle/input/你的数据集名称/environment.yml
行业共识认为,Kaggle上做地理空间数据处理或自然语言处理时,用conda环境文件比pip requirements.txt更稳,因为conda能同时管理非Python的二进制依赖,如PROJ库、GDAL库等。
用Docker镜像锁定环境
如果你使用的是支持自定义镜像的Notebook服务(比如分叉的JupyterHub、部分云厂商的Notebook产品),直接构建一个包含所需第三方库的Docker镜像,是终极解法。

具体操作路径:
本地编写Dockerfile:
FROM jupyter/base-notebook:latest RUN pip install --no-cache-dir pandas numpy matplotlib scikit-learn
构建并推送到镜像仓库:
docker build -t yourname/notebook-env:latest . docker push yourname/notebook-env:latest
在Notebook平台新建实例时,选择“自定义镜像”,填入上述镜像地址,实例启动后即可直接使用所有第三方库。
如果不想构建镜像但有Docker环境,也可以把整个Notebook配置目录挂载到宿主机卷上,所有写入文件持久保存在远程磁盘,下次启动时重新挂载同一卷即可。
Notebook环境随开随用的操作注意事项
固定版本号避免环境漂移
不写版本号的pip install会在数月后装到新版库,可能引发API变更导致旧代码报错,推荐在requirements.txt里锁定版本,业内专家指出,在共享或持续使用的分析项目中,版本锁定比一味追求最新版更重要。
已有环境导出版本号快速锁定方式:
!pip freeze > requirements_lock.txt
如果只想锁定核心库并忽略传递依赖,可手动编写:
pandas==2.1.4
numpy==1.26.3
scikit-learn==1.3.2
区分全局环境和当前内核环境
Jupyter Notebook存在多内核场景(Python 3、conda环境、虚拟环境),在Notebook里执行!pip list时,安装目标是当前内核对应的Python解释器,如果你切换了内核,之前环境中的库可能不可见。
确认当前使用解释器路径的代码:
import sys print(sys.executable)
输出结果指向哪个Python,!pip install就装到哪个环境,环境随开随用语境下,确保每次使用同一个内核标志。
数据与代码分离存储
不要在Notebook的本地工作目录里放重要数据,因为每次重启默认清空,把原始数据放在云盘、S3、Git LFS中,在Notebook内用代码拉取,环境配置也是同理requirements.txt别只放在本机,应同步到Git仓库或云盘。
结合这些操作后,在Jupyter Notebook第三方库环境配置方法中选择任一方案,都能实现环境随开随用。
| 方案 | 复杂度 | 适用场景 | 启动速度 | 持久化程度 |
|---|---|---|---|---|
| requirements.txt | 低 | 个人学习、小型分析 | 中等 | 一般 |
| ipython startup脚本 | 低 | 固定Notebook服务 | 快 | 中等 |
| Kaggle Dataset挂载 | 中 | Kaggle比赛、项目复现 | 中等 | 较高 |
| Docker镜像 | 较高 | 团队协作、生产级环境 | 快 | 最高 |
按需选择即可,个人项目建议方案一,价格和稳定性都能接受,如果是企业环境或参加Kaggle比赛追求复现性,方案四是更专业的选择。
Notebook环境随开随用的常见问题
关于Notebook里安装的第三方库怎样做到环境随开随用,有以下高频疑问:
在Jupyter Notebook中无法安装第三方库,显示权限错误怎么办?
尝试在安装命令中加入--user参数:
!pip install --user numpy
如果平台提示没有写权限,可考虑使用虚拟环境:
%conda create -n myenv python=3.9 ipykernel %conda activate myenv python -m ipykernel install --user --name myenv
虚拟环境路径下的库文件会写入用户目录,通常能绕开系统目录权限限制,更常见的是镜像基于Read-Only根文件系统,这时优先考虑requirements.txt方案。
为什么requirements.txt安装速度极慢或者多次中断?
国内网络下直接从PyPI拉取大块依赖容易超时,建议换用清华大学源或简米云源,在pip install末尾追加-i参数:
!pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
配合--timeout 60 --retries 3参数降低网络波动影响:
!pip install --timeout 60 --retries 3 -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
使用Kaggle Notebook时高频导入库无法保存配置,每次都要手动输入代码,有没有更省力的做法?
利用Kaggle的“Settings → Code”功能预置代码片段,点击Notebook右上角的“Settings”,在“Other”区域找到“Code”输入框,填上你的安装命令,
!pip install -r /kaggle/input/你的数据集/requirements.txt
保存后每次打开Notebook,这段代码会自动挂在当前会话的开头,无需手动输入,配合“Add Input”挂载配置数据集,即可实现Kaggle场景的自动化环境准备。
如果上述方案都不能满足你,还可以结合GitHub Actions定时构建新镜像,推动整个流程走向自动化,通过把环境描述文件纳入版本控制,无论平台如何变化,你的依赖保存逻辑始终一致,环境随用随建,不会卡在等待运维人工配置的环节中,环境恢复的最终目的不是记住某一次安装结果,而是建立一套可复现的依赖描述,让机器按图索骥,自动完成从零到可用的过程。
