VS Code 中的 Jupyter Notebooks

Jupyter(前身为IPython Notebook)是一个开源项目,它允许您在一个称为notebook的画布上轻松结合Markdown文本和可执行的Python源代码。Visual Studio Code原生支持Jupyter Notebooks,并通过Python代码文件提供支持。本主题涵盖了Jupyter Notebooks的原生支持,并演示了如何:

  • 创建、打开和保存 Jupyter Notebooks
  • 使用Jupyter代码单元格
  • 使用变量资源管理器和数据查看器查看、检查和过滤变量
  • 连接到远程Jupyter服务器
  • 调试 Jupyter Notebook

设置您的环境

要在Jupyter Notebooks中使用Python,您必须在VS Code中激活一个Anaconda环境,或者您安装了Jupyter包的另一个Python环境。要选择一个环境,请使用命令面板中的Python: 选择解释器命令(⇧⌘P (Windows, Linux Ctrl+Shift+P))。

一旦激活了适当的环境,您可以创建并打开一个Jupyter Notebook,连接到远程Jupyter服务器以运行代码单元,并将Jupyter Notebook导出为Python文件。

工作区信任

开始使用Jupyter Notebooks时,您需要确保在一个受信任的工作空间中工作。有害代码可能会嵌入到笔记本中,而工作空间信任功能允许您指定哪些文件夹及其内容应允许或限制自动代码执行。

如果您尝试在VS Code处于不受信任的工作空间并运行受限模式时打开笔记本,您将无法执行单元格,并且丰富的输出将被隐藏。

创建或打开一个Jupyter Notebook

你可以通过从命令面板运行创建:新的Jupyter Notebook命令(⇧⌘P (Windows, Linux Ctrl+Shift+P))或在工作区中创建一个新的.ipynb文件来创建Jupyter Notebook。

空白的Jupyter笔记本

接下来,使用右上角的内核选择器选择一个内核。

内核选择器

选择内核后,位于每个代码单元格右下角的语言选择器将自动更新为内核支持的语言。

语言选择器

如果您有一个现有的 Jupyter Notebook,您可以通过右键单击文件并使用 VS Code 打开,或者通过 VS Code 文件资源管理器打开它。

运行单元格

运行单个代码单元

一旦你的代码被添加,你可以使用单元格左侧的运行图标来运行单元格,输出将显示在代码单元格下方。

运行Jupyter代码单元

要运行选定的代码单元格,您也可以在命令和编辑模式下使用键盘快捷键。Ctrl+Enter 运行当前选定的单元格。Shift+Enter 运行当前选定的单元格并在下方立即插入一个新单元格(焦点移动到新单元格)。Alt+Enter 运行当前选定的单元格并在下方立即插入一个新单元格(焦点保持在当前单元格)。

运行多个代码单元格

运行多个代码单元可以通过多种方式完成。你可以使用Notebook编辑器主工具栏中的双箭头来运行Notebook中的所有单元,或者通过在当前代码单元上方或下方选择全部运行运行上方所有运行下方所有

运行多个代码单元

运行部分中的单元格

为了更轻松地在笔记本中运行相关的单元格,您可以使用运行部分中的单元格操作来运行由Markdown部分标题分组的单元格。此操作在笔记本的大纲视图和粘性滚动元素中可用。

在Sticky Scroll元素中,右键单击您选择的标题,并通过上下文菜单中的操作运行该部分。在Outline视图中,选择悬停或选择时出现的工具栏图标,然后通过提供的操作运行单个单元格或一组单元格。

保存你的 Jupyter 笔记本

您可以使用键盘快捷键 Ctrl+S文件 > 保存 来保存您的 Jupyter Notebook。

导出你的 Jupyter Notebook

你可以将Jupyter Notebook导出为Python文件(.py)、PDF或HTML文件。要导出,请在主工具栏上选择... > 导出。然后你会看到一个文件格式选项的下拉菜单。

将Jupyter Notebook转换为Python文件

注意: 对于PDF导出,您必须安装TeX。如果没有安装,当您选择PDF选项时,您将会收到需要安装TeX的通知。此外,请注意,如果您的Notebook中只有SVG格式的输出,它们将不会在PDF中显示。要在PDF中包含SVG图形,请确保您的输出包含非SVG图像格式,或者您可以先导出为HTML,然后使用浏览器保存为PDF。

在Notebook编辑器中处理代码单元格

Notebook 编辑器使得在您的 Jupyter Notebook 中创建、编辑和运行代码单元变得非常容易。

创建一个代码单元

默认情况下,空白笔记本将有一个空的代码单元格供您开始使用,而现有的笔记本将在底部放置一个。将您的代码添加到空的代码单元格中以开始。

msg = "Hello world"
print(msg)

简单的Jupyter代码单元

代码单元模式

在使用代码单元格时,一个单元格可以处于三种状态:未选中、命令模式和编辑模式。代码单元格左侧和编辑器边界的垂直条显示了单元格的当前状态。当没有可见的条时,单元格未被选中。当一个单元格被选中时,它可以处于命令模式或编辑模式。

未选中的Jupyter代码单元格

在命令模式下,单元格左侧会出现一个实心垂直条。可以对单元格进行操作并接受键盘命令。

命令模式下的代码单元

在编辑模式下,单元格编辑器周围会显示一个实心垂直条和边框。可以修改单元格的内容(代码或Markdown)。

编辑模式下的代码单元格

要切换模式,您可以使用键盘或鼠标。在键盘上,按下Enter键进入编辑模式,或按下Esc键进入命令模式。使用鼠标时,点击单元格左侧的垂直条或代码单元格中代码/Markdown区域外的区域。

添加额外的代码单元格

您可以使用主工具栏、单元格的添加单元格工具栏(悬停时可见)以及通过键盘命令来添加代码单元格。

添加代码单元格

要在当前选中的单元格下方添加一个新单元格,请使用主工具栏或单元格的悬停工具栏中的加号图标。

当代码单元格处于命令模式时,使用A键在选中的单元格上方添加一个单元格,使用B键在选中的单元格下方添加一个单元格。

选择一个代码单元格

您可以使用鼠标或键盘上的上下箭头键来更改选中的代码单元格。当代码单元格处于命令模式时,您还可以使用J键(向下)和K键(向上)。

选择多个代码单元格

要选择多个单元格,首先以选择模式选择一个单元格。填充的背景表示选中的单元格。要选择连续的单元格,按住Shift键并点击您想要选择的最后一个单元格。要选择任意一组单元格,按住Ctrl键并点击您想要添加到选择中的单元格。

多选单元格

移动代码单元格

您可以通过拖放操作在笔记本中上下移动单元格。对于代码单元格,拖放区域位于单元格编辑器的左侧,如下所示。对于已渲染的Markdown单元格,您可以点击任意位置进行拖放操作。

移动代码单元格

要移动多个单元格,您可以在选择中包含的任何单元格中使用相同的拖放区域。

键盘快捷键 Alt+Arrow 也可以移动一个或多个选中的单元格。

删除代码单元格

要删除代码,您可以使用代码单元格工具栏中的删除图标。当所选代码单元格处于命令模式时,您可以使用键盘快捷键dd

删除代码单元格

撤销你的最后一次更改

你可以使用 z 键来撤销你之前的更改,例如,如果你不小心进行了编辑,你可以撤销到之前正确的状态,或者如果你不小心删除了一个单元格,你可以恢复它。

在代码和Markdown之间切换

Notebook 编辑器允许您轻松地在 Markdown 和代码之间切换代码单元格。选择单元格右下角的语言选择器,您可以在 Markdown 和所选内核支持的任何其他语言之间切换(如果适用)。

更改语言

你也可以使用键盘来更改单元格类型。当一个单元格被选中并处于命令模式时,M 键将单元格类型切换为 Markdown,Y 键将单元格类型切换为代码。

一旦设置了Markdown,您就可以在代码单元格中输入Markdown格式的内容。

代码单元中显示的原始Markdown

要渲染Markdown单元格,您可以选择单元格工具栏中的勾选标记,或使用键盘快捷键 Ctrl+EnterShift+Enter

如何渲染Markdown

渲染的Markdown显示在代码单元格中

清除输出或重启/中断内核

如果您想清除所有代码单元输出或重新启动/中断内核,您可以使用主笔记本编辑器工具栏来完成此操作。

笔记本工具栏

启用/禁用行号

当您处于命令模式时,可以通过使用 L 键来启用或禁用单个代码单元格中的行号。

代码单元格中启用的行号

要在命令模式下为整个笔记本切换行号显示,可以在任何单元格上使用 Shift+L

笔记本启用了行号

目录

要浏览您的笔记本,请在活动栏中打开文件资源管理器。然后在侧边栏中打开大纲标签。

目录

您可以在大纲视图中使用过滤器控件来包含Markdown标题、代码单元格和代码单元格符号。过滤器对应以下设置:

  • notebook.outline.showMarkdownHeadersOnly
  • notebook.outline.showCodeCells
  • notebook.outline.showCodeCellSymbols

注意: 默认情况下,大纲只会显示Markdown。要显示代码单元格,请启用以下设置:Notebook > Outline: Show Code Cells

Jupyter Notebook 编辑器中的 IntelliSense 支持

Python Jupyter Notebook 编辑器窗口具有完整的智能感知功能——代码补全、成员列表、方法的快速信息以及参数提示。在 Notebook 编辑器窗口中输入代码时,您可以像在代码编辑器中一样高效。

智能感知支持

变量探索器和数据查看器

在Python Notebook中,可以查看、检查、排序和过滤当前Jupyter会话中的变量。在运行代码和单元格后,通过选择主工具栏中的Variables图标,您将看到当前变量的列表,这些列表将随着代码中使用变量而自动更新。变量窗格将在笔记本底部打开。

变量资源管理器

变量资源管理器

数据查看器

有关变量的更多信息,您还可以双击某一行或使用变量旁边的在数据查看器中显示变量按钮,以在数据查看器中查看变量的更详细信息。

数据查看器

或者,您可以使用其他扩展提供的数据查看体验,例如Data Wrangler。Data Wrangler 扩展提供了一个丰富的用户界面,用于显示有关数据的洞察,并帮助您执行数据剖析、质量检查、转换等操作。了解更多关于我们文档中的 Data Wrangler 扩展

筛选行

在数据查看器中过滤行可以通过在每列顶部的文本框中输入来完成。输入您想要搜索的字符串,任何在该列中包含该字符串的行都会被找到:

数据查看器

如果你想找到一个完全匹配的项,请在过滤器前加上'=':

数据查看器

可以通过输入正则表达式来进行更复杂的过滤:

数据查看器

保存图表

要从您的笔记本中保存图表,只需将鼠标悬停在输出上并选择右上角的保存图标。

保存输出

注意: 支持渲染使用 matplotlibAltair 创建的图表。

自定义笔记本差异比较

在底层,Jupyter Notebooks 是 JSON 文件。JSON 文件中的部分被渲染为单元格,这些单元格由三个部分组成:输入、输出和元数据。使用基于行的差异比较来比较笔记本中的更改是困难且难以解析的。笔记本的丰富差异编辑器使您可以轻松查看单元格每个部分的更改。

你甚至可以自定义希望在差异视图中显示的更改类型。在右上角,选择工具栏中的溢出菜单项,以自定义你希望包含的单元格组件。输入差异将始终显示。

自定义笔记本差异

要了解更多关于VS Code中的Git集成,请访问VS Code中的源代码管理

调试 Jupyter Notebook

有两种不同的方式来调试Jupyter笔记本:一种称为“逐行运行”的简单模式,以及完整的调试模式。

注意: 这两个功能都需要 ipykernel 6+。有关安装或升级 ipykernel 的详细信息,请参阅 此 wiki 页面

逐行运行

逐行运行允许您一次执行单元格中的一行代码,而不会被其他VS Code调试功能分散注意力。要开始,请选择单元格工具栏中的逐行运行按钮:

逐行运行按钮

使用相同的按钮逐条语句前进。您可以选择单元格中的停止按钮提前停止,或工具栏中的继续按钮继续运行到单元格的末尾。

调试单元格

如果你想使用VS Code支持的全套调试功能,例如断点和能够进入其他单元格和模块的能力,你可以使用完整的VS Code调试器。

  1. 首先,通过在笔记本单元格的左边距点击来设置你需要的任何断点。
  2. 然后选择菜单中Run按钮旁边的Debug Cell按钮。这将在调试会话中运行该单元格,并在任何运行的代码中的断点处暂停,即使它位于不同的单元格或.py文件中。
  3. 您可以像在VS Code中一样使用调试视图、调试控制台和调试工具栏中的所有按钮。

请注意,在jupyter notebook中调试单元格不会使用launch.json中的任何调试配置。可以通过诸如jupyter.debugJustMyCode等设置进行自定义。

调试单元格按钮

搜索笔记本

您可以使用键盘快捷键 Ctrl/Cmd + F 来搜索笔记本(或通过过滤搜索选项来搜索部分内容)。点击过滤器选项(漏斗图标)以进行跨搜索:

  • Markdown 单元格输入 (Markdown 源代码)
  • Markdown 单元格输出 (渲染后的 Markdown)
  • 代码单元输入 (代码单元源)
  • 代码单元输出 (单元输出)

默认情况下,Notebook 搜索仅过滤单元格输入。

搜索选项

连接到远程Jupyter服务器

你可以通过连接到远程Jupyter服务器,将Jupyter Notebook中的密集计算任务卸载到其他计算机上。一旦连接成功,代码单元将在远程服务器上运行,而不是在本地计算机上。

连接到远程Jupyter服务器:

  1. 打开笔记本右上角的内核选择器按钮(或从命令面板运行Notebook: Select Notebook Kernel命令)。

    笔记本内核选择器

  2. 选择现有的Jupyter服务器选项以连接到现有的Jupyter服务器。

    选择现有的Jupyter服务器

  3. 首次连接到现有服务器时,选择输入正在运行的Jupyter服务器的URL

    选择连接到现有服务器

  4. 当提示输入正在运行的Jupyter服务器的URL时,提供服务器的URI(主机名),并在URL参数中包含认证令牌?token=。(如果您在VS Code终端中启用了认证令牌启动服务器,带有令牌的URL通常会出现在终端输出中,您可以从中复制。)或者,您可以在提供URI后指定用户名和密码。

    提示输入Jupyter服务器URI

注意: 为了增加安全性,微软建议配置您的Jupyter服务器时采取安全预防措施,如SSL和令牌支持。这有助于确保发送到Jupyter服务器的请求经过认证,并且与远程服务器的连接是加密的。有关保护笔记本服务器的指导,请参阅Jupyter文档

数据科学配置文件模板

Profiles 允许您根据当前项目或任务快速切换扩展、设置和用户界面布局。为了帮助您开始使用 Jupyter Notebooks,您可以使用 Data Science 配置文件模板,这是一个精选的配置文件,包含有用的扩展、设置和代码片段。您可以直接使用配置文件模板,或者将其作为起点,进一步自定义以适应您自己的工作流程。

您通过Profiles > Create Profile...下拉菜单选择一个配置文件模板:

创建带有配置文件模板的配置文件下拉菜单

一旦你选择了一个配置文件模板,你可以查看设置和扩展,并且如果不想将它们包含在新配置文件中,可以删除个别项目。基于模板创建新配置文件后,对设置、扩展或用户界面所做的更改将保存在你的配置文件中。