☰
Jupyter Notebook安装配置全攻略:从环境选择到插件排错
2026/10/6 10:17:02 网站建设 项目流程

入行这几年,Jupyter Notebook 我一直当主力交互环境用,数据清洗、公式验证、甚至写博客草稿都在里面完成。但说实话,大部分人在"安装和插件"这件事上都是靠百度碎片拼出来的:今天搜一条安装命令,明天搜一个插件名,装完发现环境乱了、插件勾选不生效、默认保存路径改半天没用。这篇我把自己实际踩过的路线完整理一遍,从安装形态怎么选,到插件体系怎么用,再到保存路径和排错细节,尽量让不同基础的读者都能照着操作,少在配置上耗时间。

1. 先把安装路线想明白:不同折腾法的取舍

很多人一上来就在终端里敲pip install jupyter notebook,敲完也能用,但后面装插件、管理 Python 包的时候才意识到,问题往往出在最开始的安装方式上。Jupyter Notebook 本身只是一个前端壳子,真正的执行环境是后面的 Python 解释器和 Kernel,所以安装形态决定了你后面所有操作的顺畅程度。

我见过的安装方式大致分三类。第一种是 Anaconda 全家桶,把 Python、conda、常用科学计算库、Jupyter 全部装到一个大目录里。好处是真的省心,装完基本开箱即用,适合完全不想碰命令行的新手。坏处也明显:体积好几个 G,而且 Anaconda 自带的 Python 很容易和系统里原有的 Python 打架,尤其在国内开发机上,经常出现 "明明装了这个包,导入时却说找不到" 的灵异问题。

第二种是 Miniconda + conda 环境,我只装conda本体,然后按项目建虚拟环境,在环境里分别装 Jupyter 和依赖。这种方式我强烈推荐给做数据分析或需要隔离项目依赖的人。它比 Anaconda 轻得多,但保留了一样的环境管理能力。

第三种是纯系统 Python + venv + pip,适合只在某一个项目里临时用 Jupyter、不搞复杂多环境的读者。优点是干净,不引入 conda 的包管理系统;缺点是底层依赖出问题时要自己处理。

三种方式的适用场景我整理了一个对比:

安装方式适合人群优点主要的坑
Anaconda新手、不想管环境开箱即用体积大、易与系统Python冲突
Miniconda + conda数据分析、多环境开发者轻量、环境隔离干净需要自己装常用库
venv + pip临时使用、追求极简轻量、与系统隔离底层依赖问题需手动处理

我自己现在的主力组合是 Miniconda,每个项目单独一个环境,Jupyter 装在项目环境里,配合 kernel 注册机制(后面细说)可以做到每个环境对应一个 Notebook kernel。这样你在不同项目之间切换时,Notebook 内核列表里一目了然,不会因为装错环境把整个系统搞挂。

2. 从零到能跑:核心安装命令与启动验证

2.1 Conda 环境的建立与 Jupyter 的安装

不管你有没有装过 Anaconda,我都建议先用 Miniconda 重新梳理一遍环境。去官网下载对应系统的 Miniconda 安装包,安装过程一路默认即可。装完以后,先在终端里建一个专门跑 Jupyter 的环境,这一步我给完整命令:

# 创建环境,python 版本建议用 3.9 或 3.11,兼容性最稳 conda create -n jupyter_env python=3.11 -y # 激活环境 conda activate jupyter_env # 安装 Jupyter 本体 conda install -c conda-forge jupyterlab -y conda install -c conda-forge notebook -y

这里我同时装了 JupyterLab 和经典 Notebook,很多人会疑惑为什么两个都装。理由很简单:JupyterLab 是现在的主流交互界面,功能强、插件体系新;但经典 Notebook 依然有大量老插件和教程基于它运行,两个都留着方便对照,也方便从旧项目过渡。conda 安装的好处是它会把 Node.js、zeromq 这类底层依赖一并处理好,后面装插件会省很多麻烦。

如果你更习惯用 pip,也可以用下面的命令:

python -m pip install --upgrade pip python -m pip install jupyterlab notebook

注意 Windows 下如果提示 "jupyter 不是内部或外部命令",原因通常是当前环境的 Scripts 目录没有加入 PATH。用conda activate jupyter_env激活环境后一般能解决,实在不行再用python -m jupyter这种模块方式启动。

2.2 验证与配置:生成配置文件、启动、检查端口

安装完成后不要急着打开网页乱点,先做两步验证。第一步在终端里运行jupyter --version,能输出各组件版本信息说明基础没问题。第二步执行一次启动:

jupyter notebook # 或者 jupyter lab

正常情况下终端会打印出一串信息,并自动打开浏览器。如果没有自动打开,把终端里显示的http://localhost:8888/tree或http://localhost:8888/lab手动粘贴进浏览器即可。这个细节经常有人卡住:浏览器打不开不一定是你安装失败,更常见的是端口被占用或者浏览器默认设置拦截了跳转。

端口问题很好排查,终端里注意看有没有这样一行:

The Jupyter Notebook is running at: http://localhost:8888/

如果这里显示的端口是 8889 或别的,说明 8888 被占用了,直接用显示的端口访问就行。想固定端口可以用:

jupyter notebook --port=8888 --no-browser

--no-browser的意思是启动时不自动弹浏览器,适合你在服务器上跑 Jupyter 然后用本地浏览器远程访问的场景。这些基础参数后面配置默认保存路径时还会用到,建议记一下。

生成配置文件这一步很多人会漏掉,但它几乎是所有后续配置的基础:

jupyter notebook --generate-config

这会在当前用户的.jupyter目录下生成一个jupyter_notebook_config.py文件,默认保存路径、启动参数、服务器配置都写在这里。Windows 上路径通常是C:\Users\你的用户名\.jupyter\jupyter_notebook_config.py,macOS/Linux 是~/.jupyter/jupyter_notebook_config.py。后面讲修改默认保存路径时,我们就是改这个文件里的字段。

3. 插件安装的真正入口:经典 Notebook 与 Lab 两套机制

3.1 经典 Notebook 的 nbextensions 插件体系

经典 Notebook(对应jupyter notebook命令)的插件机制靠的是 nbextensions,核心工具是jupyter_contrib_nbextensions。这个工具包含几十个经典扩展,比如目录大纲、代码格式化、变量查看器、自动缩进等,安装命令也比较固定:

# 安装扩展集合 pip install jupyter_contrib_nbextensions # 将扩展文件复制到 Jupyter 的静态资源目录 jupyter contrib nbextension install --user # 启动 Jupyter Notebook jupyter notebook

启动后在 Notebook 首页上方会多出一个 "Nbextensions" 标签页,进去就能看到所有可勾选的扩展列表。勾选生效后刷新页面即可。我自己必开的几个:

  • Table of Contents:自动生成 Markdown 标题目录,长文档导航神器
  • Autopep8:单元格代码一键格式化
  • Variable Inspector:查看当前 Kernel 里所有变量的类型和值
  • Collapsible Headings:折叠标题,适合组织结构化笔记
  • Notify:代码跑完时桌面通知,跑长任务时不用一直盯着页面

这里有一个重要的版本警告:Notebook 7.x 发布后采用了 JupyterLab 的前端架构,那套 nbextensions 的注入机制基本失效,Nbextensions 标签页也看不到了。如果你装的是最新版 Notebook(比如 7.x),用上面的命令能装上扩展,但页面里不会有勾选入口。我的建议是:还在用经典 Notebook 且离不开这些扩展的,可以把 Notebook 固定到 6.x 版本:

pip install "notebook<7"

或者直接切到 JupyterLab,用下面要讲的现代扩展体系。这也是为什么我在前面的安装步骤里同时装了两者,切换成本低。

3.2 JupyterLab 的现代扩展体系

JupyterLab 的插件体系跟经典 Notebook 完全不同,它基于 npm 和 Node.js,插件通过jupyter labextension install或 pip 包两种方式安装。新版 JupyterLab(3.x 及更高)大力推行 pip 安装方式,很多官方扩展直接pip install即可,省去 Node.js 编译的麻烦。

安装扩展之前,先确认环境里有没有 Node.js,因为有些老扩展重建前端时需要它。终端里运行node -v,没有输出就去下载安装 Node.js LTS 版本。不过我现在更推荐优先选支持 pip 安装的扩展:

# 目录大纲(jupyterlab-toc 其实已内置于Lab,无需额外装) # 代码格式化 pip install jupyterlab_code_formatter # 变量查看器 pip install lckr-jupyterlab-variableinspector # Git 集成(需要Node支持) pip install jupyterlab-git

JupyterLab 常用的插件清单我在下面列出,基本覆盖了日常高频需求:

插件用途安装方式
jupyterlab_code_formatter代码格式化(支持black/isort)pip install
jupyterlab-gitGit 面板pip install
jupyterlab-lsp代码补全、跳转、诊断pip install
jupyterlab-spellcheckerMarkdown 拼写检查pip install
@jupyterlab/toc目录大纲内置或扩展
jupyterlab-aiAI 对话、代码生成pip install

安装完 pip 扩展后,一般不需要手动 rebuild,新版 JupyterLab 在启动时会自动重建前端。但如果你碰到了界面没有变化的情况,手动执行一次重建即可:

jupyter lab build

这个命令会重新编译前端资源,耗时几分钟,属于正常现象。完成后重启 JupyterLab 才能看到新插件。

3.3 高价值插件清单与安装指令

我把两个体系里真正值得装的插件合并成一段实操说明,方便直接复制。如果你是全新环境,推荐按下面的顺序操作:

# 经典 Notebook 插件(仅兼容 Notebook 6.x) conda activate jupyter_env pip install jupyter_contrib_nbextensions jupyter contrib nbextension install --user # JupyterLab 插件 pip install jupyterlab_code_formatter jupyterlab-lsp jupyterlab-git # 代码格式化后端工具(jupyterlab_code_formatter 需要依赖它们才真正生效) pip install black isort

装完jupyterlab_code_formatter后必须安装 black 和 isort,否则插件有界面但没有实际格式化引擎,这在官方文档里写得不明显,我当初装完发现点击格式化提示 "No formatter installed" 才明白。这类"装了主插件还要装后端工具"的情况非常典型,记不住就多看插件报错信息,它能帮助你定位缺失的依赖。

另外,如果你做数学公式相关的工作,可以在 Markdown 单元格里用$x^2$和$$\int_0^1 f(x) dx$$渲染 LaTeX 公式,Jupyter 自带的 MathJax 已经支持,不需要额外插件。遇到公式渲染错位时先刷新页面,再检查是否有多个扩展同时修改了渲染器,这类冲突比公式本身难查得多。

4. 顺手把默认保存路径改对,少走三年弯路

Jupyter Notebook 的默认保存路径可能是被问得最多的一个问题,热词里也有"jupyter notebook默认保存路径"的身影。大部分人的操作是在界面里一个个切换目录,麻烦还容易忘。正规做法是去改配置文件。

先再次确认已经执行过:

jupyter notebook --generate-config

然后用文本编辑器打开生成的jupyter_notebook_config.py,找到这一行:

# c.NotebookApp.notebook_dir = ''

把它改成你自己的目标目录。Windows 系统下记住用正斜杠,不要用反斜杠,这基本是新手改配置必踩的坑:

c.NotebookApp.notebook_dir = 'D:/MyNotebooks'

Linux/macOS 下则直接写绝对路径:

c.NotebookApp.notebook_dir = '/home/username/notebooks'

改完保存,重启 Jupyter Notebook,进入页面后地址栏显示的根目录应该是你设置的那个路径。如果你用的是 JupyterLab,新版配置字段稍有变化,需要在同一个文件里加一行:

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

我这里写了两个字段,原因在于 Jupyter 近几个版本中NotebookApp.notebook_dir用于经典 Notebook,ServerApp.root_dir用于统一服务器尤其是 JupyterLab。两个都写上也不会互相干扰,属于稳妥打法。

如果你只是临时想把这一次会话的目录改一下,不需要改配置文件,直接启动时加参数:

jupyter notebook --notebook-dir=D:/MyNotebooks jupyter lab --ServerApp.root_dir=D:/MyNotebooks

还有一种小技巧适合 Windows 用户:右键 Jupyter 的快捷方式,在"目标"一栏的末尾加上引号和上面的参数,双击就是指定目录启动,不污染全局配置。注意参数和前面的启动路径之间要有空格,整个目标用英文双引号封起来。

提示:改完配置文件之后,旧的终端界面可能不会立刻生效。Windows 上还容易出现配置被缓存的情况,直接重启终端再启动 Jupyter,比在同一个窗口反复试更有效。

5. 最容易翻车的几个安装坑,以及完整的排查链路

5.1 经典案例:Notebook 7 升级后 nbextensions 全部失效

这个坑我在前面章节预警过,也是后台收到咨询最多的一种情况:用户执行pip install notebook之后启动,发现首页压根没有 Nbextensions 标签,所有勾选的插件全部消失。这不是你没装好,而是 Notebook 7 的前端架构变了,老扩展的注入机制不再被支持。

排查链路记录下来供参考:

  1. 先确认 Notebook 版本:运行jupyter notebook --version,如果输出以 7 开头,老插件失效是正常的。
  2. 接着查看环境是 JupyterLab 还是经典 Notebook:终端里启动jupyter notebook后,看地址后缀是/tree还是/lab。/lab说明前端是 JupyterLab。
  3. 最后根据需求选一个方向:要么pip install "notebook<7"降级到 6.x 保住 nbextensions,要么接受新架构,改用 JupyterLab 对应的扩展体系。

我的建议是优先走 JupyterLab 方向。老扩展虽多,但部分年久失修,Node 版本一变就构建失败,现代 Lab 扩展的维护活跃度和 API 稳定性明显更好。

5.2 权限、插件环境与 kernel 路径问题排查

另一个高频坑是jupyter contrib nbextension install时提示权限错误,尤其在 Windows 上。命令行报 "Permission denied" 或者 "Failed to copy file to destination" 是典型症状。解决方式有两种,第一种是在原命令后加--user参数,把扩展安装到当前用户目录而不是系统全局目录:

jupyter contrib nbextension install --user --skip-running

第二种是检查是否同时运行了多个 Jupyter 进程。扩展安装和复制静态文件时,正在运行的 Jupyter 可能锁定部分目录,导致安装写入失败。先把所有 Jupyter 窗口关掉,再执行安装命令,最后重新启动。

和插件环境并列的大坑是 kernel 路径错乱。很多初学者在 A 环境装 Jupyter,又在 B 环境装了 pandas,进入 Notebook 后import pandas报错。原因是 Notebook 默认使用启动它的 Python 环境作为 Kernel,不会自动切换到你激活的另一个环境。解决办法是显式注册 kernel:

# 在 B 环境里执行 conda activate B python -m ipykernel install --user --name B --display-name "Python (B)"

重启 Jupyter 后,新建 Notebook 时就能看到 "Python (B)" 这个内核,选择它就能正确访问 B 环境的包。这个操作非常实用,尤其是用 conda 管理多个项目时,一套 Jupyter 对接所有环境。

还有一类问题是 Node.js 导致的 Lab 扩展安装失败。如果你在jupyter labextension install时看到 "npm ERR" 或者 "Command npm not found",基本就是环境缺少 Node.js。先去官网装一个 LTS 版本,再重新执行安装。新版 JupyterLab 虽然很多插件可走 pip 路径绕开 Node.js,但碰上必须要labextension install的扩展,这个依赖躲不掉。

最后补充一个很多人忽略的小问题:浏览器插件拦截导致 Notebook 页面加载不完整。如果你装有去广告、脚本管理类浏览器插件,遇到页面空白或按钮不响应时,把 localhost 站点加入白名单再试一次。这个点很少有人往那方面想,但实际频率不低。


最后留一个个人建议:Jupyter 的插件生态这两年变化很快,版本之间的不兼容是整个社区共同面对的问题。我现在的习惯是固定一个小版本号,比如 Notebook 6.5.x 或 JupyterLab 4.x,不要随手 "latest" 升级,等需要新功能时再统一迁移。安装插件前养成在终端里先查版本的习惯,能省掉后续至少一半的排错时间。我的做法就这么多,把基础路线捋顺,插件和路径配置自然就不容易翻车。

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

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

立即咨询