ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Jupyter安装与使用完整指南:从环境配置到内核注册与故障排查

Jupyter安装与使用完整指南:从环境配置到内核注册与故障排查 跑数据分析、学Python、做机器学习实验甚至只是临时验证一段代码逻辑Jupyter 这个名字基本绕不开。它最大的价值在于把代码、运行结果、文字说明、图表糅在同一个文档里边写边跑边看结果特别适合探索性的工作。但很多人卡在第一步安装。网上教程一大把有的让你装 Anaconda有的让你 pip 装有的直接丢一句命令行输入 jupyter notebook 就行结果新手照着做要么命令找不到要么浏览器死活不弹要么代码框点了运行没有任何反应。这篇就把 Jupyter 的安装和使用从头到尾捋一遍从环境准备、安装路线选择、启动配置到单元格操作、自动补全、目录生成再到那些让人抓狂的故障怎么排查全都讲清楚。不管你是刚学 Python 的在校学生、需要做数据报告的职场人还是想把实验记录串起来的算法工程师只要认识中文、愿意照着敲命令就能跟着走下来。我会把每一步为什么这么做也带上避免你只会复制粘贴、一出错就懵。1. 动手之前先把 Jupyter 这件事想明白1.1 Jupyter 到底解决了什么问题Jupyter 的前身是 IPython Notebook2014 年项目改名为 Jupyter名字来自它支持的三种核心语言 Julia、Python、R。它本质上是一个基于浏览器界面的交互式计算环境后端跑着一个叫内核Kernel的进程负责真正执行代码前端是浏览器里的网页两者通过约定好的协议通信。你点一次运行浏览器把单元格内容发给内核内核执行完把输出结果回传显示。这个架构决定了它两个重要特性一是前端和后端是分离的所以你可以把内核跑在服务器上、浏览器开在笔记本上二是状态是持续保留的同一个内核里定义的变量在后面的单元格里能直接调用不用像写 .py 脚本那样从头跑一遍。对做数据分析的人来说这个状态保留太关键了。你读进来一个几百 MB 的数据集清洗了几十行代码如果每次都从头执行整个脚本光等待就要人命。而在 Notebook 里数据只加载一次后面反复调整绘图参数、改模型超参只跑那一个单元格就行。这也是为什么它成为数据科学领域事实上的标准工具探索过程本身是迭代的、试错性的Notebook 的形态天然贴合这种工作方式。1.2 它和 PyCharm、VS Code 写脚本到底差在哪经常有人纠结我装了 PyCharm也装了 VS Code还有必要用 Jupyter 吗我的答案是看场景。写工程化项目、要打包部署、要严格的分层和测试脚本式 IDE 更合适因为文件之间的依赖、类型检查、重构能力都更成熟。但如果是以下这几类活儿Jupyter 明显更顺手数据清洗和探索、画图调样式、跑一次性实验、写带解释的分析报告、给别人演示一段算法逻辑。举个例子你要给同事解释某个指标为什么异常用脚本你得先跑一遍生成图再截图贴到文档里用 Notebook 你可以把读取、过滤、聚合、绘图全放在一个文档里同事翻一遍就知道每一步做了什么、中间结果长什么样。而且 Notebook 文件本身是 JSON 格式的 .ipynb里面存着代码、输出、Markdown 文字天然就是可执行的报告。所以我的习惯是探索和汇报用 Jupyter沉淀成产品就用脚本重写。1.3 哪些版本的 Jupyter 该选现在能装的东西主要有三个经典的 Jupyter Notebook、新一代的 JupyterLab、以及底层共用的内核。JupyterLab 是官方的下一代界面支持多标签、拖拽布局、内置终端和文件浏览器功能更全Jupyter Notebook 老版本界面更简洁学习成本低而 Notebook 7 之后其实已经基于 JupyterLab 的组件重写了两者内核共用装哪个都不冲突。我的建议纯新手先用经典 Notebook 找到感觉熟悉了再上 JupyterLab。如果公司或实验室给的是统一环境那就跟着环境走别自己乱折腾。另外要注意不管装哪个Python 解释器是前提Jupyter 自己不执行 Python 代码它靠的是 ipykernel 这个包把 Python 内核接进来。搞不清楚这层关系后面遇到装了 Jupyter 却新建不了 Python 笔记本就会一头雾水。2. 装之前环境这关必须先过关2.1 Python 解释器怎么装才不给自己挖坑Jupyter 依赖 Python所以第一步永远是装 Python。Windows 用户去官网下载安装包安装界面的第一个关键勾选项是Add Python to PATH务必勾上否则后面命令行里敲 python 会提示找不到命令很多人第一道坎就栽在这。安装路径尽量用默认别放到带中文或空格的目录里比如我的项目/Python环境这种路径后面某些库编译时会莫名其妙报错。版本选择上我建议用 3.10 到 3.12 之间的稳定版别一味追最新。原因很简单很多科学计算库对最新版 Python 的预编译包wheel支持会滞后几周到几个月你用了刚发布的新版本pip 装 numpy 或 pandas 时可能发现没有现成轮子只能本地编译而 Windows 上编译科学库基本是场灾难。装完在命令行敲python --version和pip --version两个都能正常输出版本号环境这关就算过了。如果 pip 版本太老顺手升级一下python -m pip install --upgrade pip用python -m pip而不是直接pip是为了确保调用的是当前这个 Python 对应的 pip多版本共存时能避免装错地方。2.2 Anaconda 路线和 pip 路线怎么选安装 Jupyter 有两条主流路线。第一条是装 Anaconda它是一个打包好的科学计算发行版Python、Jupyter、numpy、pandas、matplotlib 全给你预装好开箱即用还自带 conda 这个环境管理器。好处是省事坏处是体积大安装包几百 MB装完几个 GB而且它自带的包版本和 pip 装的容易打架。第二条是干净路线自己装 Python然后用 pip 依次装 jupyter、numpy、pandas 等需要什么装什么环境清爽可控。我的实际建议是如果你只是短期学个 Python 基础、跑跑教学案例Anaconda 省心如果你是长期要用、需要在多个项目间切换依赖、追求环境干净走 pip 路线配合虚拟环境更靠谱。别两套混着用同一个环境里既用 conda 装又用 pip 装同一个包出问题时很难排查。定了哪条路线就坚持走哪条这是很多人踩坑的根源。2.3 虚拟环境为什么强烈建议开虚拟环境这个东西新手常觉得多余等吃过亏就懂它的好了。假设你手上同时有两个项目A 项目需要 pandas 1.5B 项目依赖 pandas 2.0 的新接口。如果全装在全局环境里那必然是装了新版旧项目跑不动装了旧版新项目用不了。虚拟环境就是给每个项目划一块独立的包空间互不干扰。用 Python 自带的 venv 就够用不需要额外装东西。在项目目录下执行python -m venv .venvWindows 上激活用.venv\Scripts\activatemacOS 或 Linux 用source .venv/bin/activate。激活后命令行前面会出现(.venv)提示这时候装的包都只落在这个环境里。有个关键点一定要记牢Jupyter 是在哪个环境里启动的就用哪个环境的内核。很多我在虚拟环境里装了 pandasNotebook 里却提示没这个模块的问题根源就是 Jupyter 启动环境和你装包的环境不是同一个。后面我会讲怎么把虚拟环境注册成一个独立内核彻底解决这个坑。3. Windows 下手把手把 Jupyter 装起来3.1 用 pip 安装 Jupyter 的完整命令环境准备好、虚拟环境激活之后正式安装。注意一个新变化从 Jupyter 生态的版本演进看官方现在推荐用jupyterlab经典的 notebook 也能装但更建议先装 lab。命令如下python -m pip install jupyterlab如果你还是想用经典界面那就python -m pip install notebook想两个都要也行两条命令都执行它们共用内核互不冲突。装的时候留意命令行输出正常应该看到一连串包名和版本号最后出现Successfully installed。如果卡在某个包上很久多半是网络问题可以换国内镜像源加速python -m pip install jupyterlab -i https://pypi.tuna.tsinghua.edu.cn/simple装完之后做一次验证敲jupyter --version会列出 jupyterlab、notebook、jupyter_core 等组件的版本。能列出来说明安装成功。这一步输出的内容里如果有某个组件显示not installed说明对应的包没装上按提示单独补装即可。3.2 把虚拟环境注册成内核一劳永逸这一步是本文最想强调的。你的虚拟环境里装了一堆包但 Jupyter 默认只认识它自己所在的那个 Python 环境。要让虚拟环境出现在 Notebook 的内核列表里先在这个虚拟环境里装 ipykernelpython -m pip install ipykernel然后执行注册命令python -m ipykernel install --user --namemyproject --display-namePython (myproject)--name是内核的内部标识建议用英文、简单、唯一--display-name是你在 Notebook 界面下拉菜单里看到的漂亮名字可以用中文。执行成功后重启 Jupyter新建笔记本时就能在下拉列表里看到Python (myproject)选中它这个笔记本用的就是我们那个虚拟环境之前装的 pandas、numpy 全能直接 import。想查看当前装了哪些内核执行jupyter kernelspec list想删掉某个不再用的执行jupyter kernelspec remove 内核名。3.3 生成配置文件把端口和工作目录定死默认情况下Jupyter 启动时的工作目录是你敲命令时所在的那个目录端口是 8888。如果不做任何配置你每次都得先 cd 到项目文件夹再启动很麻烦。更省事的做法是写一份配置文件。先生成jupyter notebook --generate-config它会告诉你配置文件路径通常是用户目录下的.jupyter/jupyter_notebook_config.py。用文本编辑器打开里面全是注释找到对应项修改即可。几个最常用的配置项新版基于 ServerApp老版是 NotebookApp按你版本对应c.ServerApp.root_dir rD:\work\notebooks设定启动后的默认工作目录c.ServerApp.port 8888端口被占用时改成 8889、8890c.ServerApp.open_browser False不自动弹浏览器适合想手动控制的情况c.ServerApp.ip 127.0.0.1监听地址只本机访问填这个最安全。改完配置文件命令行敲jupyter lab或jupyter notebook就能按你的设定启动。启动后终端会打印一个类似http://127.0.0.1:8888/lab?tokenxxxx的地址复制到浏览器打开就行。那个 token 是一串临时访问凭据别随便截图发出去尤其别发到公开的地方。4. 界面和单元格这些操作必须练熟4.1 单元格的两种模式和执行机制Jupyter 界面里最基本的单位是单元格Cell。它有两种模式理解和切换是入门第一课命令模式按 Esc用来操作整个单元格比如新增、删除、移动、切换类型编辑模式按 Enter用来在单元格里打字写代码。这两种模式是新手最容易懵的地方——为什么我按了 A 没输入字母反而是上面插了一行就是因为你当时在命令模式A 是快捷键在上方插入单元格。记住光标在闪、边框是绿色就是编辑模式边框变蓝、光标消失就是命令模式。单元格还分类型Code 用来写可执行代码Markdown 用来写文字说明。运行 Code 单元格按 ShiftEnter 执行并跳到下一个按 CtrlEnter 执行但留在原地按 AltEnter 执行并在下方插入新单元格。执行过的单元格左侧会出现[1]、[2]这样的序号表示执行顺序。这里有一个巨坑序号不一定是按从上到下排列的因为你可能先跑了下面的、再回来补跑上面的导致变量状态和文件里看到的顺序不一致。做正式分析前务必用菜单里的Restart Kernel and Run All从头跑一遍确认结果可复现这是好习惯。4.2 快捷键和 Markdown 文本效率翻倍的关键快捷键不用全记先记这几个最常用的命令模式下A在上方插入单元格B在下方插入DD连着按两次 D 删除当前单元格M切到 MarkdownY切回 CodeShiftEnter运行。编辑模式下Ctrl]和Ctrl[可以做缩进调整Tab补全或缩进ShiftTab弹出函数签名提示。这几个用熟写起来飞快。Markdown 单元格是很多人忽略的宝藏。它是用来写解释、标题、注意事项的支持标准 Markdown 语法还能写数学公式。想在文档里加标题就用#、##、###想加粗用**文字**列要点用-。这样写出来的 Notebook 就成了一份结构清晰的报告代码块负责做了什么Markdown 块负责为什么这么做、结论是什么。我一个很实在的建议是每写几行代码就补一小段 Markdown 说明别等最后回头补因为当时不写过一周你自己都想不起来这段代码为啥要那样过滤。4.3 代码自动补全怎么配才顺手Jupyter 能不能像 PyCharm 那样智能提示这是高频问题。能但要装东西。经典 Notebook 最成熟的方案是 nbextensions先装python -m pip install jupyter_contrib_nbextensions jupyter contrib nbextension install --user python -m pip install jupyter_nbextensions_configurator jupyter nbextensions_configurator enable --user装完重启界面里会多一个 Nbextensions 标签页进去勾选 Hinterland自动补全和 Table of Contents (2)目录等你需要的扩展。要注意兼容性这堆扩展对 Notebook 7 和 JupyterLab 支持不好如果你用的是新版本建议直接上 JupyterLab 的 LSP 方案python -m pip install jupyterlab-lsp python-lsp-server[all]装完 JupyterLab 里就有代码补全、跳转定义、悬停提示、诊断报错了体验接近正经 IDE。实测下来这套组合在 JupyterLab 上很稳比折腾老版 nbextensions 省心。装完记得重启内核再试不然扩展不会生效。5. 那些让人抓狂的故障一个个拆开看5.1 单元格执行没反应、代码框点了不动这是搜索量特别高的一个问题。点了运行代码框左侧序号变成[*]然后一直转圈不结束或者干脆没有任何变化。按顺序排查第一先看代码本身有没有死循环或者超大数据量操作比如不小心读了个几十 GB 的文件、或者写了个没退出条件的 while这种情况内核是真的在算耐心等等或者中断菜单 Kernel - Interrupt。第二看是不是内存爆了任务管理器里盯着 Python 进程的内存增长如果一直涨到顶基本就是内存不够需要优化数据处理逻辑比如分块读取。第三试着重启内核Kernel - Restart重启会把所有变量清空回到干净状态。如果重启也不行可能是内核进程已经卡死。去看启动 Jupyter 的那个终端窗口有没有报错堆栈。常见的还有内核连接失败提示 Kernel died 或者 Connection failed。这种情况多半是内核和前端通信中断解决办法是关掉整个 Jupyter 服务终端里 CtrlC 两次重新启动。还有一种隐蔽的原因是虚拟环境里的 ipykernel 版本和 Jupyter 不匹配把 ipykernel 升级到最新通常能解决python -m pip install --upgrade ipykernel5.2 弹不出浏览器、页面打不开怎么办另一个高频困惑命令行明明启动了浏览器就是不弹或者弹出来了却提示无法访问。先说弹不出的情况。启动时终端会打印一个带 token 的完整地址直接手动复制到浏览器打开就行这是最省事的办法。如果连地址都没打印出来说明启动本身有问题回到终端看报错。还有可能是默认浏览器设置被某些软件改了导致调用失败检查一下系统默认浏览器是不是正常。再说页面打不开。常见原因是端口被占用8888 被别的程序占了这时换个端口启动jupyter lab --port8890或者干脆查一下是谁占了 8888netstat -ano | findstr :8888找到对应的进程号 PID再用taskkill /PID 进程号 /F结束它Windows。另外如果你开了多个 Jupyter 实例后启动的那个会自动找 8889、8890 等端口你打开的还是旧地址自然就连不上。还有一种情况是浏览器缓存捣乱试一下无痕窗口。如果这些都不行把启动日志里的完整报错复制下来去检索基本都能找到同款案例。5.3 常见问题速查表现象可能原因处理办法命令行提示找不到 python安装时没勾 PATH重装并勾选 Add Python to PATH提示找不到 jupyter 命令未安装或未激活对应环境激活环境后重装 jupyterlabNotebook 里 import 报模块不存在内核和装包环境不一致注册虚拟环境内核并切换代码执行一直[*]死循环、数据过大、内存不足中断内核、优化代码、分块处理浏览器不弹出默认浏览器异常手动复制终端里的地址打开页面无法访问端口占用或地址不对换端口、确认最新启动的地址内核连接失败内核卡死或 ipykernel 版本旧重启服务、升级 ipykernel自动补全不生效扩展未装或未重启装扩展后重启内核和浏览器这张表建议存下来遇到问题先从现象对到原因能省下大量瞎试的时间。5.4 我的几条私房避坑经验第一条路径里千万别有中文和空格。这不是迷信是无数血泪教训某些库在编译或读取文件时遇到中文路径直接抛编码错误报错信息还看不懂。项目目录就用纯英文加下划线比如D:\work\data_analysis。第二条notebook 文件别和数据集混在一起放最好数据、代码、输出分目录因为 .ipynb 里会存输出图片多了文件会变得非常大动不动几十 MB用 Git 管理时很难受。第三条.ipynb 文件直接进 Git 是个坑因为它存了输出和随机 ID每次跑一遍文件就变了diff 全是噪音。解决办法是用 nbstripout 工具在提交前自动清掉输出python -m pip install nbstripout nbstripout --install装好之后提交时会自动把输出剥离只留代码协作时清爽很多。第四条写长文档时养成先 Markdown 后代码的习惯结构先搭好再往里面填代码别一上来就闷头写代码最后想整理成报告时发现逻辑乱成一团。6. 从能用到用好还有这几步可以走6.1 生成目录和导出报告感直接拉满文档写长了没有目录翻起来很痛苦。JupyterLab 里装个 TOC 扩展左侧就会自动根据 Markdown 标题生成可点击的目录跳转非常方便。经典 Notebook 可以用前面提到的 nbextensions 里的 Table of Contents (2)勾选后工具栏会多一个目录按钮。如果不想装扩展也可以用 Markdown 手写目录配合锚点链接实现跳转适合需要精确控制的场景。导出功能也很实用。写好的 .ipynb 通过命令可以转成多种格式jupyter nbconvert --to html report.ipynb jupyter nbconvert --to markdown report.ipynb jupyter nbconvert --to pdf report.ipynb转 HTML 最省事别人拿到直接浏览器打开不用装环境。转 PDF 需要额外装 LaTeX 环境体积很大非必要不建议为了导个 PDF 去装。转 Markdown 适合继续加工成正式文档。我一般给同事发分析结果直接导 HTML图、代码、结论一眼看全比发一堆截图专业得多。6.2 JupyterLab 上手后值得折腾的地方JupyterLab 相比经典界面最大的变化是一切皆面板。左边是文件浏览器中间是可以拖拽排布的多标签工作区你可以在同一个窗口里开三个笔记本加一个终端加一个文本编辑器布局随便拉。内置终端这个功能我特别爱用不用来回切窗口就能敲 git 命令。它的命令面板CtrlShiftC能搜到几乎所有功能不用记菜单位置。另外 JupyterLab 支持扩展管理界面上有可视化开关比经典 Notebook 装扩展方便太多。常用扩展有前面说的 LSP智能补全、TOC目录、git版本管理集成。装扩展用 pip 或 npm 都行但要注意扩展版本和 JupyterLab 主版本要匹配装完重启服务有的还需要执行jupyter lab build重新构建一次。新版对构建这一步做了优化很多纯前端扩展免构建省去不少麻烦。6.3 局域网内给同事访问的几个注意点有时候需要让同一局域网内的另一台设备访问你的 Jupyter比如用平板看结果或者用另一台机器跑。默认只监听 127.0.0.1本机之外访问不了。要开放的话启动时加参数jupyter lab --ip0.0.0.0 --port8888这样它会监听所有网卡同网段的其他设备通过你的 IP 加端口就能访问。但这里必须提醒一旦开放一定要设置密码。生成配置文件后设置密码有多种方式最直接的是在配置文件里配置密码哈希或用jupyter server password命令设置。千万别在没有任何认证的情况下开放到更大范围那等于把整台机器的执行权限交出去风险极大。仅在可信的局域网内、临时用一下用完及时关掉这是我始终坚持的原则。日常用下来我的体会是Jupyter 的安装本身并不复杂真正消耗时间的是环境隔离、内核注册、端口和认证这几个环节。把虚拟环境和内核的关系理清楚把配置文件写好把 nbstripout 这类小工具装上后面就是纯粹的写代码和看结果。最后分享一个小技巧新建 notebook 之前先在纸上或者 Markdown 里列好这次分析要回答的几个问题再动手写代码你会发现整个过程比边想边敲顺畅得多文档的条理也完全不一样。
返回列表