从 IPython Notebook 迁移#

摘要#

The Big Split 将 IPython 的各种与语言无关的组件移到了 Jupyter 的保护伞下。今后,Jupyter 将包含服务于多种语言的与语言无关的项目。IPython 将继续专注于 Python 及其与 Jupyter 的使用。

本文档描述了从 IPython 版本 3 迁移到 Jupyter 时所做的更改,以及您可能需要如何修改代码或配置。

理解迁移过程#

文件的自动迁移#

第一次运行任何 jupyter 命令时,它将执行文件的自动迁移。自动迁移过程 复制 文件,而不是移动文件,原始文件保持不变,副本位于 Jupyter 文件位置。如果需要,您可以通过调用 jupyter migrate 重新运行迁移。您的自定义配置将自动迁移,并且应该无需进一步编辑即可与 Jupyter 一起工作。当您将来更新或修改配置时,请记住文件位置可能已更改。

我的配置文件去哪儿了?#

也称为:“为什么我的配置不再起作用了?”

Jupyter 从 IPython 分离出来意味着一些文件的位置已经改变,并且 Jupyter 项目并没有继承 IPython 的所有做法。

当你启动第一个 Jupyter 应用程序时,相关的配置文件会自动复制到新的 Jupyter 位置。原始位于 IPython 位置的配置文件对 Jupyter 的执行没有影响。如果你不小心编辑了原始的 IPython 配置文件,你可能不会在 Jupyter 中看到预期的效果。你应该检查你正在编辑的是 Jupyter 的配置文件,并且在重启 Jupyter 服务器后,你应该会看到预期的效果。

查找重要文件的位置#

本节提供IPython 3文件和迁移的Jupyter文件常见位置的快速参考。

配置文件#

配置文件根据用户的偏好自定义 Jupyter。迁移的文件应全部 自动复制 到它们新的 Jupyter 位置。以下是位置变化:

IPython 位置

Jupyter 位置

~/.ipython/profile_default/static/custom

~/.jupyter/custom

~/.ipython/profile_default/ipython_notebook_config.py

~/.jupyter/jupyter_notebook_config.py

~/.ipython/profile_default/ipython_nbconvert_config.py

~/.jupyter/jupyter_nbconvert_config.py

~/.ipython/profile_default/ipython_qtconsole_config.py

~/.jupyter/jupyter_qtconsole_config.py

~/.ipython/profile_default/ipython_console_config.py

~/.jupyter/jupyter_console_config.py

要选择一个不同于默认 ~/.jupyter 的目录位置,请设置 JUPYTER_CONFIG_DIR 环境变量。设置环境变量后,您可能需要运行 jupyter migrate 以将文件复制到所需目录。

数据文件:内核规范和笔记本扩展#

数据文件包括用户安装的文件,除了配置文件之外。例如,内核规范和笔记本扩展。与配置文件一样,数据文件也会**自动迁移**到它们新的 Jupyter 位置。

IPython 3 中,数据文件存放在 ~/.ipython 目录下。

Jupyter 中,数据文件使用平台适当的位置:

  • OS X: ~/Library/Jupyter

  • Windows: 在 %APPDATA% 环境变量中指定的位置

  • 在其他地方,$XDG_DATA_HOME 被尊重,默认值为 ~/.local/share/jupyter

在所有情况下,可以使用 JUPYTER_DATA_DIR 环境变量来显式设置位置。

系统范围内安装的数据文件(例如在 /usr/local/share/jupyter 中)没有变化。每个用户安装的数据文件的位置已从 .ipython 更改为平台相应的 Jupyter 位置。

由于 Jupyter 没有配置文件,我该如何自定义它?#

虽然 IPython 有 配置文件 的概念,但 Jupyter 没有配置文件

在 IPython 中,配置文件是配置和运行时文件的集合。在 IPython 目录(~/.ipython)中,有名称类似于 profile_defaultprofile_demo 的目录。每个目录中都包含配置文件(ipython_config.pyipython_notebook_config.py)和运行时文件(history.sqlitesecurity/kernel-*.json)。配置文件可以用于在 IPython 的不同配置之间切换。

以前,人们可以使用 ipython notebook --profile demo 这样的命令来为 notebook 服务器 和 IPython 内核设置配置文件。这在 Jupyter 中不再可能一次性完成,就像在 IPython 3 中对其他内核也不可能一样。

更改 Jupyter notebook 配置目录#

如果你想更改笔记本配置,可以设置 JUPYTER_CONFIG_DIR

JUPYTER_CONFIG_DIR=./jupyter_config
jupyter notebook

更改 Jupyter notebook 配置文件#

如果你只想更改配置文件,你可以这样做:

jupyter notebook --config=/path/to/myconfig.py

使用自定义内核规范更改 IPython 的配置文件#

如果你确实想要更改 IPython 内核的配置文件,你不能再通过服务器命令行来完成。内核参数必须通过修改 kernelspec 来更改。你可以在不重启服务器的情况下完成此操作。每次启动新内核时,kernelspec 的更改都会生效。然而,没有一种很好的方式来修改 kernelspec。一种方法是使用 jupyter kernelspec list 来找到 kernel.json 文件,然后手动修改它,例如 kernels/python3/kernel.json。另外,a2km 是一个实验性项目,旨在使这些操作更加简便。

例如,在 kernels/mycustom/kernel.json 下的自定义 kernelspec 中添加 --profile 选项(参见 Jupyter kernelspec 方向 这里):

{
 "argv": ["python", "-m", "ipykernel",
          "--profile=my-ipython-profile",
          "-f", "{connection_file}"],
 "display_name": "Custom Profile Python",
 "language": "python"
}

然后你可以使用 --kernel=mycustom 命令行选项运行 Jupyter,IPython 将会找到相应的配置文件。

理解安装变化#

有关安装 Jupyter 的更多信息,请参阅 安装 页面。Jupyter 会自动迁移一些内容,如 Notebook 扩展和内核。

Notebook 扩展#

任何 IPython 笔记本扩展都应作为数据文件迁移的一部分 自动迁移

Notebook 扩展是通过以下方式安装的:

ipython install-nbextension [--user] EXTENSION

现在,扩展是通过以下方式安装的:

jupyter nbextension install [--user] EXTENSION

笔记本扩展将被安装在系统范围内的位置(例如 /usr/local/share/jupyter/nbextensions)。如果进行 --user 安装,笔记本扩展将放在 JUPYTER_DATA_DIR 位置。安装 不应该 通过猜测文件应该放在哪里来手动完成。

内核#

内核的安装方式与笔记本扩展非常相似。它们也将被 自动迁移

内核规范过去常常通过以下方式安装:

ipython kernelspec install [--user] KERNEL

它们现在通过以下方式安装:

jupyter kernelspec install [--user] KERNEL

默认情况下,内核规范将存放在系统范围内的位置(例如 /usr/local/share/jupyter/kernels)。如果进行 --user 安装,内核规范将存放在 JUPYTER_DATA_DIR 位置。安装 不应该 通过猜测文件应存放的位置来手动进行。

理解导入的变化#

IPython 4.0 包含了管理依赖的垫片;因此,所有在 IPython 3 上工作的导入在 IPython 4 上应该继续工作。如果你发现任何差异,请 告诉我们

一些变化包括:

IPython 3

Jupyter 和 IPython 4.0

IPython.html

notebook

IPython.html.widgets

ipywidgets

IPython.kernel

jupyter_client, ipykernel

IPython.parallel

ipyparallel

IPython.qt.console

qtconsole

IPython.utils.traitlets

traitlets

IPython.config

traitlets.config

重要

IPython.kernel 分割

IPython.kernel 变成了两个包:

  • jupyter_client 用于 Jupyter 客户端 API。

  • ipykernel 是 Jupyter 的 IPython 内核