尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Jupyter Notebook从安装到排查:手把手入门基础操作

Jupyter Notebook从安装到排查:手把手入门基础操作 写 Jupyter 基础操作的内容不算少可实际最容易卡住人的往往不是某个深奥的功能而是几个特别基础的问题它和普通 PyCharm / VS Code 代码编辑器有什么区别到底怎么安装启动为什么启动时会报“jupyter 不是内部或外部命令”打开之后界面空白又怎么处理。如果你刚学 Python或者想把代码、说明和运行结果放在同一个文件里Jupyter Notebook 是非常顺手的选择。这篇文章我会按真实使用顺序拆开讲先理解概念再跑通安装和启动然后掌握单元格、快捷键、Markdown、内核和魔法命令这些核心操作最后给出常见问题的排查顺序。整体偏实战适合照着操作。1. 先搞明白Jupyter 和普通代码编辑器到底差在哪1.1 三种常见叫法Jupyter Notebook、JupyterLab、Anaconda新手最容易混淆的是三样东西Jupyter Notebook、JupyterLab 和 Anaconda。它们不是同一个概念但经常同时出现。Jupyter Notebook 是一个交互式网页应用你可以在浏览器里创建包含代码、文字、图表和运行结果的文件。这个文件的后缀是.ipynb本质上是一个 JSON 格式的文档记录了你写了什么、运行了什么、输出了什么。JupyterLab 是 Jupyter 项目推出的新一代界面你可以把它理解成 Notebook 的“加强版”。它同样能打开和运行.ipynb文件但窗口布局更灵活支持多标签页、拖拽分栏、文件管理器还可以直接在界面里打开文本文件、终端和图片。对新手来说两者选一个就行不需要同时纠结。Anaconda 是一个 Python 发行版它内置了 Python 解释器、常用数据科学库以及 Jupyter Notebook 和 JupyterLab。装一个 Anaconda等于把 Python 环境、包管理工具 conda、Jupyter 都一起装好了这也是我推荐新手使用它的原因。这三者简单说就是Anaconda 帮你装环境Jupyter Notebook 和 JupyterLab 都是用来写代码和笔记的界面。1.2 它是给哪些场景用的不是给哪些场景用的Jupyter 最大的特点是“交互式”。你在一个单元格里写代码按下快捷键就能立刻看到结果不用像写普通脚本那样每次从头跑整个文件。它适合的场景很明确学习 Python 语法想边写边看输出。做数据分析每一步都可以看到数据长什么样。写示例代码让读者直接看到代码和结果对应关系。做教学演示把一个分析思路分成多个小步骤。写带说明的代码笔记把 Markdown 说明和代码放在同一个文件里。但它不是万能的。如果你在维护一个大型软件项目需要拆模块、写单元测试、做严格依赖管理Jupyter 反而可能让事情变复杂。单元格可以乱序执行这是灵活性也是隐患。文件里变量被改过几次之后自己都容易搞不清当前状态。我的建议是先判断你要完成的是“分析过程”还是“软件工程任务”。前者用 Jupyter 很舒服后者老老实实写成.py项目文件更稳妥。1.3 一个 Notebook 文件结构cell、kernel、输出要理解 Jupyter先认识三个关键词单元格、内核、输出。单元格是文件里的基本单位常见有两种。代码单元格保存 Python 代码按运行快捷键后会执行Markdown 单元格保存格式化文本用来写标题、说明、注意事项。内核是真正执行代码的后端进程。你在界面上点运行代码会发给内核内核用 Python 解释器执行再把结果传回浏览器显示。所以如果内核崩了界面还在但代码跑不出来。输出就是代码运行后的结果包括文本、表格、图片、交互组件等。.ipynb文件会把这些输出一并保存所以别人打开你的文件时就算环境里没有重新运行也可能看到历史输出。这三个概念是排查问题的基础。比如“界面能打开但代码不执行”大概率是内核问题“文件能打开但看不到结果”可能只是输出被清掉了不是代码坏了。2. 安装与启动第一条 Jupyter 命令怎么跑通2.1 推荐安装方式Anaconda 还是 pip如果你电脑上没有 Python 环境或者刚开始学最省事的方式是安装 Anaconda。安装完成后在开始菜单里找到 Anaconda Prompt输入jupyter notebook回车之后浏览器会自动打开一个目录页面这就是 Jupyter Notebook 的入口。如果你已经装好了 Python并且不想安装 Anaconda也可以用 pip 安装python -m pip install --user jupyter python -m pip install --user jupyterlab这里我用python -m pip而不是直接pip目的是减少环境变量和 Python 版本冲突的坑。如果你平时用的是虚拟环境记得先激活环境再安装。安装完成后可以用命令确认jupyter --version能显示版本号说明安装基本成功。2.2 启动方式和目录指定启动 Jupyter 时最常遇到的困惑是它到底从哪个目录开始显示文件答案是“从你运行命令时所在的目录开始”。想指定目录建议先cd到目标目录再启动cd D:\work\notebooks jupyter notebookJupyterLab 也可以指定目录jupyter lab --notebook-dirD:\work\notebooks这里解释一下为什么要关注目录。Notebook 文件本身虽然保存在你选择的位置但代码里如果用了相对路径读取数据基准目录通常是启动目录。很多“找不到文件”的报错不是代码写错而是启动目录不对。2.3 “jupyter 不是内部或外部命令”的排查这个报错在 Windows 上特别常见尤其是手动安装 Python 的用户。报错原文一般是jupyter 不是内部或外部命令也不是可运行的程序或批处理文件。意思是系统在 PATH 环境变量里找不到jupyter命令。常见原因有三个Python 安装时没有勾选“Add to PATH”。安装了 Python但Scripts目录没有被加入系统 PATH。装了 Anaconda但没有使用 Anaconda Prompt而是在普通 CMD 里运行。处理顺序可以从简单到复杂先试python -m jupyter notebook这个方法不需要jupyter命令进 PATH只要 Python 本身能运行就行。如果你是 Anaconda 用户建议从开始菜单打开 Anaconda Prompt它会自动激活基础环境然后运行命令。如果你确认安装正常只是 PATH 没生效可以检查 Python 的Scripts目录路径并加入系统环境变量。不过不要盲目改 PATH改之前先看清楚现有配置。2.4 启动失败代码 2、打开空白页先按这个顺序查启动 Jupyter 时还有一种现象命令敲下去终端报错退出或者浏览器打开后一片空白。先区分错误类型。如果是启动时提示“启动失败代码 2”通常和端口、权限、配置文件有关。试一下换端口jupyter notebook --port8890如果指定了端口还不行可能是.jupyter配置文件异常。可以先备份再让 Jupyter 重新生成默认配置。注意改配置之前一定先把原来的目录复制一份避免重要配置丢失。如果是浏览器打开空白页优先顺序是换一个浏览器。部分老版本 Jupyter 对某些浏览器的兼容性不好。用无痕模式重新打开页面排除浏览器缓存影响。看启动终端有没有报错信息。如果页面停留在需要输入 token 或密码的状态运行jupyter notebook list查看当前 token然后复制到页面登录。很多时候空白页不是 Jupyter 坏了而是浏览器、token、端口这三件事没对齐。重新启动前先关掉所有相关终端和页面再重新运行一次能解决不少问题。3. Notebook 核心操作单元格、快捷键、代码与 Markdown3.1 单元格类型和运行逻辑打开一个新建的 Notebook 后你会看到一个空单元格。它默认是代码单元格白色背景带In [ ]标记。在单元格里输入代码message hello jupyter print(message)然后按Shift Enter运行。你会看到输出结果显示在单元格下方同时光标自动进入下一个单元格。如果是Ctrl Enter只运行当前单元格光标不会跳到下一个。这个区别在反复调试单个单元格时很有用。Notebook 有一个容易踩的坑单元格可以按任意顺序运行。比如你在第 1 个单元格定义了x 10第 2 个单元格输出x看起来没问题。但如果先运行第 2 个单元格再运行第 1 个就会报NameError。所以建议让代码按从上到下的逻辑顺序执行至少在分析流程里不要乱跳。3.2 快捷键越早记住越省时间Jupyter 有两种模式命令模式和编辑模式。按Esc进入命令模式此时键盘快捷键作用于单元格本身按Enter进入编辑模式此时输入会写入单元格内。这是理解快捷键的前提。常用快捷键建议先记住这些快捷键作用Shift Enter运行当前单元格并跳到下一个单元格Ctrl Enter运行当前单元格不跳动Esc后按A在当前单元格上方插入单元格Esc后按B在当前单元格下方插入单元格Esc后按M把当前单元格切换为 Markdown 单元格Esc后按Y把当前单元格切换为代码单元格Esc后连按两次D删除当前单元格Esc后按C/V复制 / 粘贴单元格Esc后按S保存文件操作时注意插入和删除快捷键必须在命令模式下按。很多新手在编辑模式里按A结果只是打了个字母 a。3.3 Markdown 单元格把代码和说明放在同一个文件里在需要写说明的地方新建一个单元格按Esc再按M把它切换成 Markdown 单元格然后输入内容。比如# 数据分析思路 1. 先读入原始数据 2. 清洗缺失值 3. 做统计描述 **注意**这里不要直接删除原始文件按Shift Enter运行后这段文本会渲染成带标题和列表的排版效果。Markdown 单元格非常适合写分析思路、记录结论、写教程。你可以把一段代码的用途、参数含义、踩坑记录直接写在代码旁边最终导出的文件既有代码又有说明阅读体验比纯脚本好很多。3.4 在 Notebook 里创建 .py 文件有人问Jupyter 怎么创建.py文件在 JupyterLab 里很简单左侧文件管理器右键选择“New”再选 “Python File”就得到.py文件。在旧版 Jupyter Notebook 界面里没有直接“新建 Python File”的按钮但可以用以下几种方式方法一在 Notebook 单元格里用%%writefile命令%%writefile sample.py def add(a, b): return a b if __name__ __main__: print(add(2, 3))运行后当前目录下会生成sample.py。方法二从菜单下载为.py文件。在 Notebook 菜单里选择 File - Download as - Python (.py)界面上运行的代码就会导出成脚本文件不过 Markdown 说明会变成注释。方法三加载已有.py文件到单元格%load sample.py运行这个命令后文件内容会被加载到当前单元格你再确认执行。这种方式适合把已有代码快速拿进 Notebook 里做二次修改。4. 目录、内核、魔法命令进阶基础操作4.1 切换启动目录别让文件路径成为第一个坑前面提到Jupyter 启动时所在目录会影响文件的相对路径。更稳妥的做法是在启动前就规划好目录结构D:\work\notebooks ├── data │ └── sales.csv └── notebooks └── analysis.ipynb然后在D:\work\notebooks目录下启动 Jupyter。这样在 Notebook 里读取数据时可以使用相对路径import pandas as pd df pd.read_csv(data/sales.csv) print(df.head())如果你想在已经打开的 Notebook 里查看当前目录可以运行import os print(os.getcwd())也可以临时切换目录os.chdir(D:/work/notebooks)不过我更推荐用启动参数指定目录而不是在每个 Notebook 里写os.chdir。原因很简单Notebook 是给人看和复现的代码里塞一堆路径切换别人复现时容易乱。4.2 内核卡住、内存不足、重启和清理输出运行循环较大的代码或者加载了很大的数据文件Jupyter 可能会卡住。这时候首先要确认是内核还在计算还是已经彻底死掉。在界面上看单元格右侧是否有In [*]如果有说明内核正在执行。你可以等一等也可以点菜单栏的 Kernel - Interrupt 中断执行。如果界面失去响应点 Kernel - Restart 重启内核。重启后变量会全部清空所以记得把必须的初始化代码从上到下重新运行一遍。如果重启后仍然很慢大概率是内存或代码逻辑问题。不要继续在同一个 Notebook 里堆大量中间变量可以把通用逻辑写成函数避免把所有数据都放在全局变量里。及时删除不再使用的大对象。在批量处理时分块处理而不是一次性把所有结果都加载到内存。这里还有一个常见误区输出太多也会拖慢 Notebook。比如print一个超大数组浏览器端渲染输出会非常卡。可以先运行小样本确认结果再扩大范围。4.3 常用魔法命令让 Notebook 更像工作台Jupyter 提供了一些“魔法命令”它们不是 Python 语法而是 Jupyter 环境提供的便捷指令。有几个很常用。计时%timeit sum(range(1000))运行后会多次执行并给出平均耗时适合简单测试代码性能。运行脚本%run sample.py相当于在 Notebook 里执行一个 Python 文件。另起系统命令!dir在 Windows 下会列出当前目录内容。也可以用!pip list查看已安装的包。写入文件%%writefile output.txt 第一行 第二行直接把单元格内容写入文件适合生成配置或小工具脚本。注意魔法命令只在 Jupyter 里有效。你把%timeit写进普通.py文件再用 Python 运行会直接报错。所以写脚本时要区分哪些代码是 Jupyter 专属哪些是纯 Python。4.4 检查代码规范Notebook 不是免检区很多人觉得 Notebook 只是草稿代码能运行就行。但如果 Notebook 要长期使用、分享给别人或者要作为项目交付物代码规范仍然很重要。基本的检查点包括变量命名有意义不要全是a、b、tmp。把重复逻辑抽成函数不要一个单元格塞几百行。每个单元格尽量完成一个独立步骤。运行顺序应该能从上到下复现不依赖乱序执行。关键输出用 Markdown 说明而不是留一堆无注释的打印结果。你可以把 Notebook 里的函数逐渐迁移到.py模块中再通过import调用。这样既保留了交互式分析的优势又让代码更接近工程规范。5. 常见任务和排查从单文件到多文件再到工具联动5.1 在 PyCharm / VS Code 里使用 Jupyter不是所有人都喜欢在浏览器里操作 Jupyter。很多人的日常主力是 PyCharm 或 VS Code。在 VS Code 里Jupyter 的支持比较自然。直接打开.ipynb文件选择一个 Python 解释器作为内核就可以像网页版一样运行单元格。你还可以在代码文件里使用# %%标记把普通的.py文件变成“类似 Notebook”的分块执行模式这个功能很适合从 Notebook 过渡到脚本。在 PyCharm 中也可以打开.ipynb文件但需要保证配置的 Python 解释器里装有jupyter。如果你用的 PyCharm 版本不支持直接创建 Notebook可以在设置里检查 Jupyter 相关插件或路径配置。实际体验上VS Code 对 Jupyter 的集成通常更轻量PyCharm 更适合把 Notebook 代码逐步工程化的场景。选择建议只做快速实验和笔记直接用浏览器版 JupyterLab长期写项目主力放 PyCharm 或 VS Code把 Jupyter 当成辅助分析工具。5.2 批量执行和持久化Notebook 该怎么放代码Notebook 适合做分析但如果你有 100 个文件要统一处理就不太适合把所有逻辑堆在一个个单元格里按行运行。更合理的做法是把通用处理逻辑写到my_utils.py。在 Notebook 里导入并调用。使用循环处理文件同时记录日志。示例from my_utils import process_file files [a.csv, b.csv, c.csv] for f in files: print(start, f) process_file(f) print(done, f)如果批量任务可能失败不要忽略异常。可以在循环里捕获并打印错误保证某个文件出问题时其他任务可以继续for f in files: try: process_file(f) except Exception as e: print(error, f, e)这里核心思路是Notebook 作为调度和观察界面真正的业务逻辑尽量封装成函数或模块方便测试、复用和排查。5.3 常见报错排查清单Jupyter 的报错看起来五花八门但大部分可以归到几类。我习惯按下面的顺序排查。现象优先排查方向命令找不到PATH、是否激活虚拟环境、是否使用 Anaconda Prompt启动失败代码 2端口被占用、配置文件异常、权限问题打开后空白浏览器兼容性、缓存、token、内核状态代码运行后没有输出单元格是否运行、输出是否被清理、内核是否正常导入自制模块失败当前工作目录、sys.path、是否先运行初始化单元格包安装后仍无法导入Python 解释器是否一致、pip 安装到哪个环境相对路径读取文件失败启动目录先检查os.getcwd()整体排查链路可以固定为看现象再看终端报错然后看输入路径接着看环境最后看参数和工具边界。不要一上来就重装 Jupyter很多问题重装反而浪费时间。5.4 一个简单流程的完整演示最后用一个纯 Python 小例子把前面的基础操作串起来。新建一个 Notebook在第一个 Markdown 单元格里写# 数值统计示例 这个示例用来演示 Notebook 的基础操作。在代码单元格里输入numbers [1, 2, 3, 4, 5] print(总和, sum(numbers)) print(数量, len(numbers)) print(平均值, sum(numbers) / len(numbers))运行后你应该看到三行输出。然后在下一个代码单元格里写入文件from pathlib import Path Path(result.txt).write_text(done)运行后当前目录会多出一个result.txt文件。这个文件在 JupyterLab 左侧文件列表里可以直接看到。到这里你已经完成了 Jupyter 里最核心的一轮操作创建单元格、写 Markdown、运行代码、查看输出、生成文件。后面不管你是继续学数据分析还是用 Jupyter 写代码示例流程都是这套。我个人更建议把第一次测试拆成三步启动、单条任务、批量任务。先保证单个单元格能正常输出再尝试生成文件最后再处理多个文件。这套节奏会让问题边界清晰很多。熟悉之后你会发现 Jupyter 的核心价值不在于某个复杂功能而在于它把代码、结果和说明放在了一起让你能更快搞清楚当前数据到底发生了什么。
返回列表