1+1=10

记记笔记,放松一下...

Jupyter 学习小记(一)

简介

Jupyter 是什么?

Jupyter(发音 /ˈdʒuːpɪtər/ )是一个开源的交互式计算(interactive computing)项目,起源于数据科学和科学计算领域,目的是为用户提供一种整合代码、文档、数学公式和可视化的直观工具。它的历史可以追溯到 IPython 项目,逐步演变为如今广泛使用的 Jupyter 生态系统。

icon

  • Jupyter 的名称源于其所支持的三种核心编程语言,即 Julia、Python 和 R
  • 它的名字和标志是对伽利略(Galileo)发现木星(Jupiter)卫星的致敬。

notebook

一个典型的 Jupyter Notebook 文件的后缀是 .ipynb,它由一系列的 单元格(Cell) 组成,主要分为以下两种类型:

  • 代码单元格(Code Cell):
    • 用于编写代码。
    • 支持即时运行,并在单元格下方显示结果。
  • Markdown 单元格(Markdown Cell):
    • 用于编写文档,支持 Markdown 语法。
    • 可以插入标题、文本、列表、公式(LaTeX 语法)等。

历史

  • 2001 年:IPython 项目诞生,由 Fernando Pérez 开发,作为增强版的 Python 交互式命令行工具。
  • 2011 年:发布 IPython Notebook,支持代码、文本、数学公式和可视化的集成开发环境。
  • 2014 年:IPython Notebook 更名为 Jupyter Notebook,支持多种语言(如 Python、R、Julia)。
  • 2015 年:Jupyter Notebook 在数据科学和教学领域迅速普及,成为主流工具。
  • 2018 年:推出 JupyterLab,作为下一代用户界面,支持更复杂的项目开发。
  • 2023 年:发布 Jupyter Notebook 7,基于 JupyterLab 技术栈,升级经典 Notebook。

安装

安装 jupyterlab

jupyter lab

通过

1
pip install jupyterlab

或者

1
conda install -c conda-forge jupyterlab

安装完成后,在site-packages下会有如下一堆包

模块 功能简介
jupyter_client 管理前端与 Kernel 的通信。
jupyter_core 提供核心配置和工具,是整个生态的基础模块。
jupyter_events 处理事件流和内部通信。
jupyter_lsp 提供语言服务器协议支持,增强代码编辑体验(如补全、检查)。
jupyter_server 核心服务器,管理文件系统、Kernel 会话和 REST API。
jupyterlab JupyterLab 的前端界面,提供现代化的交互式开发环境。
jupyterlab_server 支持 JupyterLab 的扩展和静态文件服务。
jupyterlab_pygments 提供代码语法高亮功能,基于 Pygments 实现。

在Scripts下,更是一堆可执行程序(以Windows为例),比如:

  • jupyter.exe
  • jupyter-dejavu.exe
  • jupyter-kernel.exe
  • jupyter-kernelspec.exe
  • jupyter-lab.exe
  • jupyter-labextension.exe
  • jupyter-labhub.exe
  • jupyter-migrate.exe
  • jupyter-nbconvert.exe
  • jupyter-run.exe
  • jupyter-server.exe
  • jupyter-troubleshoot.exe
  • jupyter-trust.exe

执行如下命令,会调用jupyter-lab 来启动浏览器界面

1
jupiter lab

安装 jupyter-console

jupyter-console 是 Jupyter 提供的一个 基于命令行的交互式计算环境,它允许用户通过终端(或命令行)直接与 Jupyter Kernel 进行交互。

jupyter console

安装:

1
pip install jupyter-console

执行:

1
jupyter console

特点:

  • 无需图形界面,比 Jupyter Notebook 或 JupyterLab 的图形界面更轻量。
  • 类似于 IPython,但支持 Jupyter 的多语言 Kernel

安装 qtconsole

qtconsole

QtConsole 是 Jupyter 生态系统中的一个 图形化的交互式控制台,提供了类似于命令行的界面,但比终端更强大、更直观。它基于 Qt 框架开发,支持丰富的功能,包括代码高亮、内嵌图形显示、Markdown 渲染等。

安装(它依赖于PyQt或PySide):

1
conda install qtconsole

运行:

1
jupyter qtconsole

安装 notebook

notebook

安装:

1
conda install -c anaconda notebook

运行

1
jupyter notebook

.ipynb

.ipynb 是 Jupyter Notebook 的文件格式,全称是 "Interactive Python Notebook"。它是 Jupyter Notebook 使用的核心文件类型,支持 代码、文本、图表 和 交互式内容 的组合,是一种用于交互式计算的文档格式。

.ipynb 文件的结构是基于 JSON(JavaScript Object Notation) 的纯文本文件。它可以分为以下几个部分:

  • cells:存储每个单元格的内容,包括代码、Markdown 文本等。
  • metadata:Notebook 的全局元数据,例如 Kernel 和语言信息。
  • nbformat 和 nbformat_minor:文件格式的版本号。
  • outputs:存储代码单元的执行结果,包括文本输出、图形、错误信息等。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "0ca5ef4a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Hello, 1+1=10!\n"
     ]
    }
   ],
   "source": [
    "print('Hello, 1+1=10!')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6dd9d4f5",
   "metadata": {},
   "source": [
    "# This is a Markdown cell\n",
    "You can write text here."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}

方括号?

notebook

方括号中的数字表示该单元格 被执行的顺序。每次运行一个代码单元时,Jupyter 会为其分配一个递增的执行计数。

例如:

  • 第一个运行的单元格显示 [1]
  • 第二个运行的单元格显示 [2]
  • 第三个运行的单元格显示 [3]
  • 如果单元格 未被运行过,方括号会显示为空白:[ ]
  • 如果 再次运行 某个单元格,数字会更新为最新的执行顺序。如果之前某个单元格的方括号是 [2],再次运行后会更新为当前的执行计数(如 [5])。
  • 如果 重新启动 了 Kernel,所有的执行计数会重置。所有单元格的方括号会变成 [ ],表示未执行。

魔法指令

Jupyter的魔法命令(Magic Commands)用于简化操作和扩展 Notebook 的功能。分为两种类型:

行魔法命令(Line Magics)

  • 以单个 % 开头。
  • 只作用于当前 行。
  • 一行中只能包含魔法命令。
魔法命令 功能
%time 测量 一行代码 的执行时间。
%timeit 多次运行 一行代码 并测量平均执行时间。
%pwd 显示当前工作目录。
%ls 列出当前目录中的文件和文件夹。
%env 列出当前环境变量。
%who 列出当前会话中的变量。
%pip install 安装 Python 包(等同于在终端中运行 pip install)。
%debug 进入调试模式。
... ....

单元魔法命令(Cell Magics)

  • 以两个 %% 开头。
  • 作用于整个 单元格。
  • 单元格中可以包含多行代码或指令。
魔法命令 功能
%%time 测量 整个单元格 的执行时间。
%%timeit 多次运行 整个单元格 并测量平均执行时间。
%%writefile 将单元格中的内容写入一个文件中。
%%capture 捕获单元格中的输出(标准输出和标准错误),可以保存到变量中。
%%bash 在单元格中运行 Bash 命令。
%%HTML 渲染 HTML 代码。
%%latex 渲染 LaTeX 代码。
%%script 在单元格中运行不同语言的脚本(如 Python、Ruby、Perl 等,需安装对应的内核)。
... ....

Shell 命令

在 Jupyter 中,还可以使用以 ! 开头的命令。这些命令并不属于 Jupyter 的魔法命令(Magic Commands),而是调用系统的 Shell 环境执行命令。

比如:

1
2
3
!dir
!ls
!pip install numpy

扩展?

  • https://github.com/jupyterlab/extension-examples
  • https://jupyterlab.readthedocs.io/en/4.2.x/user/extensions.html

在 jupyter lab 启动的界面中,可以查看和安装扩展

ext

如果,在命令行下,那么

查看已安装扩展:

1
jupyter labextension list

安装扩展,使用pip或conda,比如:

1
pip install jupyterlab-code-formatter

注意事项

内核管理(Kernel)

Jupyter Notebook 的代码执行依赖一个运行中的 内核(Kernel),它的状态会直接影响 Notebook 的运行。

  • 所有单元格共享一个内核(即所有变量、函数、导入的模块在内核中是全局可见的)。
  • 变量的值会随着单元格的执行而变化,即使重新运行某些单元格,之前的变量值可能仍然存在。
  • 重启内核后,所有之前运行的变量都会消失,需要重新运行相关单元格。

单元格的运行顺序

Jupyter Notebook 的单元格可以按任意顺序运行,这可能导致代码之间的依赖关系出现问题。

  • 从头运行所有单元格:使用 Kernel > Restart & Run All,确保代码按正确顺序运行。
  • 保持单元格的逻辑性:将相互依赖的代码放在相邻的单元格中,便于维护和运行。

文件路径问题

Notebook 的工作目录(当前路径)是启动 Jupyter 的目录,而不是 Notebook 文件所在的目录。

  • 相对路径问题:在 Notebook 中使用相对路径加载文件(如 data/file.csv),路径是相对于运行 Jupyter 的工作目录,而不是 Notebook 的文件位置。
  • 切换路径可能引发混淆:如在 Notebook 中切换了 os.getcwd(),后续路径引用可能会出错

参考

  • https://jupyter.org
  • https://github.com/jupyter
  • https://en.wikipedia.org/wiki/Project_Jupyter
  • https://jupyterlab-contrib.github.io/migrate_from_classical.html

Python