Jupyter Tutorial

我们应该知道,Python 之所有“崛起”,得益于机器学习和数学统计应用的兴起。至于 Python 适合数学统计和机器学习的原因,很多读者可能并不会想到,Jupyter Notebook 功不可没。可以好不夸张地说,作为一名 Python 数据工程师,如果不会使用 Jupyter Notebook(Jupyter Lab),你真是太 Out 了。

更多 Python 版本管理以及运行环境相关内容,请关注博主 Git 博文系列:

之一 >>> Python-Vers Management

之二 >>> Pythoner 神器之 virtualenv

之三 >>> 一文了解数据科学神器 Anaconda

之四 >>> Jupyter Tutorial


What Is Jupyter Notebook?

说了这么多,到底什么是 Jupyter Notebook 呢?按照 Jupyter 创始人的说法,起初他是想做一个综合 Ju(Julia)Py(Python)R 三种科学运行语言的计算工具平台,所以将其命名为 Jupyter

Jupyter 发展到现在,已经成为了一个几乎支持所有语言,能够把软件代码开发、运行输出、解释文档、多媒体资源整合在一起的 基于网页的多功能科学运行平台。Jupyter Notebook 的工作界面如图:

简言之,Jupyter Notebook 是以网页的形式打开,可以在页面中直接编写和运行代码,代码的运行结果也会直接在代码块下显示。假如在编程过程中需要编写说明文档,可在同一个页面中直接编写,便于作及时的说明和解释。


System Composition

1 –> 网页应用

Jupyter Notebook 是基于网页形式的,并且结合了代码开发运行、说明文档编写、交互计算和其他富媒体形式的网页应用工具。

简言之,Jupyter Notebook 是可以实现特定功能的网页工具。

2 –> 文档

Jupyter Notebook 中所有代码开发运行、说明文档编写、交互计算和其他富媒体形式的输入和输出,都是 以文档的形式体现 的。

这些文档都以后缀名为 .ipynbJSON 格式文件 进行保存。此外,Jupyter Notebook 中的文档换支持导出为:HTMLMDPDFLaTeXpython 等多种格式。


Features introduction

主要特点说明:

  • 编程时具有语法高亮、缩进、Tab 补全的功能;
  • 可直接通过浏览器运行代码,同时在代码块下方展示运行结果;
  • 以富媒体格式展示计算结果,包括:HTML,LaTeX,PNG,SVG 等;
  • 对代码编写说明文档或语句时,支持 Markdown 语法;
  • 支持使用 LaTeX 编写数学性说明。

jupyter Setup

预安装准备 >>>>

安装 Jupyter Notebook 的前提是:你需要安装了 Python(3.3 版本及以上,或 2.7 版本)。

准备好 Python 环境之后,就可以开始 Jupyter Notebook 的安装了,这里我们提供两种不同的安装方式:

  1. 使用 Anaconda 方式安装;
  2. 使用 Pip 方式 安装;

Anaconda For Jupyter Setup

对于初学者,建议你通过安装 Anaconda 来解决 Jupyter Notebook 的安装问题,Anaconda 中已自动为你安装了 Jupyter Notebook,并且还为你提供了其它丰富的 Python 学习支持。

关于 Anaconda 的安装配置和学习可参见系列博文:一文了解数据科学神器 Anaconda

Anaconda 安装完成后,可以在终端中使用查看 Jupyter Notebook 版本信息命令测试一下,验证 Jupyter Notebook 是否安装成功:

1
2
$ >jupyter notebook --version
6.4.5

Pip For Jupyter Setup

这里尝试用 Pip 命令来单独安装 Jupyter Notebook,请看以下步骤:

1 –> 升级 Pip 工具至最新版本

1
2
# Python 3.x(Python 2.x)
$ pip3(pip) install --upgrade pip

提示:老版本的 Pip 在安装 Jupyter Notebook 过程中可能会面临依赖项无法同步安装的问题。因此,强烈建议先把 Pip 升级至最新版本。

2 –> Setup Jupyter

1
2
# Python 3.x(Python 2.x)
$ pip3(pip) install jupyter

3 –> Setup Test

1
2
3
# 使用查看 Jupyter Notebook 版本信息命令测试一下,验证安装是否成功
$ >jupyter notebook --version
6.4.5

安装完成之后,你就可以尝试启动 Jupyter Notebook,一睹芳容了~~~

How To Run?

如果你有任何 Jupyter Notebook 命令的疑问,可以考虑查看官方帮助文档,命令如下:

1
2
3
$ jupyter notebook --help
# 或者
$ jupyter notebook -h

默认端口启动

在终端中输入以下命令:

1
$ jupyter notebook

执行命令之后,在终端中将会输出显示一系列启动 Jupyter notebook 本地服务器的信息:

1
2
3
4
5
$[I 20:31:48.891 NotebookApp] Serving notebooks from local directory: E:/jupyterWorkS
[I 20:31:48.892 NotebookApp] Jupyter Notebook 6.4.5 is running at:
[I 20:31:48.892 NotebookApp] http://localhost:8888/?token=4179d7ebd004065c9bb751e25539e9c605ead31e1c1cc5b7
[I 20:31:48.892 NotebookApp] or http://127.0.0.1:8888/?token=4179d7ebd004065c9bb751e25539e9c605ead31e1c1cc5b7
[I 20:31:48.892 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

注意:之后想要在 Jupyter Notebook 页面正常工作,请保持终端不要关闭,因为一旦关闭终端,就会立刻断开与本地服务器的链接,你将无法继续在 Jupyter Notebook 中工作了(404)。

同时浏览器将会自动启动 Jupyter Notebook 页面,浏览器地址栏中默认地将会显示:http://localhost:8888:

如果你同时启动了多个 Jupyter Notebook,由于默认端口 “8888” 被占用,因此地址栏中的数字将从 “8888” 起,每多启动一个 Jupyter Notebook 数字就加 1,如 “8889”、“8890”……


指定端口启动

如果你想使用自定义的端口号来启动 Jupyter Notebook,可以在终端中输入以下命令:

1
$ jupyter notebook --port <port_number>

命令说明 –> “port_number” 是自定义端口号,直接以数字的形式写在命令当中。例如:jupyter notebook --port 9999,即在端口号为 9999 的服务器启动 Jupyter Notebook。


启动 Jupyter 但不打开浏览器

默认情况下不出异常的话,启动 Jupyter Notebook 服务器就会自动打开浏览器页面。

如果你只是想启动 Jupyter Notebook 的服务器但不打算立刻进入到主页面,那么就无需立刻启动浏览器。在终端中输入:

1
$ jupyter notebook --no-browser

此时,将会在终端显示启动的服务器信息,并在服务器启动之后,显示出打开浏览器页面的链接。当你需要启动浏览器页面时,只需要复制链接,并粘贴在浏览器的地址栏中,轻按回车就转到了你的 Jupyter Notebook 页面。

异常情况 >>>

默认情况下,使用 jupyter notebook 命令运行时观察到已启动 Jupyter Notebook 服务器,但无法自动打开浏览器,手动使用链接可以?!!可使用以下方式解决:

1)查找配置文件

首先查找 Jupyter Notebook 配置文件,我们在命令行终端输入:

1
$ jupyter notebook --generate-config

该命令执行后,如果发现没有配置文件则会新建,如有则会询问是否重载。

Jupyter Notebook 默认配置文件存放路径:~/.jupyter/jupyter_notebook_config.py,即当前用户目录下的 .jupyter 目录下的文件:jupyter_notebook_config.py

2)定位设置项语句

找到该文件后,打开,定位到如下语句:

1
#c.NotebookApp.browser = ''

3)配置默认打开浏览器

在上述语句下方添加内容:

1
2
3
4
import webbrowser
webbrowser.register("Microsoft Edge",None,webbrowser.GenericBrowser
(u"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"))
c.NotebookApp.browser = 'Microsoft Edge'

如果想将默认浏览器调成 Chrome,可以将上述 Microsoft Edge 换成 Chrome,并且找到 Chrome 的运行文件,替换即可。

OK,重新尝试启动 jupyter notebook,观察一下~~~


关闭 Jupyter Notebook

如果你想退出 Jupyter Notebook 程序,仅仅通过关闭网页是无法退出的,因为当你打开 Jupyter Notebook 时,其实是启动了它的本地服务器。

你可以尝试关闭页面,并打开新的浏览器页面,把之前的地址输进地址栏,然后跳转页面,你会发现再次进入了刚才 “关闭” 的 Jupyter Notebook 页面。

要彻底退出 Jupyter Notebook,需要关闭它的服务器。只需要在它启动的终端上按:Ctrl + c,关闭信息如下:

1
2
3
[I 00:18:06.765 NotebookApp] Interrupted...
[I 00:18:06.768 NotebookApp] Shutting down 0 kernels
[I 00:18:06.772 NotebookApp] Shutting down 0 terminals

Jupyter Notebook Page

这一小节来从 Jupyter Notebook 网页页面来了解 Jupyter Notebook 的使用。

File Page

Files 页面是用于管理和创建文件相关的类目:

当前,我们的界面当中应该还没有 “Conda” 和 “Nbextensions” 类目,这需要后续单独安装配置,不要着急~~~

当前页面就不详细说明了,结合上面的图示说明,上手尝试一下,很快就了解使用了。


Running Page

Running 页面展示的是当前正在运行当中的终端(Terminal)和 “ipynb” 格式笔记本(Notebook)。

若想要关闭已经打开的终端 和 “ipynb” 格式的笔记本,仅仅关闭其页面是无法彻底退出程序的,需要在 Running 页面点击其对应的 【Shutdown】。


Clusters Page

Clusters tab is now provided by IPython parallel. See ‘IPython parallel’ for installation details.

Clusters 类目现在已由 IPython parallel 对接,且由于现阶段使用频率较低,因此在此不做详细说明,想要了解更多可以访问 IPython parallel


Nbextensions Page

默认情况下,Jupyter Notebook Page 中是不含 Nbextensions 页面的。你可以通过如下方法进行安装:

1
2
3
4
5
# Step 1 >>> 安装 Nbextensions 插件库:
$ pip install jupyter_contrib_nbextensions

# Step 2 >>> 安装关联的 JavaScript 和 CSS 文件
$ jupyter contrib nbextension install --user

完成上述操作后,就可以看到如下 Nbextensions 选项卡了:

Nbextensions页面提供了多个 Jupyter Notebook 的插件,使其功能更加强大。该页面中主要使用的插件有:nb_conda、nb_present、Table of Contents(2)。

例如,Table of Contents(2) 插件可为 Markdown 文档提供目录导航,便于我们编写文档。nb_conda 插件可方便 Jupyter Notebook 中 Python 多版本环境的自由切换。

需要注意的是:初始情况下 Nbextensions 的功能是没有开启的,需要 去掉 disable 的勾选!!!


Conda Page

默认情况下,Jupyter Notebook Page 中是不含 Conda 页面的,安装 nb_conda 插件后出现。可用于管理 Anaconda 中所有的虚拟环境以及依赖包。

↓↓↓↓↓↓↓↓ 安装过程如下 ↓↓↓↓↓↓↓↓

[1] –> 关联 Jupyter Notebook 和已创建的 conda 虚拟环境

执行如下命令:

1
$ conda install nb_conda

执行上述命令能够将你 conda 创建的虚拟环境与 Jupyter Notebook 相关联,便于你在 Jupyter Notebook 的使用中,在不同的环境下创建笔记本进行工作。

[2] –> Using nb_conda

你可以在 Conda 类目下对 conda 环境和包进行一系列操作:

[3] –> 卸载 nb_conda

1
$ conda remove nb_conda

Common Operations

Jupyter 笔记本(Notebook)中常用操作:

Run Python

想在 Jupyter Notebook 中加载本地的 Python 文件并执行文件代码,单元格(Cell)中执行以下命令:

1
%load Python文件的绝对路径

首次执行时,会将本地的 Python 文件内容加载到单元格(Cell)内。此时,Jupyter Notebook 会自动将 “%load” 命令注释掉(即在前边加井号 “#”),以便在执行已加载的文件代码时不重复执行该命令;之后再次执行时,则是执行已加载文件的代码。

如果,不想在 Jupyter Notebook 的单元格中加载本地 Python 文件,想要直接运行,单元格(Cell)中执行以下命令:

1
%run Python文件的绝对路径

或者:

1
2
# 调用 Python3(Python2) 解释器执行(Cell 可直接执行 Shell 命令)
!python3(!python) Python文件的绝对路径

Get Current PATH

想要在 Jupyter Notebook 中获取当前所在位置的绝对路径:

1
%pwd

或者:

1
2
# Cell 可直接执行 Shell 命令
!pwd

Run Shell CMD

在 Jupyter Notebook 中的笔记本单元格中,用英文感叹号 ! + Shell命令 即可执行 shell 命令:

1
!shell命令

例如:

1
!ls

Show Line Numbers

默认情况下,Notebook Cell 中是不显示行号的,你可以通过【View】 >>>> 【Toggle/Show Line Numbers】开启行号。


Notebook Mode

Jupyter Notebook笔记本有两种工作模式:

  1. 命令模式
  2. 编辑模式

命令模式

选定某一单元格,按 【Esc】 键进入命令模式,此时单元格边框为灰色,且左侧边框线为蓝色粗线条。

命令模式下,可以通过键盘不同键的组合运行笔记本的操作。

例如,常用的切换单元格文本类型的:Y(Code)、M(Markdown)、R(Raw)。

此时,使用快捷键 dd 可以快速删除当前单元格。

编辑模式

选定某一单元格,按 【enter】 键进入编辑模式,此时单元格边框和左侧边框线均为绿色。

编辑模式使用户可以在单元格内编辑代码或文档。


Jupyter Lab

怎么又跑出来个 Jupyter Lab?!!

Jupyter Lab 是包含 Jupyter Notebook 在内的下一代用户界面,它具有模块化的结构,您可以在同一窗口中打开多个笔记本或文件(例如:HTML、Text、Markdowns等)作为选项卡,提供了更多类似于 IDE 的体验。

你可以将其视为一个究极进化版本的 Jupyter Notebook。

你可以设置一个 .ipynb 文件(TheDifference.ipynb),一个 文件浏览器 和一个 TheDifference.ipynb 文件所对应的 Python 控制台,这可以帮助你高效的使用 Jupyter Lab,如下:

现在,你可以使用以下工具:

  1. 查看文件,正在运行的内核,命令,笔记本工具,打开选项卡或扩展管理器;
  2. 使用快捷键来运行单元格, Ctrl + Enter;
  3. 使用菜单选项或键盘快捷键运行单个表达式,行或突出显示的文本;
  4. 使用以下命令直接在控制台中运行代码 Shift + Enter;
  5. 在控制台中快速轻松地检查变量,数据框或绘图,而不会使笔记本的输出混乱;
  6. 使用快捷键 Ctrl + B 可以实现快速开启和关闭文件浏览器。

你可以通过右键 .ipynb 文件(TheDifference.ipynb),点击 【New Console For Notebook】 为 TheDifference.ipynb 创建一个同时运行于当前内核的 Python 控制台,用于监控 TheDifference.ipynb 运行时变量以及数据流的变化。

此时,你可以通过复制 TheDifference.ipynb 文件中的单行内容在 Python 控制台中进行单独执行。


同内核中运行单行代码更简介的方法 >>>>

较新版本的 Jupyter Lab,你可以将标记放在一行上,或突出显示一个选择(标记选择一个区域),然后使用菜单选项:【Run】 >>> 【Run Selected Text or Current Line in Console】,即可打开 .ipynb 文件所对应的 Python 控制台。

为了方便使用,还分配快捷键使运行变得更加轻松:

【Settings】 –> 【Advanced Settings editor】 –> 【Keyboard shortcuts tab】 –> 在 System Defaults 区域 【ctrl + F】 进行搜索关键字:run-in-console,找到如下部分:

1
2
3
4
5
6
7
{
"command": "notebook:run-in-console",
"keys": [
""
],
"selector": ".jp-Notebook.jp-mod-editMode"
}

将其粘贴在 User Preferences 区域,然后在 keys 下键入所需的快捷方式(F9),如下所示:

1
2
3
4
5
6
7
8
9
10
11
{
"shortcuts": [
{
"command": "notebook:run-in-console",
"keys": [
"F9"
],
"selector": ".jp-Notebook.jp-mod-editMode"
}
]
}

完美~~~~


Jupyter Lab(Notebook)Home

我们知道,JupyterLab(Jupyter Notebook) 这一数据分析神器,它能帮助我们有效地组织输入输出,将我们探索数据的过程记录下来,后续稍加整理便可以生成一篇数据分析报告。

但是在使用 Jupyter (Windows、Linux)过程中,你会发现,通过 Anaconda Navigator launch 后其默认目录是用户目录,而通过命令行终端启动的 Jupyter 默认目录是当前执行启动 Jupyter 命令所在目录。

通常对于我个人来说,我一般习惯将项目存放于固定目录(盘符),我希望启动 Jupyter 后可以固定到我的项目所在目录,而不是人为先去 Location 项目目录。于是产生一个小需求:如何自定义 Jupyter 启动之后的默认目录到一个固定目录?


下面我们提供两种方法来实现:

注意:只要以下 JupyterLab 或者 Jupyter Notebook 配置一个,另外一个不用配置也可生效。

JupyterLab

[1] –> 确认 Anaconda 安装路径,我的是安装 Anaconda 的用户目录:~

[2] –> 确定配置文件:jupyter_notebook_config.json 是否存在?

查看 ~/Anaconda/etc/jupyter 路径下是否存在文件:jupyter_notebook_config.json ???

如果你想配置的 JupyterLab 位于某个 Conda 虚拟环境中,你可以在 ~/Anaconda/envs/myenv-xxx/etc/jupyter 下查找,其中 myenv-xxx 为虚拟环境名称。

默认 jupyter_notebook_config.json 文件内容格式:

1
2
3
4
5
6
7
{
"NotebookApp": {
"nbserver_extensions": {
"jupyterlab": true
}
}
}

如果不存在,则根据上述内容手动创建。

[3] –> 添加配置项 notebook_dir

在其中添加:notebook_dir –> “自定义目录” 项,用于指定自定义 Home 目录。例如我们自定义 Home 目录为:"E:/"

修改 jupyter_notebook_config.json 文件后变为:

1
2
3
4
5
6
7
8
{
"NotebookApp": {
"nbserver_extensions": {
"jupyterlab": true
},
"notebook_dir":"E:/"
}
}

[4] –> 重新启动 JupyterLab 后,你会发现更改已经成功~~~


Jupyter Notebook

[1] –> 查找配置文件

首先查找 Jupyter Notebook 配置文件,我们在命令行终端输入:

1
$ jupyter notebook --generate-config

该命令执行后,如果没有配置文件则新建,如有则会询问是否重载。

Jupyter Notebook 默认配置文件存放路径:~/.jupyter/jupyter_notebook_config.py,即当前用户目录下的 .jupyter 目录下的文件:jupyter_notebook_config.py

[2] –> 定位设置项语句

找到该文件后,打开,定位到如下语句:

" c.NotebookApp.notebook_dir = '' ",该配置项用于自定义 Jupyter Notebook Home 目录。

[3] –> 配置 Jupyter Notebook Home 目录

我们将其修改为:c.NotebookApp.notebook_dir = 'E:/',并将其注释消掉。

[4] –> 重新启动 Jupyter Notebook 后,你会发现更改已经成功~~~


应该还存在一个问题,你可以尝试下:

如果你直接通过 Jupyter Notebook 的快捷方式进入,默认目录还是原来那个。如果需要修改,还需要进行如下步骤:

找到快捷方式,右键打开属性,将“目标”最后面的 "%USERPROFILE%" 删除就可以了。


Jupyter Lab(Notebook)Remote Server

考虑以下场景:

  • 通常我们更加专注于本地机器开发,实际运行环境是远程服务器。我们会苦恼于本地机器 [Local_Server] 和远程服务器 [Remote_Server] 上都要配置相同的机器学习环境(Anaconda),这既消耗时间又占用计算机资源;
  • 想要在某一台本地机器上访问远程服务器上的 Jupyter Notebook 文档。一方面我们需要在本地机器重新搭建 Jupyter Notebook 环境;另一方面我们需要将目标 Jupyter Notebook 文档 Download 到本地机器?

当你也面临这些场景时,你就有必要考虑搭建一个可以远程访问的 Jupyter Notebook 或者 JupyterLab 服务器了。

所以今天花了点时间研究了下 Jupyter notebook(JupyterLab) 远程访问服务器:在 Remote_Server 安装 Jupyter ,然后在本地 Local_Server 浏览器访问 Remote_Server 的 Jupyter,使用其内部搭建好的机器学习环境,所以记录一下。


Jupyter && Anaconda

前面提到过,JupyterLab && Jupyter Notebook 可以作为单独的数据分析工具使用,可以单独(Pip 方式)安装使用。为什么强调单独安装使用呢?我们也知道,Anaconda 中已经将其作为内部的插件,可以极其方便的使用 Anaconda 的虚拟隔离环境。

故,一般我们推荐在 Anaconda 环境下使用 Jupyter notebook(JupyterLab),并且 Anaconda 安装包中自带了 Jupyter 。安装 Anaconda 时会默认将 Jupyter notebook(JupyterLab) 安装到 Anacondabase 环境(免安装)。

当然,你也可以在 Anaconda 其它虚拟环境中再次安装,这是显而易见的(环境隔离)。


Go Start

这里,我们先给出在服务器安装配置 Jupyter 服务以提供远程访问的通用步骤:

通常,首先需要根据我们已创建的虚拟开发环境,选择 【Jupyter】 服务安装的虚拟环境(例如: DeepLearning(python2.7) 或者 DeepLearning(python3.5) ?),然后激活相应虚拟环境,在其中安装 Jupyter ,然后完成后续的远程访问配置后,我们就可以在相应的虚拟环境中启动 Jupyter 进行远程使用了。

注意:JupyterLab 与 Jupyter Notebook 师出同源,配置过程完全一样(除了安装)。下面我将会以 Jupyter notebook 安装以及配置为主(JupyterLab 与之有差异的地方会另外标注出)介绍如何搭建远程访问。

先给出 Jupyter 服务的两种访问方式:

  1. 本地访问:部署 Jupyter 服务的服务器本地浏览器中访问;
  2. 远程访问:远程浏览器中访问部署在服务器上的 Jupyter 服务(常用访问模式)。

下面我们来看如何安装和部署 Server Jupyter 服务的本地访问和远程访问:


本地访问

这里的本地访问是指在远程服务器(Remote_Server)本地实现访问,首先需要登录远程服务器,然后:

[1] –> 明确虚拟环境

首先我们需要明确我们是使用 Anaconda base 环境中自带的 Jupyter Notebook(JupyterLab)???

还是 ↓↓↓↓↓↓↓

在其它的虚拟环境(conda env)中安装新的 Jupyter Notebook(JupyterLab)???

–> Anaconda base envs(推荐)

如果我们使用 Anaconda base 环境中自带的 Jupyter notebook(JupyterLab)可以直接跳过 [2] 安装步骤 开始[3] 本地使用

注意,如果安装的是 Anaconda 2 的话,base 环境是不支持 JupyterLab 的(无法安装)。但此时可以在其创建的 conda envs python3.x 中安装 JupyterLab 。

–> Other conda envs (Create)

如果在其它新创建的虚拟环境中安装配置的话,我们需要先切换到相应环境中:

1
source activate envsname

[2] –> 安装步骤

检查 Remote_Server 当前环境是否有安装 jupyter notebook(JupyterLab)服务,如果没有则安装。

1
2
3
4
5
6
7
8
9
10
11
### --> jupyter Notebook 检测与安装:

# 终端输入 jupyter notebook,如果报错就是没有安装,那么就要用下面命令安装。(安装完成后可重新检查:$ jupyter notebook)
$ pip install jupyter notebook

### --> jupyter jupyterlab 检测与安装:

# 检测:
$ jupyter lab
# 安装(注意,Python2.7 中不支持 jupyterlab)
$ pip install jupyter jupyterlab

[3] –> 本地使用

1
2
3
4
5
6
7
8
9
10
# 1. Terminal 下先使用下面的命令开启 notebook service:(之后便可以在浏览器中使用,默认下只能在远程服务器本地进行访问)
$ jupyter notebook
# 开启 jupyterlab service:
$ jupyter lab

# 2. 在 [`Remote_Server`] 浏览其中输入 url:(就可以实现本地访问了)
$ http://localhost:8888

# 访问:jupyterLab
$ http://localhost:8888/lab

补充如何查看当前已启动的 Jupyter 服务:

1
2
3
4
5
$ jupyter notebook list

# 或:

$ jupyter lab list

远程访问

Jupyter notebook(JupyterLab)默认只能在本地访问,如果想把它安装在服务器上,然后在本地远程访问 Jupyter 服务器,则需要进行如下配置:

[1] –> 相关配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 1. 生成配置文件
$ jupyter notebook --generate-config
# Log:Write default config to : ~/.jupyter/jupyter_notebook_config.py

# 2. 打开ipython,创建一个密文的密码:
$ ipython
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password:
Verify password:
Out[2]: 'sha1:ce23d945972f:34769685a7ccd3d08c84a1......'

# 3. 复制密文,并 `exit` ipython

# 4. 修改默认配置文件
$ vim ~/.jupyter/jupyter_notebook_config.py
# 添加如下内容:
c.NotebookApp.ip='*'
c.NotebookApp.password = u'sha:ce...刚才复制的那个密文'
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888 #随便指定一个端口
c.IPKernelApp.pylab = 'inline'

# 5. 至此,配置完成。接下来,看如何使用

[2] –> 远程访问

1
2
3
4
5
6
7
8
9
# 1. 在 [`Remote_Server`] 上启动 Jupyter notebook(root 用户下安装需要加参数: --allow-root),从 Log 可以获取到开放的端口号,该远程连接切勿关闭!!!
$ jupyter notebook
# 开启 jupyter jupyterlab service:
$ jupyter lab

# 2. 远程访问:在本地[`Local_Server`]中浏览器直接访问[`Remote_Server`]
$ https://address_of_remote:8888
# 远程访问:jupyter jupyterlab
$ https://address_of_remote:8888/lab

补充启动方式,可以指定启动时的端口以及限制远程登录客户端的 IP:

1
2
3
4
5
# --ip:Limit Remote_Server_ip , --port:开放端口
$ jupyter notebook --ip 0.0.0.0 --port 9999

# 远程访问:
$ https://address_of_remote:9999

配置问题

配置远程访问后,在启动时报错:KeyError:'allow_remote_access'。解决方法如下:

1
2
3
4
$ vim ~/.jupyter/jupyter_notebook_config.py

# 补充添加如下语句:
c.NotebookApp.allow_remote_access = True

JupyterLab Debugger

细心的同学肯定已经发现,Jupyter Lab 界面右侧导航栏有一个 Bug 标识,点击之后会向左侧弹出一个类似于 IDE 的 Debug 工作区,如下:

实际上,它就是 JupyterLab 的可视化调试功能支持(JupyterLab Debugger):

  • 变量浏览器(VARIABLES) && 断点列表(BREAKPOINTS) && 源代码预览(SOURCE)
  • 调用堆栈(CALLSTACK),提供下一行(Next)、进入(Step in)、退出(Step out)等功能

JupyterLab Debugger 的发布,弥补了 JupyterLab 无法通过可视化的方式进行 Debug 的限制,降低了大型代码库对 IDE Debug 的依赖。


Xeus-Python

JupyterLab Debugger 的实现,构建在 xeus-python 内核的基础上。

类似于 ipykernel,Xeus-Python 是 Python 编程语言在 Jupyter Kernel 的轻量级实现。它也 支持类似于 Ipykernel 的 Magic Command(魔法指令)以及 Matplotlib 图形。

我们知道,之前写的 Notebook 都是基于 IPython 内核的,而 Xeus-Python Kernel 为 Jupyter 提供了另一种选择,甚至有人说 “Jupyter:正准备抛弃IPython内核 !!!

有消息宣传:xeus-python 正在接近与 ipykernel 进行功能奇偶校验(不知道真假~~~)。


How To Use?

Jupyter 官方宣传,未来 Debugger 会作为 Jupyter 的默认模式。

目前,要想使用 JupyterLab Debugger,需要单独安装支持 Jupyter 调试的 Xeus-Python Kernel:

↓↓↓↓↓↓ JupyterLab 3.x ↓↓↓↓↓↓

1
2
3
4
5
6
# 谨慎(目前 Xeus-Python Kernel 安装问题较多,防止破坏 Base Env) >>> 当前环境安装: xeus-python
pip install xeus-python

# 推荐 >>> 新 Conda 环境安装: xeus-python
conda create -n jupyterlab-debugger -c conda-forge jupyterlab=3 xeus-python
conda activate jupyterlab-debugger

↓↓↓↓↓↓ JupyterLab 2.0+ ↓↓↓↓↓↓

目前,由于 Anaconda 官方提供的都是基于 Python3.X 的安装包,故 Base JupyterLab 2.X 已经很少见了。

1
2
3
4
$ conda create -n jupyterlab-debugger -c conda-forge xeus-python=0.8.6 notebook=6 jupyterlab=2 ptvsd nodejs
$ conda activate jupyterlab-debugger

$ jupyter labextension install @jupyterlab/debugger # 安装前端插件

| =============================================== Split Line ================================================= |

👇👇👇 使用说明 👇👇👇

安装完成之后,启动 Jupyter Lab >>>

1
$ jupyter lab

安装 Xeus-Python Kernel 后,启动 JupyterLab 时可能产生 No module named 'jupyter_nbextensions_configurator' 错误,请参见章节【Relevant Issues】。

然后就可以在打开的 Notebook 中切换内核至 Python3.XX(XPython) <<< Xeus-Python Kernel,然后就通过环境名称前的 🐞(Debug Switch) 开启或关闭调试模式了:

Python 脚本调试实操:


Conda Envs(Kernels) Switch

在 Jupyter 中进行深度学习实验时,肯定会涉及到不同的环境配置,看如下场景:

  • Python3 和 Python2 的不同虚拟环境。
  • 不同版本的 tensorflow 的虚拟环境。

这就要求我们 需要随时切换虚拟环境。

conda 环境中运行 Jupyter 服务器和内核

方法推荐指数:⭐️

从上面 Jupyter notebook(JupyterLab)安装配置中知道,我们可以在不同的虚拟环境中分别安装 Jupyter notebook(JupyterLab),然后通过在不同的 conda 环境中启动 Jupyter notebook(JupyterLab)实现切换不同的 Jupyter 环境。

这种方法就是:为每一个 Conda 虚拟环境都按照 Jupyter。这是 最简单的方法,绝对没问题。

–> 引发一个问题:这不是有点(da)病么?既浪费系统资源又浪费时间!

那么,有么有一种办法我只在一个虚拟环境下启动 Jupyter notebook(JupyterLab)却可以在 Jupyter 中切换不同的虚拟运行环境???

答案肯定是有的。


内核插件 ipykernel

虚拟环境的内核是运行代码的封装 Python 的组件。

方法推荐指数:⭐️⭐⭐

Install ipykernel

需要用到一个 ipykernel 插件,首先,我们选择在 Anaconda base 环境安装:

1
$ conda install ipykernel

此时,我们可以在 Anaconda base 中启动 Jupyter notebook(JupyterLab),发现启动后只有一个原生的 base 环境。

添加虚拟环境到 Jupyter

事实上,这一部分就是将各种创建好的 conda 虚拟环境(也称为不同的 Kernel)添加 Jupyter Kernel(Base)中。

[1] –> 激活虚拟环境

1
$ source activate myenv

[2] –> 将环境写入 notebook 的 kernel 中

1
python -m ipykernel install --user --name myenv --display-name "Python (myenv)"

推荐将 --name(将用于 Jupyter 内部,会覆盖具有相同名称的 Kernel)和 --display-name(指定 Jupyter Notebook/Lab 中显示的名称)设置为当前虚拟环境的名称。其中 --user 非服务器环境可缺省。

如果显示 “No module named ipykernel”,说明当前虚拟环境没有安装 ipykernel 插件:

1
$ conda install ipykernel

其它环境添加也一样:

1
2
source activate other-env
python -m ipykernel install --user --name other-env --display-name "Python (other-env)"

[3] –> 测试

重新在 Anaconda base 环境中启动 Jupyter notebook(JupyterLab),可以看到 Jupyter 中已经可以切换其它虚拟环境了。

注意:切换 Jupyter notebook(JupyterLab)虚拟环境其实相当于切换其 Kernel(内核)。

|>>>> 引发一个问题

方法挺不错的,但有个缺点是:你新建一个环境,就要重复一次上述操作。

Kernel 移除

有时,由于添加了错误的内核或者不想要该内核,我们需要移除 Jupyter notebook(JupyterLab)虚拟环境内核(Kernel)。

首先,我们来看如何查看当前系统中安装的内核以及其位置:

1
$ jupyter kernelspec list

–> 如何移除?

1
$ jupyter kernelspec remove myenv

myenv 表示 Kernel 所对应的虚拟环境的名称。

移除后,重新启动 Jupyter notebook(JupyterLab)即可发现内核已经被移除。


nb_conda_kernels 插件添加所有环境内核

方法推荐指数: ⭐️⭐️⭐️⭐️⭐️

一键添加所有 conda 环境,妙不可言(Anaconda Base):

1
2
3
4
5
6
7
# 为所有 conda 虚拟环境添加 ipykernel 内核
$ source activate env_conda
$ conda install ipykernel
$ source deactivate

$ source activate base
$ conda install nb_conda_kernels

|>>>> 可能出现的问题

安装 nb_conda_kernels 之后,系统原有 Conda 环境已经可以切换。但新建虚拟环境后,Jupyter Notebook(Lab)中没有相应内核。

此时,你可以通过为新创建的虚拟环境安装 ipykernel 插件来解决,内核插件安装后即可查看到相应虚拟环境。

需要注意的是,如果你的 Anaconda 环境中同时 ipykernel && nb_conda_kernels,这会导致 Jupyter Page 切换内核界面出现同一虚拟环境的两个内核,请不要困惑!!!


Relevant Issues

最后给出 Jupyter 使用过程中遇到的问题以及其解决方案,方便之后进行排查。

EnvironmentLocationNotFound

在启动 Jupyter Notebook 时,可能会出现环境错误 >>>

EnvironmentLocationNotFound: Not a conda environment: /home/xxx/.conda/envs/anaconda3

官方说明 Conda 版本 4.4 以后会出现上述问题,原文如下:

This is a confirmed bug in nb_conda for conda version >=4.4:
The reason is the change of conda info –json output. Fresh installation of version 4.3.33 gives envs=[], version >=4.4 gives envs=[root_env_dir] (always non empty).

这是由于 >>> 之前版本 Conda 是 envs=[],而 4.4 版本之后 envs=[root_env_dir],然而这个目录通常并不是空的,官方可能在后续的更新中解决这个问题。

Solution >>>

  • 查找目录 ..\Anaconda3\pkgs\nb_conda-2.2.0-py38_0\Lib\site-packages\nb_conda(py38.0 根据 Anaconda 版本可能会有不同)
  • 修改 envmanager.py 文件

查找这一句:

1
2
3
4
return {
"environments": [root_env] + [get_info(env)
for env in info['envs']]
}

将:

1
for env in info['envs']]

替换为:

1
for env in info['envs'] if env != info['root_prefix']]

重启 jupyter Notebook Local-Server,会发现错误提示已经消失~~~


NbExtConfiguratorNotFound

在启动 Jupyter Lab 时,可能会出现如下错误 >>>

1
The module 'jupyter_nbextensions_configurator' could not be found (No module named 'jupyter_nbextensions_configurator'). Are you sure the extension is installed?

↓↓↓↓↓↓ 问题描述 ↓↓↓↓↓↓

查看报错说明,是 Jupyter 加载的 jupyter_contrib_nbextensions 插件失败!!!但安装插件后仍然报错,继续分析原因:

  1. 此插件需要与某些插件组合使用;
  2. 此插件未配置环境,导致不能正确加载。

以后出现此类问题,上述的第二个原因是更容易出现的!!!

↓↓↓↓↓↓ 解决方案 ↓↓↓↓↓↓

1
2
3
4
5
6
7
8
9
10
11
# Step 1 >>> 安装 Nbextensions 插件库:
$ pip install jupyter_contrib_nbextensions

# Step 2 >>> 安装关联的 JavaScript 和 CSS 文件
$ jupyter contrib nbextension install --user

# Step 3 >>> 安装 Jupyter Nbextensions Configurator
$ pip install jupyter_nbextensions_configurator

# Step 4 >>> 启用 Jupyter Nbextensions Configurator
$ jupyter nbextensions_configurator enable --user

重新启动 Jupyter Lab 即可~~~


Author

Waldeinsamkeit

Posted on

2018-01-03

Updated on

2024-02-21

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.

Comments

You forgot to set the shortname for Disqus. Please set it in _config.yml.