JupyterLab 教 Python 开发者魔法

JupyterLab 是 Jupyter Notebook 的继任者,感觉就像玩开启了作弊码的电子游戏。
238 位读者喜欢这篇文章。
How to write a web service using Python Flask

Yuko Honda 在 Flickr 上发布。CC BY-SA 2.0

在克利夫兰举行的 PyCon 2019 大会上,我遇到了许多优秀的人,并深入了解了 Python 社区的运作方式。但我主要的技术收获与 JupyterLab 的魔力有关,JupyterLab 被描述为 Jupyter Notebook 的一个基于 Web 的用户界面,Jupyter Notebook 是一款应用程序,“允许您创建和分享包含实时代码、方程式、可视化和叙述性文本的文档。”

当我在 JupyterLab 中处理 Python 代码时,我感觉自己像个巫师,远早于我从命令行开发数据科学相关 Python 时所感受到的自信。下面简单介绍一下这种魔力以及如何亲身体验它。

Project Jupyter、Jupyter Notebook、JupyterLab 和 Python

在 PyCon 之前,我听说过 Jupyter Notebook,但我从未完全理解它与 Python 的关系。让我们从最基础的开始。

Project Jupyter 是一个伞形组织,负责监督多个交互式和高度可视化的软件开发界面的设计,这些界面允许以可视化的方式执行代码。 

Project Jupyter 是一个非营利性开源项目,于 2014 年从 IPython Project 衍生而来,旨在支持跨所有编程语言的交互式数据科学和科学计算。Jupyter 将始终是 100% 开源软件,所有人均可免费使用,并根据修改后的 BSD 许可证的宽松条款发布。

Jupyter 项目的强大之处在于内核,内核充当“计算引擎”来执行文档中包含的代码。最初的内核是用于 Python 的,名为 IPython,但还有更多可用内核。截至今天,项目 wiki 上列出了 128 个内核,涵盖从 Ansible 到 Fortran 的各种语言。

Jupyter 项目更可见的部分以用户界面 (UI) 的形式呈现,开发者可以在用户界面中以可视化方式使用任何内核支持的语言进行编程。该项目旗下最著名的 UI 是 Jupyter Notebook,用户在 notebook 中开发软件。

Notebook 将基于控制台的交互式计算方法扩展到一个全新的方向,提供了一个基于 Web 的应用程序,适合捕捉整个计算过程:开发、记录和执行代码,以及交流结果。

Jupyter Notebook 被认为是该组织旗舰项目,自 2011 年启动以来,对代码可视化产生了巨大影响。最近,JupyterLab 作为 Jupyter UI 未来更模块化的设计而推出。

Jupyter Notebook 和 JupyterLab 都允许以更可视化的方式进行 Python 开发,并且都是编辑代码的强大工具。

为什么选择 JupyterLab 而不是 Jupyter Notebook?

Jupyter Notebook 的悠久历史在灵活性方面带来了一些代价。

根据 Jupyter 的博客,该项目始于 2011 年的历史背景使其“难以自定义和扩展”。当我阅读更多关于所有这些工具和标准如何长期发展的资料时,这变得有道理了。早在 2001 年,Fernando Perez 就开发了 IPython,这是一种特定于 Python 的 notebook 标准。IPython 维护了一种用 Python 语言编写 notebook 的标准方法,近年来,Jupyter 项目成为渲染它们的场所。Jupyter Notebook 的 README 给出了摘要

Jupyter notebook 是 Project Jupyter 的一个语言无关的 HTML notebook 应用程序。2015 年,Jupyter notebook 作为 IPython 代码库的 The Big Split™ 的一部分发布。IPython 3 是最后一个主要的单体版本,其中包含语言无关的代码(如 IPython notebook)和特定于语言的代码(如用于 Python 的 IPython kernel)。随着计算跨越多种语言,Project Jupyter 将继续在此 repo 中开发语言无关的 Jupyter notebook,并在社区的帮助下,开发在其自身离散 repo 中找到的特定于语言的内核。 [The Big Split™ 公告] [Jupyter Ascending 博客文章]

2018 年,JupyterLab 项目宣布已准备好供用户使用。它决定最近才开始,当时围绕标准化以及如何提供高性能 notebook 体验有了更多确定性,这对我来说是有道理的。它还通过构建在 扩展系统之上解决了 Jupyter Notebook 的扩展挑战,该系统将摆脱 Notebook 扩展中面临的挑战。

这一切与 Python 编程有什么关系?Python 是一种非常流行的编程语言,在数据科学分析中越来越受欢迎。任何 IPython 文件 (.ipynb) 都可以在 Jupyter 项目中运行,以获得令人难以置信的开发体验。

项目 描述
Project Jupyter “Project Jupyter 的存在是为了开发开源软件、开放标准以及跨数十种编程语言的交互式计算服务。”
Jupyter Notebook “Notebook 将基于控制台的交互式计算方法扩展到一个全新的方向。”
JupyterLab “JupyterLab 是 Project Jupyter 的下一代基于 Web 的用户界面。”
IPython “IPython 为交互式计算提供了丰富的架构。”

如果所有这些项目名称让您感到困惑,请记住以下几点

  • Project Jupyter 提供可视化编程语言的标准。
  • Jupyter Notebook 是一款非常流行的可视化软件。
  • JupyterLab 是 Jupyter Notebook 的现代重新设计。
  • IPython 提供在这些项目中运行 Python 代码的工具。

根据 JupyterLab 文档,它计划最终取代 Jupyter Notebook。

通过教程试用

现在您对术语和历史有了更多了解,请尝试在 PyCon 上展示的“IPython and Jupyter in Depth”教程。我发现它是对 JupyterLab 的绝佳介绍。

安装完成后(我使用 Anaconda 管理安装),在 JupyterLab 中导航到“1 - Beyond Plain Python.ipynb”。

JupyterLab tutorial

魔术是神奇的

JupyterLab 具有特别强大的功能,这些功能以 % 符号开头。您可以运行的许多功能中的每一个都使 JupyterLab 成为我见过的最灵活的开发环境。

当您仍然在上面加载的 notebook 中时(此处从上面的屏幕截图放大),按 Option+Return(或 Alt+Enter)创建一个新单元格

Make a new cell

然后使用感叹号 (!)—我最喜欢的魔术—向当前目录中的终端会话发送命令。例如,运行 !ls 会列出本地文件

List local files

当您将 Python 与您的魔术结合使用时,这会变得更加强大;例如,您可以将本地文件拉入 Python 变量中

Pull local files into a Python variable

虽然 Python 具有强大的 os 模块,允许您与开发环境交互,但可以选择使用 Bash 语法快速拉取您想要的数据,同时将其保留在 Python 对象类型中(如字符串列表),这很有趣。

要点

如果您一直想使用 Jupyter Notebook 来探索 Python,我希望本文能帮助您了解生态系统是如何发展的,并让您决定立即开始使用 JupyterLab。如果您是 Python 新手,也是命令行新手,JupyterLab 会让您从一开始就感觉自己拥有超能力。我从未像通过本教程那样,通过 UI 学习获得如此多的乐趣。换句话说,JupyterLab 感觉就像玩开启了作弊码的电子游戏。您似乎可以做任何事情!

如果您更熟悉基于 Linux 的命令行界面,请务必在开始使用时大量使用感叹号运算符。编写 !ls -la 将调用您的默认终端模拟器,并让您运行命令以确保您了解自己所在的位置和正在做什么。

我强烈建议您在享受本教程乐趣的同时,探索 JupyterLab 中提供的更多魔术功能

标签
I'm happiest at a microphone
Matt 曾是 EMC 存储专家、VMware vExpert 以及其他专有技术的粉丝。他现在专注于开源和 DevRel 采用。

3 条评论

ipython magic 是 ipython 解释器的一个功能,长期以来在终端的 ipython 以及 Jupyter Notebook 中都可用。它们并非 Jupyter Lab 独有。虽然 Jupyter Lab 有一些很酷的功能,更像是一个 IDE,但我不认为 magic 是卖点,因为您可以在任何使用 ipython 的地方使用它们,而不是标准的 Python 解释器。!ls 和其他 os 命令也是如此,它们可以在 ipython 中运行,但在没有更详细的 os 库的情况下不能在 python 中运行。

感谢您提到这一点 Nicholas。我一开始忽略了历史的这一部分。

很高兴看到这些惯例的渊源如此之深。我很高兴能更多地了解 Jupyter 生态系统。

回复 by Nicholas Reith (未验证)

以前不知道 jupyter lab,真有趣

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.