Jupyter Notebook 是一个开源的、基于网页的应用,它可以创建一个文档,在这个文档里,我们不但可以使用 Markdown 语法来输入文本,插入图片,还可以运行多种编程语言代码,并直接在文档里查看代码运行结果。就像这样:

因此,Jupyter Notebook 可以让我们随时输出并查看代码的运行结果,并辅之以文字和图片说明,最终实现将代码、结果、图片、文字集中在一个文档呈现的效果,它非常适合用于撰写和分享编程项目文档、编程学习笔记和教程等等。举个例子,机器学习框架 tensorflow 官网的案例、和鲸社区、等均采用了 Jupyter Notebook 或基于 Jupyter Notebook 进行二次开发来作为其在线展示或学习的平台。

Jupyter Notebook 虽然支持多种编程语言的运行,但它的安装和使用却需要依赖 Python 环境。Jupyter 官网的入门教程推荐新手使用 Anaconda 来使用 Jupyter Notebook。Anaconda 是一个预先安装了 Python、Jupyter Notebook,面向数据分析的开发平台。目前网上一些介绍 Jupyter Notebook 使用和配置的帖子也是在 Anaconda 上进行操作的。但我现在已经不喜欢过分依赖这些集合了众多包和模块、一键操作的IDE和平台了。自己一砖一瓦搭建的开发环境,会更加轻便和适合自己。

其实,在终端中使用 Python 包管理工具和一些简单的指令,就可以从容配置和使用 Jupyter Notebook了。来看看怎么实现吧。

本文会涉及到 Python 虚拟环境的使用,可戳我此前的 帖子

安装和使用 Jupyter Notebook

我们在终端中使用 pip 来安装 Jupyter Notebook,这样 Jupyter Notebook 将会被安装到本机原生的Python 环境中:

python -m pip install notebook

我们也可以在某一个虚拟环境中安装 Jupyter Notebook。考虑到在虚拟环境中安装和使用 Jupyter Notebook 的操作可以轻松推广到在原生环境中的操作,反之则不易,因此本文会介绍在虚拟环境中 Jupyter Notebook 的操作,这样可以兼顾想在虚拟环境和原生环境中使用 Jupyter Notebook的读者。

我们使用虚拟环境 A 中的 pip 来安装 Jupyter Notebook:

D:\...\venvA\Scripts\python -m pip install notebook

安装完成后,在终端进入虚拟环境 A ,执行以下指令即可打开 Jupyter Notebook :

D:\...\venvA\Scripts\activate.ps1
jupyter notebook

此时,终端会打印 Jupyter Notebook 的相关信息:

同时浏览器启动,打开 Jupyter Notebook 的主页 Home page。正如所见,Jupyter Notebook 便是这么一个基于网页的应用程序,不过它读写的是本机的文件。细看 Home Page ,这其实就是本机 C:\Users\<user name> 目录。我们新建的笔记也会保存在这个目录下。

我们可以根据自己的使用习惯将 Jupyter Notebook 的 Home Page 修改为自定义的目录,这样更有条理,也便于我们按照自己的习惯来管理。如何修改呢?

我们回到终端,在虚拟环境中执行指令,生成一个 Jupyter Notebook 的默认配置文件:

jupyter notebook --generate-config

此时终端会提示:

Writing default config to: C:\Users\<user name>\.jupyter\jupyter_notebook_config.py

现在来到C:\Users\<user name>\.jupyter\目录,就可以看到刚生成的 jupyter_notebook_config.py 文件,这是 Jupyter Notebook 的配置文件,可以用文本编辑软件打开,通过修改其中的内容,就可以实现对 Jupyter Notebook 设置的修改。

这里我用 VS code 打开,然后查找关键词c.NotebookApp.notebook_dir来到此语句位置。这个语句便是定义 Home Page 所在目录的。目前,语句前带有注释 # 号,因此未生效。

取消前方的注释 # 号来使此语句生效,并在 ‘ ’中输入新的目录来作为 Jupyter Notebook 的 Home page:

c.NotebookApp.notebook_dir = ‘D:\jupyterNotebook’

保存,关闭。

重新运行 Jupyter Notebook,可以看到此时 Home Page 已变成我们所设置的目录了,由于新目录中无任何文件夹或文件,故显示「笔记本列表为空」。

点击右上角「new」,在下拉菜单中选择一个 Python 开发环境,即可新建一个笔记。

在笔记里,可以使用 markdown 语法来输入文本,也可以输入 Python 代码并运行,直接查看运行结果。此笔记所用的 Python 环境即为我们新建笔记时所选择的 Python 环境。在这个例子中,笔记所调用的是 Jupyter Notebook 所在的虚拟环境。

现在,我们就拥有了一个可以运行 Python 代码的笔记本了。

Jupyter Notebook 调用其他虚拟环境

按照本公众号的开发习惯,我们会为不同 Python 项目配置了各自独立的虚拟环境,这些虚拟环境中所安装的包各有不同。那么,我们安装在虚拟环境 A 中的 Jupyter Notebook 能否调用虚拟环境 B 来执行笔记中的代码呢?答案是肯定的,但是我们需要进行一些配置工作。

我们暂时离开 Jupyter Notebook,在终端中,命令虚拟环境 B 安装 ipykernel 内核:

 D:\...\venvB\Scripts\python -m pip install ipykernel

ipykernel,顾名思义,是一个「内核」。作为初学者,我们只需要知道,它可以让我们的虚拟环境被 Jupyter Notebook 调用。

安装完成后,命令虚拟环境 B 中的 Python 执行指令:

D:\...\venvB\Scripts\python -m ipykernel install --user --name deepLearningVenv --display-name "Python(DeepLearning)

这个指令可以向 Jupyter Notebook 添加虚拟环境 B 。其中「 --name」后的名称为虚拟环境 B 的名称,而「--display -name」后的名称则是显示在 Jupyter Notebook 新建笔记时下拉列表中的名称,可助我们区分不同的虚拟环境,这里我们将「display name」定为「Python(DeepLearning)」,以提示这是一个用于开发深度学习项目的环境。

完成后,终端会提示:

Installed kernelspec deepLearningVenv in C:\Users\<user name>\AppData\Roaming\jupyter\kernels\deeplearningvenv

 

现在重新进入 Jupyter Notebook,右上角新建一个笔记,可以看到,可选的 Python 环境列表中多了我们刚刚添加的虚拟环境 B ,其显示的名称为 「Python(DeepLearning)」。

当然,也可以将某一个虚拟环境从 Jupyter Notebook 的列表中删除。

我们在终端中进入 Jupyter Notebook 所在的虚拟环境,执行以下指令就可以查看 Jupyter Notebook 所添加的虚拟环境 kernel 的列表:

jupyter kernelspec list

然后执行以下指令就可以删除指定的 kernel:

jupyter kernelspec uninstall kernelsName

重新运行 Jupyter Notebook,就可以看到所操作的虚拟环境已经从新建 Notebook 下拉列表中被移除了。

在 VS code 中使用 Jupyter Notebook

VS code ( Visual Studio Code,一个轻量 IDE) 目前已经支持 Jupyter Notebook。我们可以在 VS code 中来使用 Jupyter Notebook,这似乎比在网页上使用来得更加顺手一些。

我们在 VS code 左侧的「Extensions 拓展」中,搜索并安装 Jupyter 插件,请认准 Microsoft 出品。

安装完成后重启 VS code,选择 「 View > Command Palette...」,或者使用快捷键 ctrl+shift+P,在弹出的命令面板中输入「Jupyter」,在弹出的命令列表中选择「Juypter: Create New Jupyter Notebook」。

这样就成功在 VS code 中新建了一个 .jpynb 格式的笔记本。就如在网页中一样,我们可以插入「Code 」 片段来运行 Python 代码;也可以插入「Markdown」片段来输入文字;在右上角可以选择和切换笔记本所使用的 Python 环境。

到目前为止,我们只在 VS code 中安装了 Jupyter 拓展,就顺利地用起 Jupyter Notebook了,并没有类似「调用本机安装的 Jupyter Notebook」的操作,这似乎太简单了一些?我不禁好奇:

是不是电脑上并不需要安装 Jupyter Notebook,而仅仅在 VS code 安装 Jupyter 插件,也可以使用呢?

为此,我做了一个小实验:我在一台从未配置过 Python 相关开发环境的旧电脑上,安装了 Python 3.7.9 和 VS code,并在 VS code 中安装了 Python 拓展和 Jupyter 拓展,电脑全程没有安装 Jupyter Notebook。

我按照上述方法,在 VS code 中新建了一个 .jpynb 格式的笔记本,在其中输入了Python代码,点击运行,此时VS code弹出提示:「Python 3.7.9 64-bit 需要安装ipykernel。」

现在答案揭晓了,我们想在 VS code 中使用 Jupyter Notebook,并不一定要在电脑上安装「完整」的 Jupyter Notebook,但需要在所使用的开发环境中安装 ipykernel 内核。

点击「安装」,VS code开始下载安装 ipykernel 内核以及相关的依赖。安装完成后,再次运行笔记本中的代码,成功运行。

事实上,这与上文我们在虚拟环境中安装 ipykernel 内核来将该环境添加到 Jupyter Notebook 的操作的本质是相同的。

尾声

面向初学者的 Jupyter Notebook 安装和使用介绍到这里便结束了。文中所涉及的内容,相信已经足够帮助一名初学者顺利安装 Jupyter Notebook 并开始使用。在使用中遇到的困难以及更加进阶的玩法,请多多利用网上资源进行探索,CSDN、知乎、简书都有不少相关帖子,也可以关注微信公众号「南贝塔」,与我讨论。

「好记性不如烂笔头」,我们在编程开发中也需要多记笔记,便于日后翻阅查看。Jupyter Notebook 这样一个可以同时集合文本、图片、代码、运行结果的「笔记本」,针不戳,大家可善加利用。