jupyter notebook 版本未更新的根本原因是混淆了「jupyter」元包与「notebook」核心包:元包不强制升级子包,需直接执行 pip install --upgrade notebook 或 conda update notebook,并确保环境已激活、内核正确注册。

jupyter notebook 更新本身不等于更新整个 Jupyter 生态,很多人卡在“明明执行了升级命令,jupyter notebook --version 却没变”,根本原因是没分清「notebook」包和「jupyter」元包的区别。
确认你装的是哪个包:notebook 还是 jupyter?
运行 pip list | grep -i jupyter(Linux/macOS)或 pip list | findstr -i jupyter(Windows),重点看这几行:
-
jupyter—— 元包(metapackage),只负责拉取jupyter-core、notebook、ipykernel等默认组件,但不强制升级已有子包 -
notebook—— 真正提供 Web UI 和服务器逻辑的核心包,版本号如7.2.0,这才是你要更新的目标 -
jupyter-server—— 从 v7 起替代旧notebook的底层服务框架,和notebook包共存但职责分离
如果你只运行过 pip install --upgrade jupyter,很可能 notebook 没动——因为 jupyter 元包的依赖约束可能锁住了旧版。
直接升级 notebook 包(推荐)
跳过元包,直击核心:
- 升级到最新稳定版:
pip install --upgrade notebook - 升级到指定版本(比如 v7.4.0):
pip install notebook==7.4.0 - 如果用 conda:
conda update notebook或conda install notebook=7.4.0 - 升级后务必重启服务:先 Ctrl+C 停掉正在运行的
jupyter notebook,再重新执行命令启动
注意:notebook>=7.0 默认启用 jupyter-server,启动时控制台会显示 http://localhost:8888/lab(Lab UI)而非旧版 Tree UI,这是正常行为,不是失败。
conda 环境下常见陷阱:环境隔离没生效
你在 Anaconda Prompt 里执行了 conda update notebook,但浏览器里打开的还是旧版?大概率是你没激活目标环境:
- 检查当前环境:
conda env list和conda info --envs看环境名 - 确认已激活:
conda activate myenv(替换myenv为你实际的环境名),再运行升级命令 - 验证内核是否绑定对环境:
jupyter kernelspec list,输出中路径应指向你刚升级的环境(如.../envs/myenv/share/jupyter/kernels/python3) - 若路径不对,需重新注册内核:
python -m ipykernel install --user --name=myenv --display-name "Python (myenv)"
没激活环境就升级,改的是 base 环境,而你启动 notebook 时用的是另一个环境的内核——版本自然对不上。
升级后 kernel 不识别新 Python 版本?
你升级了 notebook,但想用 Python 3.12 写代码,结果 kernel 列表里只有旧版 Python?这不是 notebook 的问题,而是 kernel 本身没更新:
- 确保目标 Python 解释器已安装(如
conda install python=3.12或pyenv install 3.12.3) - 在该 Python 环境里装
ipykernel:python -m pip install ipykernel - 注册新 kernel:
python -m ipykernel install --user --name py312 --display-name "Python 3.12" - Jupyter 启动后,在 Kernel → Change kernel 里选新名字
notebook 只管界面和服务,真正跑代码的是 kernel;更新 notebook 不会自动给你装新 Python 或新 kernel。
真正卡住人的,从来不是“怎么升级”这一步命令,而是搞不清 notebook、jupyter、kernel、Python 解释器四者之间的调用链。升级前先jupyter notebook --version 和 python -c "import sys; print(sys.version)" 都查一遍,比盲目重装强十倍。











