ARTICLE DETAIL

资讯详情

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

Jupyter Notebook 实战指南:从安装配置到高效使用技巧

Jupyter Notebook 实战指南:从安装配置到高效使用技巧 如果你刚学 Python估计对 Jupyter 的第一印象是怎么是个网页左边一堆文件右边一个空输入框老师让你写代码你好不容易敲了一行print(hello)按 ShiftEnter出来了然后你就开始纠结——为什么新建的文件叫 Untitled2为什么一个 cell 只输出最后一行为什么从 Anaconda 里打开 Jupyter 突然没反应这些问题其实都不是 Jupyter 难而是它的使用习惯和普通 IDE 差别太大。这篇教程我会从安装、启动、目录管理、cell 执行机制、日常高频踩坑一路讲到效率习惯尽量把“别人用了几年才明白”的细节一次性说清楚。1. 从安装到启动Jupyter Notebook 的网页版入口到底怎么进1.1 安装方式Anaconda 与 pip 二选一怎么选Jupyter 的全名叫 Jupyter Notebook早期又叫 IPython Notebook核心是“浏览器里写代码 代码下方直接给输出”。它不是一个孤立的软件而是一整套基于 Python 的服务。所以安装方式基本有三条路Anaconda、Miniconda、pip 单独装。对于绝大多数刚接触数据分析、机器学习的人来说我建议直接上 Anaconda。原因很简单它自带 Python、conda 包管理器而且预装了 Jupyter Notebook、JupyterLab、pandas、numpy 这些常用库。你不用先折腾 Python 环境再一个个装包装完打开就能跑。下载就直接去 Anaconda 官网选对应操作系统的 64 位安装包按提示下一步。安装时有几个细节要留意安装路径尽量不要带中文和空格比如别装到C:\Program Files\Anaconda3这种带空格的路径否则后面某些依赖库解析路径容易出幺蛾子。安装过程中会问“Add Anaconda to PATH”新版默认是不勾选的。我建议不勾选。勾了虽然能在普通 PowerShell 里直接敲conda但会把一堆路径塞进系统环境变量可能跟别的软件冲突。老老实实用开始菜单里的 Anaconda Prompt 就好。如果你已经有完整的 Python 环境也可以只用pip install notebook或pip install jupyterlab。这种方案适合已经习惯用 venv/conda 管理环境的人但新人不推荐因为缺的依赖比较多出了问题不好定位。装完之后怎么验证打开 Anaconda Prompt输入jupyter --version jupyter notebook --version如果能打印出版本号说明安装成功。1.2 启动命令、网页版登录地址与 Token 的来龙去脉启动 Jupyter Notebook 的命令很简单jupyter notebook但很多人卡在“网页弹不出来”或者“没有自动打开浏览器”这一步。其实 Jupyter 的本质是你在终端启动一个本地服务浏览器访问这个服务然后通过浏览器操作内核。启动后终端会显示类似这样的一段信息To access the notebook, open this file in a browser: file:///.../nbserver-...-open.html Or copy and paste this URL: http://localhost:8888/tree?token4f5e0c9d2a6b...这里的http://localhost:8888/tree就是你常听到的“Jupyter 网页版登录入口”。tree表示文件目录管理页也就是你新建 notebook 时看到的文件列表页面。后面那一长串token...是第一次访问的临时令牌相当于一把钥匙。浏览器没自动打开时只需要把终端里那一整串带 token 的地址复制进浏览器地址栏回车。如果 token 忘了也没关系回到终端找或者干脆设置一个固定密码jupyter notebook password按提示输入两遍密码重启 Jupyter 之后再访问就直接输用户名和密码不再需要 token。密码会存在~/.jupyter/jupyter_notebook_config.json里Windows 下路径通常是C:\Users\你的用户名\.jupyter\。平时常用启动参数我也整理一下用途命令指定端口启动jupyter notebook --port8889不自动打开浏览器jupyter notebook --no-browser指定工作目录启动jupyter notebook --notebook-dirD:/project局域网内提供访问jupyter notebook --ip0.0.0.0--ip0.0.0.0这个一般不推荐随便开除非你在公司内网或受控环境里。远程访问时注意防火墙端口这个平台就不过多展开了。最后提醒一句关闭浏览器页面不等于关闭 Jupyter。服务仍然跑在终端后台占用着 8888 端口。要彻底关闭回到启动 Jupyter 的那个终端窗口按CtrlC再按一次y确认。2. 把 Notebook 开在想要的位置临时目录与默认存放地址永久修改2.1 临时指定目录先 cd 再启动或加 --notebook-dir很多人装完 Jupyter 之后一直默认在用户目录下新建文件结果C:\Users\名字下面堆了一堆Untitled1.ipynb、Untitled2.ipynb。数据路径也乱七八糟。其实 Jupyter 的所有文件管理都是围绕“它启动时所在的目录”展开的你要做的第一件事就是把它开到项目文件夹。最直接的办法先在终端进入目标文件夹再启动 Jupyter。Windows 下打开项目文件夹在资源管理器地址栏输入cmd或powershell并回车就在当前目录打开了终端然后执行jupyter notebookMac/Linux 下就是cd /path/to/project jupyter notebook这样 Jupyter 打开后文件树里看到的直接就是这个项目的目录新建 notebook 也会默认保存在这里。如果你不想每次手动先 cd也可以加参数一次性指定jupyter notebook --notebook-dirD:/project注意路径里建议用正斜杠/在 Windows 上也能正常识别。--notebook-dir是临时指定的只对这一次启动生效下次启动还是回到默认目录。2.2 永久修改默认存放地址配置文件 jupyter_notebook_config.py如果你不想每次启动都手动带参数那就一次性把默认目录改成你习惯的位置。先生成配置文件jupyter notebook --generate-config这个命令会在~/.jupyter/目录下生成一个jupyter_notebook_config.py。Windows 用户去C:\Users\你的用户名\.jupyter\下找Mac/Linux 用户去~/.jupyter/下找。用文本编辑器打开这个文件找到这一行# c.NotebookApp.notebook_dir 把注释符#去掉改成你的目标路径例如c.NotebookApp.notebook_dir D:/JupyterProjects保存文件然后重启 Jupyter。重启之后文件树页面的地址栏会显示你新设置的根路径比如http://localhost:8888/tree/D:/JupyterProjects。这里有个容易搞混的点新版 JupyterLab 的配置文件参数名不太一样。如果你打开的是 JupyterLab需要找的是c.ServerApp.root_dir而不是c.NotebookApp.notebook_dir。如果你既用 Notebook 又用 Lab建议两个都设置成同一个路径c.NotebookApp.notebook_dir D:/JupyterProjects c.ServerApp.root_dir D:/JupyterProjects我遇到过不少“改了配置没生效”的情况排查顺序是这样的是不是启动了多个 Jupyter 实例旧实例还占着 8888 端口你访问的其实是旧实例。老实例没加载新配置新实例又因为端口被占而报错。解决办法是全部关掉或者换个端口验证。配置文件存错了位置确认修改的是~/.jupyter/jupyter_notebook_config.py不是别的副本。路径写错了权限特别是 Windows 下别把目录设在C:\Program Files这种需要管理员权限的位置。当前用的 Jupyter Notebook 和 JupyterLab配置参数名是否对应。2.3 移动已有 Notebook 文件与新建时保存位置你可能会遇到一个旧 notebook 已经躺在别的文件夹里想把它移到新目录。直接文件系统里移动.ipynb文件就行Jupyter 对它没有“必须从哪里打开”的限制。但注意一个坑notebook 里的相对路径是相对于当前工作目录的不是相对于.ipynb文件所在位置。比如你原来在D:/old里执行pd.read_csv(data.csv)没问题把 notebook 移到D:/project之后data 文件还在D:/old/data.csv继续用data.csv就会找不到。移动文件后最好在 notebook 里跑一下%pwd确认当前目录再补上路径。新建 notebook 时想存到别的文件夹很简单在文件树页面先点进目标文件夹然后点右上角New选择 Python 3 内核新建的 notebook 就默认保存在当前文件夹里。保存之前给它改个有意义的名字避免都叫 Untitled。3. 搞懂 Cell 的执行规则为什么只显示最后一行以及怎么查看执行进度3.1 输入输出机制最后一个表达式决定 OutJupyter 的核心结构是 cell也就是单元格。一个 cell 可以是一段代码也可以是一段 Markdown 文字。代码 cell 被执行时整段代码会被发给内核内核执行完输出显示在该 cell 下方。很多人第一次碰到“一个 cell 只输出最后一行结果”先怀疑是不是自己代码写错了。其实这是 IPython 的 REPL 特性。看个例子print(第一行输出) 1 1 2 3这个 cell 运行后输出区会是这样第一行输出 Out[1]: 5为什么会显示5而不是2因为对于一个代码 cellIPython 只会把“最后一个表达式的值”作为Out[n]展示出来。print(第一行输出)是标准输出不算表达式结果1 1是倒数第二个表达式被吞掉了最后一个表达式2 3的值是 5于是显示 5。再看一个更实际的情况a 10 b 20 a b输出只有Out30。这很正常Jupyter 不会把前面的a 10、b 20都显示出来因为它们在 Python 语义里只是赋值语句没有产生可在 REPL 中展示的表达式值。想一次性看多个结果最朴素的做法是用 printprint(a b) print(a * b)这样不管有多少个 print都会按顺序显示。3.2 多个结果展示与抑制输出除了 print更推荐用 IPython 自带的display函数尤其是处理图片、DataFrame、Markdown 这些富内容时from IPython.display import display x 1 y 2 display(x) display(y)输出区会依次显示1和2每个对象都占一个独立输出块。和 print 不同display 能保留对象的富文本展示形式比如 DataFrame 的表格样式、matplotlib 的图片对象。还有一个高频技巧画图时不想让 cell 输出一堆[matplotlib.lines.Line2D at 0x...]文本只需要在最后一个绘图语句后面加英文分号import matplotlib.pyplot as plt plt.plot([1, 2, 3], [1, 4, 9]);分号的作用是隐藏该表达式的返回值。图形照常显示但 cell 不会新增一行多余的 Out 文本。这个小操作能让演示 Notebook 看起来干净很多。3.3 查看执行进度的几种手段执行进度怎么查Jupyter 没有一个显眼的“绿色滚动条”告诉你跑了百分之多少但你有很多间接信号。第一个信号是 cell 左侧的In[]标记。运行中的 cell 会显示成In[*]执行完成后变成In[12]这样带编号的样式。编号从 1 开始递增表示你这是第几个执行过的 cell。如果看到某个 cell 一直停在In[*]说明它还在跑。第二个信号是菜单栏右侧的内核状态图标。空闲时显示空心圆忙时显示实心圆鼠标悬停会看到 “Kernel Busy / Idle” 字样。另外工具栏上也有方形停止按钮和圆形重启按钮停止按钮用来中断当前运行重启按钮会杀掉内核重来变量会全部清空。如果你要精确测量代码执行时间用魔法命令%%time sum 0 for i in range(1000000): sum i%%time放在 cell 第一行整个 cell 执行完会打印 CPU 时间和 Wall time。如果只测一行用%timeit会做多次测试更适合微基准测试。循环里要看进度条装一个 tqdm 就能解决from tqdm.auto import tqdm for i in tqdm(range(10000)): pass执行时会在 cell 输出区出现一个动态进度条带预计剩余时间。这个在跑模型训练、批量数据处理时非常有用。不要裸跑一个几万次的循环然后干等加个进度条比什么都强。4. 高频问题排查Anaconda 打不开、复制粘贴失灵、Untitled2 重命名4.1 Anaconda 里的 Jupyter 突然打不开从哪里开始查“Anaconda 里的 Jupyter 突然用不了了”可能是所有初学 Python 的人都会遇到的一次噩梦。常见症状是Anaconda Navigator 里点 Launch转圈半天浏览器没反应或者直接双击 Jupyter Notebook 图标没有任何窗口弹出。我的排查顺序基本固定第一步绕过 Anaconda Navigator直接打开 Anaconda Prompt手动执行jupyter notebook这样做的目的是让错误信息直接打到终端窗口里。Navigator 会封装错误反而让你看不到真正原因。第二步看终端是否报端口占用。比如显示[Errno 10013] ... 或者 [Errno 98] Address already in use说明 8888 端口被另一个 Jupyter 进程占了。很可能你之前关掉了浏览器但终端服务并没有关掉。解决办法是换端口启动jupyter notebook --port8890也可以用jupyter notebook list查看当前正在运行的 notebook 服务根据提示决定关掉还是换端口。第三步如果端口没问题但还是一直打不开怀疑配置文件损坏。最简单的处理是重命名.jupyter目录让 Jupyter 重新生成默认配置mv ~/.jupyter ~/.jupyter_backupWindows 用户直接把C:\Users\用户名\.jupyter改名为.jupyter_backup。之前设置的密码和自定义参数会失效但至少能恢复启动。确认没问题后再把备份里的配置文件挑出来恢复。第四步如果网页能打开但新建 Notebook 时提示 Kernel Error 或内核一直连不上。这种情况多半是 ipykernel 与当前 Python 环境不匹配。执行conda install ipykernel --update-deps或者pip install --upgrade ipykernel jupyter_client之后重启 Jupyter 验证。还有一个很琐碎但常见的坑系统里既有 Anaconda又有 Windows Store 或官网安装的 Python导致 PowerShell 里敲jupyter指向了另一个路径。用where jupyterWindows或which jupyterMac/Linux看一下如果路径不在 Anaconda 目录下就换 Anaconda Prompt 操作。4.2 复制粘贴的正确姿势与缩进坑“打代码时怎么复制粘贴 Jupyter”听上去像新手问题但实际坑很多。从外部网页、PDF、Word 复制代码粘贴到 Jupyter cell 时经常出现这些状况中文引号混进代码报SyntaxError: invalid character缩进全变成空格且层级错乱换行丢失一行代码变成一根长面条粘贴后莫名其妙多出缩进导致IndentationError有效的处理办法是先把代码粘贴到记事本或 VS Code观察一遍内容是否干净再复制进 Jupyter cell。这一步等于帮你去掉富文本格式。粘贴到 Jupyter 时推荐用CtrlShiftVMac 用CommandShiftV进行无格式粘贴避免浏览器带上样式。如果你要复制整个 cell而不是 cell 里面的几行文字那就要用命令模式。先按Esc让 cell 退出编辑状态这时 cell 边框变成命令模式样式。然后按键C复制当前 cellV将复制的 cell 粘贴到当前 cell 下方ShiftV将复制的 cell 粘贴到当前 cell 上方注意在编辑模式里按C只是输入字母 C这就是为什么很多新手觉得快捷键失灵。先按 Esc再按字母键顺序不能反。从浏览器外部粘贴代码到 cell 时如果发现粘贴后 Tab 缩进失效还有一个土办法先粘贴到一个新建的 Markdown cell再从 Markdown cell 里复制到代码 cell。因为 Markdown cell 会保留纯文本结构往往能过滤掉不少格式问题。虽然绕但能救命。4.3 重命名 Untitled 文件与自动保存机制文件树里那些Untitled.ipynb、Untitled1、Untitled2是 Jupyter 按顺序生成的默认名。Untitled2不代表它经历了什么奇怪的事只是当前目录下已经存在Untitled和Untitled1系统自动跳到下一个编号。重命名有两种方式在文件树页面单击文件名称点击上面工具栏的 Rename 按钮输入新名称。在 notebook 内部按Esc进入命令模式按R输入新名称并回车。建议一拿到文件就重命名。不然多个 Untitled 混在一起再想找回哪个是哪个真的很痛苦。关于保存Jupyter 有自动保存和 checkpoints 机制。默认会在你操作过程中自动做检查点保存。如果想要保险可以经常手动CtrlS。如果误删了内容可以在菜单File - Revert to Checkpoint里选择历史版本恢复。注意 checkpoint 保存的是.ipynb的快照不是你data.csv、模型文件这些外部数据所以数据和代码还是得靠 Git 或网盘这类外部版本管理。5. 让 Jupyter 效率明显提升的几个习惯5.1 命令模式与快捷键先分清再记忆很多人用 Jupyter 半年还在全程鼠标点点点效率不可谓不低。Jupyter 的 cell 有两种模式编辑模式和命令模式。编辑模式正在输入代码光标在 cell 里闪烁边框一般是绿的或蓝色高亮。命令模式光标不在 cell 里cell 只有一个外边框此时按字母键会被解释为快捷键。新手搞不清这两种模式就会发生“按 B 没插入新 cell 而是打了一个 b”的情况。所以先形成肌肉记忆写完代码先按Esc再按快捷键。常用快捷键列表功能快捷键运行当前 cell并跳转到下一个 cellShiftEnter运行当前 cell光标留在原处CtrlEnter运行当前 cell并在下方插入新 cellAltEnter在上方插入 cellA在下方插入 cellB删除当前 cellD 按两次当前 cell 转为 MarkdownM当前 cell 转为代码Y保存 notebookCtrlS查找替换F命令面板CtrlShiftPMac 用户把 Ctrl 换成 Command不过 ShiftEnter 这几个键基本一致。5.2 魔法命令与 Markdown cell 的配合Jupyter 底层是 IPython所以支持大量魔法命令。刚开始不需要全背但这几个能显著提升体验%pwd查看当前工作目录。看到它你就能理解很多“读不到文件”的问题。%cd /path/to/folder切换当前工作目录。注意这个目录切换只对当前 notebook 的内核有效不会改 Jupyter 的根目录。%ls列出当前目录文件。调试找不到数据文件时非常好用。%matplotlib inline让 matplotlib 输出直接嵌入 Notebook旧版本尤其需要这一句。新版本 Notebook 默认可视但写上无害。%%time放在 cell 顶部显示整个 cell 的运行时间。%run xxx.py运行一个外部 Python 脚本并把它产生的变量导入当前命名空间。Markdown cell 也是 Jupyter 的精华。切换成 Markdown 之后你可以写标题、写说明甚至写 LaTeX 公式。比如第一个 cell 用来描述项目背景第二个 cell 用来导入库第三个 cell 设置全局参数后面才是数据处理。这种结构让 notebook 不只是一段滚动代码更像一份可执行的报告。5.3 保存、导出与清理输出分享 notebook 给别人或者提交到 Git 之前建议做一次清理菜单Kernel - Restart Clear Output然后CtrlS保存。这样.ipynb文件体积会小很多别人打开时也不会看到一堆辣眼睛的报错输出。当然如果你要展示给老板看分析结果那就保留输出。导出成 Python 脚本命令行比菜单更稳定jupyter nbconvert --to script notebook.ipynb会生成一个notebook.py里面包含所有代码 cellMarkdown 变成注释。这在要把 Notebook 里的逻辑整合进正式项目时很有用。再提一个长期养生习惯每个项目单独开一个 conda 环境。Jupyter 里运行的 Python 是当前环境里的 Python如果你在 base 环境装了一堆包某天升级 Anaconda 后所有包全乱是很常见的事。项目建独立环境时conda create -n myproject python3.11 conda activate myproject pip install jupyter notebook pandas matplotlib jupyter notebook这样环境之间互不干扰某个项目的包坏了重建环境就行不至于牵连其他工作。Jupyter 我用了快五年真正让我觉得顺手起来的关键不是某个高级插件而是把默认路径固定下来、搞懂 cell 的输出机制、养成“写完就保存并规范命名”的习惯。这几个点看起来小但每一项都能帮你少踩几个坑。希望这篇能让你在下一次新建 notebook 时直接落在正确目录里而不是又开一个 Untitled3。
返回列表