☰
Jupyter Notebook与JupyterLab实用技巧大全
2026/10/8 8:59:07 网站建设 项目流程

你要是经常和数据打交道,就不可能绕开 Jupyter Notebook 这个名字。它和 JupyterLab 已经成了我工作台上最常用的两个阵地,但越是常用,越觉得默认状态像个“毛坯房”:目录要自己装、保存路径要找半天、文件误删了连个像样的回收站都找不到。这篇技巧大全是我把日常高频问题集中整理了一遍,涵盖安装、内核管理、快捷键与魔术命令、Notebook 目录、默认保存路径、JupyterLab 回收站以及扩展交互等实用内容,既适合刚上手的新手照着配置,也适合想把手头环境调教得更顺手的老用户收藏备用。

1. Jupyter Notebook 与 JupyterLab,选对阵地很关键

1.1 两个界面到底差在哪

经常有人问我:“Jupyter Notebook 和 JupyterLab 到底该选哪个?”我的看法是:入门学习用 Notebook 更直白,日常干活我更推荐 JupyterLab。原因在于,Notebook 的设计重心是“单个文档”——打开一个 .ipynb,从上到下写代码、记 Markdown、看输出,操作思路非常线性;而 JupyterLab 把整个浏览器变成了一张工作台,左侧有文件树,中部是编辑器,多个 Notebook 和终端可以同时平铺,还有内置的目录面板。

举一个我自己天天遇到的场景:清洗一份销售数据时,我通常要同时打开三个文件——一个写清洗脚本的 Notebook、一份验证 SQL 结果的终端、一个预览图表的 Notebook。在 JupyterLab 里,把这三个标签页拖到同一屏就行;在老版 Notebook 中只能在多个浏览器标签页之间来回切。一旦习惯了这种“鼠标一拖就能分屏”的体验,几乎回不去 Notebook 的老界面。

对比项Jupyter NotebookJupyterLab
文档模式单文档,开多个文件要开标签页多文档工作台,支持拖拽分屏
文件树默认较弱,需额外扩展内置文件浏览器,支持多根目录
扩展机制依赖 nbextensions,装起来略繁琐自带扩展管理器,图形化安装
内置终端基本没有内置终端和 Markdown 编辑器
适合场景快速实验、教学演示数据分析、多任务并行、协作

如果你刚开始学 Python,直接用 Notebook 没问题,因为它的工具栏和菜单更少,不容易迷路。但如果你要做实际项目,建议尽早切到 JupyterLab,从这个界面迁移过去的成本比我预想的低很多,换来的是翻倍的窗口管理效率。

1.2 安装与内核管理,最容易踩的坑

安装这一步本身不难,麻烦的是“装完之后用的不是同一套环境”。以 pip 安装为例:

pip install notebook jupyterlab

用 conda 则执行:

conda install -c conda-forge notebook jupyterlab

可很多同学在虚拟环境里装完 Jupyter,启动后却 import 不到刚 pip install 的包,或者内核列表里只有一个 Python 3,看不到任何自定义环境。原因其实很简单:Jupyter 服务是一个进程,内核是另一个进程;你在某个环境里装的包,只有通过“那个环境对应的内核”启动的 Notebook 才看得到。

解决办法是把你的环境注册成 Jupyter 内核:

python -m ipykernel install --user --name=myenv --display-name="myenv"

这里的--name是内核的唯一标识,--display-name是你在 Notebook 界面里看到的名字。执行完,回到 Kernel 菜单切换一下,就能在同一个 Notebook 里自由选择不同环境。这个操作我几乎每换一台电脑就会做一次,属于典型的“不知道会抓狂、知道后一劳永逸”。

如果你需要让同一台机器上的其他用户通过浏览器访问,还建议先创建配置文件并设置密码:

jupyter notebook --generate-config jupyter notebook password

随后在jupyter_notebook_config.py里按需修改端口、是否允许远程访问。我的建议是,共享环境里一定要结合防火墙做访问控制,不要把服务直接暴露在不可信网络;个人使用的话,默认的localhost已经足够安全。

2. 快捷键与魔术命令,把日常节奏提起来

2.1 先分清命令模式与编辑模式

Notebook 的快捷键规则其实非常简单:键盘操作分两种模式。很多新手经常发现按 B 没反应,因为光标在单元格里时是编辑模式,按 B 自然只是输入字母 b;只有先按 Esc 把单元格边框变成蓝色,进入命令模式,再按字母键才会触发操作。理解这个切换逻辑,快捷键就记住一半了。

我平时最常用的一组快捷键如下:

操作快捷键备注
运行单元格并跳到下一个Shift + Enter最高频
运行单元格但不移动Ctrl + Enter调试单格
在单元格上方插入Esc 后按 A命令模式
在单元格下方插入Esc 后按 B命令模式
删除单元格Esc 后连按两次 D会有确认提醒
转成 MarkdownEsc 后按 M命令模式
转成 CodeEsc 后按 Y命令模式
选中下方多个单元格Shift + 下方向键命令模式
合并选中单元格Shift + M命令模式
快速查找代码Esc 后按 F类似 Ctrl+F

如果你在用 JupyterLab,还可以到 Settings -> Keyboard Shortcuts 里自定义快捷键。我个人会把“运行全部单元格”设成一个不常用的组合,比如Alt+R,跑整份脚本时就不用去菜单里点了。老版 Notebook 想改键就比较麻烦,这也是我逐渐偏向 JupyterLab 的原因之一。

2.2 魔术命令:一行顶十行

魔术命令(Magic Commands)是 IPython 内核的特色,在 Notebook 和 JupyterLab 里通用。下面这些是我写得最多、也最推荐记住的:

%matplotlib inline # 让图表直接嵌入输出区 %time func() # 打印单次运行耗时 %timeit func() # 多次运行取平均耗时 %who / %whos # 查看当前所有变量 %reset # 清空所有变量 %run train.py # 运行脚本并把结果留在命名空间 %load helper.py # 把文件内容读进单元格 !pip list # 直接执行系统命令 %%bash # 整个单元格按 bash 执行

其中%timeit比%time更客观,因为小任务在 Jupyter 里单次运行误差很大,%timeit会自动跑若干轮取平均。每次做性能优化,我都先用它定位瓶颈,再针对瓶颈动手改。

另一类很实用的是%%writefile。比如你想在 Notebook 里顺手生成一个.py脚本:

%%writefile model.py def predict(x): return x * 2

执行后目录下会多出model.py。配合%run model.py,可以把 Notebook 里的分析逻辑沉淀成独立模块,而不是永远堆在单元格里。

还有两个被低估的小习惯:一是用变量或函数?查看帮助,比如pd.read_csv?会弹出签名和文档,加两个问号还能看到源码;二是画图时在plt.show()后面加一个分号,可以隐藏那一行文字输出。单看都是小技巧,组合起来整个写代码的节奏会明显不一样。

3. 给 Notebook 添加目录,别再拿滚轮找标题

3.1 为什么官方默认没有目录

Jupyter Notebook 一直把“简洁”放在前面,默认界面里没有侧边目录,文档一长就只能从头往下翻。这个问题在老版 Notebook 里尤其明显:一旦 Notebook 有上百个单元格,想找某个小节简直是场噩梦。社区插件jupyter_contrib_nbextensions里的 Table of Contents (TOC2) 插件,就是来补这个短板的。

如果你已经切到 JupyterLab,事情更简单:新版 JupyterLab 原生内置了“目录”面板,打开 Notebook 后左侧会自动按 Markdown 标题生成目录,不需要额外装任何东西。所以这一节我会把两种界面的方案分开讲,你用哪个版本就照哪个来。

3.2 Notebook 老界面怎么安装 TOC2

安装步骤很直接:

pip install jupyter_contrib_nbextensions jupyter contrib nbextension install --user jupyter notebook

Notebook 打开后,顶部菜单栏会出现一个 Nbextensions 标签。如果没看到,多半是第二步没执行成功,重新执行一次即可。在扩展列表里勾选Table of Contents (TOC2),之后每个 Notebook 的工具栏都会多出一个目录按钮,点击后右侧会浮出可折叠目录。

需要留意的是,如果你装的是 notebook 7.x,老牌jupyter_contrib_nbextensions可能不再兼容。这种情况下直接切到 JupyterLab 反而轻松,这也是我后来迁移到 Lab 的原因之一——官方维护的原生目录始终比第三方插件更稳定。

3.3 TOC2 的配置和常见误区

TOC2 浮动面板顶部有个齿轮图标,点开可以配置目录层级、是否显示编号、是否自动折叠、是否跟随滚动。我习惯把“跟随滚动高亮”打开,写长文的时候一眼就能看到自己写到了哪个章节。

这里必须提醒一个新手常踩的坑:目录只识别 Markdown 标题,不识别代码。如果你在代码单元格里写# 第一部分,目录里不会出现;必须把那个单元格切换到 Markdown,再写# 第一部分才会被收录。如果标题下的正文都是代码单元格,同样不会进入目录。很多人看到目录不对就以为是插件坏了,其实问题出在标题格式。

4. 默认保存路径,别再和文件玩捉迷藏

4.1 先确认当前工作目录

新 Notebook 保存到哪里,由启动 Jupyter 时的目录决定。如果你是在某个文件夹的终端里敲jupyter notebook启动的,默认保存路径就是这个文件夹;如果你是通过开始菜单或 IDE 快捷方式启动的,保存路径往往不是想要的。

快速确认的方法是在单元格里运行:

import os print(os.getcwd())

也可以直接执行!pwd(Windows 上用!cd)。在 JupyterLab 里,左侧文件树最上方显示的当前根目录,就是同样的信息。先确认这些,后面改路径才不会改错文件。

4.2 三种修改默认路径的方法

方式一:启动参数。

jupyter notebook --notebook-dir=D:/workspace jupyter lab --notebook-dir=D:/workspace

这种方式是一次性的,适合临时换目录。

方式二:改配置文件。

jupyter notebook --generate-config

打开~/.jupyter/jupyter_notebook_config.py(Windows 是C:\Users\用户名\.jupyter\jupyter_notebook_config.py),新增或修改:

c.ServerApp.root_dir = 'D:/workspace'

保存后重启 Jupyter 即可。老版本 notebook 里配置键是c.NotebookApp.notebook_dir,如果你还在用 notebook 7 以下版本,写这个也能识别;新版本建议用c.ServerApp.root_dir。

方式三:启动脚本封装。

在 Linux/macOS 上,我习惯在~/.bashrc里加一个 alias:

alias jn='cd ~/projects/jupyter && jupyter lab'

Windows 上则做一个简单的.bat启动脚本,先cd /d D:\workspace再启动 Jupyter,双击就能进入固定工作目录。

我个人强烈建议给 Jupyter 单独建一个工作目录,不要把桌面或下载文件夹当默认目录。因为 Notebook 会在目录下生成大量.ipynb_checkpoints自动保存文件夹,混在其他文件里特别容易凌乱。单独目录还有个好处:备份时整个目录压缩即可,做 Git 管理时也不会误提交一堆无关文件。

4.3 路径相关的工程化细节

Jupyter 默认生成的.ipynb_checkpoints其实是自动保存的快照,有时误删文件后能从这里捞回旧版本。但它也很容易把 Git 仓库弄乱,所以一定要加.gitignore:

.ipynb_checkpoints/

在 Notebook 内部引用数据文件时,我习惯在顶部固定一个BASE_DIR:

from pathlib import Path BASE_DIR = Path.cwd()

如果 Notebook 启动位置并不总是项目根目录,更稳的做法是直接写绝对路径:

BASE_DIR = Path.home() / 'workspace' / 'sales-project'

这样不管你在哪个执行目录下跑,都能定位到数据文件。换电脑时只要改这一行,整个脚本就能重新跑起来,不用逐个单元找路径。

5. JupyterLab 回收站:文件误删后到底去哪了

5.1 先泼盆冷水:它并不是完整回收站

“JupyterLab 回收站在哪”是高频问题,但真相是:早期版本的 JupyterLab 根本没有本地回收站,左侧文件树里按 Delete 会直接把文件从磁盘抹掉。后来版本加入了有限的撤销机制,但它更像“撤销删除”缓存,而不是操作系统那种有界面的回收站。你删除文件后马上按 Ctrl+Z 或许能恢复,但如果重启了 JupyterLab,撤销缓存基本就没了。

所以在 JupyterLab 里删除文件前一定要多看一眼文件名。这里没有 Windows 回收站那种“先进去再后悔还能拿回来”的缓冲,操作代价比你想的大。

5.2 误删后的恢复尝试顺序

如果刚误删,可以按这个顺序尝试:

  1. 在左侧文件树中,点击被删文件原来所在目录,让文件浏览器保持在该上下文。
  2. 立即按 Ctrl+Z,看文件是否重新出现;没反应就再试一次。
  3. 找不到就检查该目录下的.ipynb_checkpoints文件夹,里面可能保留最近一次自动保存的版本。
  4. 如果文件在云同步盘(如 OneDrive、坚果云)里,去云盘网页版回收站找;Linux 服务则看文件系统有没有 Trash 目录。

还有一条终极兜底:如果你从第一天开始就把整个工作目录做成 Git 仓库,误删后一条git checkout就能找回。这是我最推荐的做法,比依赖任何回收站都靠谱。每天写完一段代码就git add . && git commit,成本很低,收益极高。

5.3 防误删的几条“保命”习惯

  • 在 JupyterLab 设置里搜索“Delete”,尽量开启删除确认相关选项,不同版本位置略有差异。
  • 不要用!rm或os.remove()在 Notebook 里批量删文件,尤其是通配符操作,误删后没有撤销机会。
  • 删除文件前,先用!ls看一下目标目录,确认没有把脚本目录当成临时目录处理。
  • 核心 Notebook 和多轮运行后的实验文件,定期导出备份,或者放进 Git 仓库历史。

这一节我自己踩过最大的坑,是一次想清空日志文件,顺手写了!rm *.log,结果工作目录里恰好有几个带.log字样的数据备份。还好文件名并不是严格以.log结尾,才没酿成大错。但那次之后,我再也不敢在 Notebook 里执行删除命令了,说出来希望大家别重蹈覆辙。

6. 进阶玩法:扩展、交互控件与一键导出

6.1 值得装的 JupyterLab 扩展

JupyterLab 的扩展生态比老版 Notebook 自由得多,装扩展就像装 IDE 插件。我长期保留这几款:

  • jupyterlab-git:左侧面板直接看变更、提交、分支,配合“目录做成仓库”这一招非常好用。
  • jupyterlab-spellchecker:给 Markdown 单元格做拼写检查,写英文报告时很省心。
  • jupyter-resource-usage:在状态栏显示内存和 CPU 占用,防止 Notebook 悄悄吃爆内存。
  • @ryantam626/jupyterlab_code_formatter:支持 black、autopep8、isort,一键格式化代码。

安装方式一般是:

pip install jupyterlab-git jupyterlab-spellchecker jupyter-resource-usage jupyter lab build

注意老版本 JupyterLab 装第三方扩展还需要jupyter labextension install,新版本用pip install后执行jupyter lab build即可。装完之后重启 JupyterLab,左侧或状态栏就会多出对应功能。

6.2 用 ipywidgets 把 Notebook 变成交互面板

做数据探索时,我经常用ipywidgets做交互式筛选,比一遍遍改参数重新执行方便太多:

import ipywidgets as widgets from IPython.display import display import pandas as pd df = pd.read_csv('sales.csv') def show_range(min_price, max_price): subset = df[(df['price'] >= min_price) & (df['price'] <= max_price)] print(subset.shape) return subset.head() min_slider = widgets.IntSlider(value=0, min=0, max=1000, description='最低价') max_slider = widgets.IntSlider(value=500, min=0, max=1000, description='最高价') ui = widgets.VBox([min_slider, max_slider]) out = widgets.interactive_output(show_range, {'min_price': min_slider, 'max_price': max_slider}) display(ui, out)

拖动滑块,输出区域会自动更新,非常适合给非技术同事做报表演示。它本质上是前端控件绑定 Python 回调,不需要懂前端也能用。

更简单的写法是用@interact装饰器:

from ipywidgets import interact @interact(col=df.columns) def plot_col(col): df[col].hist()

下拉菜单一换,图就跟着变,做临时探索时效率极高。

6.3 一键导出不同格式,交付报告不发愁

Jupyter 的强项是“可复现分析”,把分析结果分享出去时,导出功能很重要。命令行导出示例:

jupyter nbconvert --to html notebook.ipynb jupyter nbconvert --to markdown notebook.ipynb jupyter nbconvert --to script notebook.ipynb

--to script会把所有单元格抽成.py文件,适合交付纯代码;--to markdown适合发技术博客,图片会自动保存成相对路径。想导出 PDF 也可以,但通常需要安装 LaTeX 环境;Windows 装 TeX Live 或 MiKTeX 比较麻烦,我一般先导出 HTML,再用浏览器“打印为 PDF”,效果也不错。

6.4 主题、字体与界面微调

如果对默认白底界面审美疲劳,可以在 JupyterLab 的 Settings -> Theme 里切换 JupyterLab Dark。想更花哨就装第三方主题,比如@jupyterlab/theme-dark-blue,在新版扩展管理器里直接搜索安装即可。

字体方面,我建议把编辑器字体调成等宽字体,例如 JetBrains Mono,代码对齐会清晰很多。在 Settings -> Editor 的 Font Family 里填入字体名称,Windows 需要先安装字体才能生效。再配合jupyter-resource-usage在右下角显示内存占用,跑长任务时心里有个数,基本不会出现内存突然爆掉才发现的情况。这些都属于可选优化,按需食用即可。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询