从 IPython Notebook 迁移#

摘要#

大拆分将 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 以便将文件复制到所需的目录。

数据文件:kernelspecs 和 notebook 扩展#

数据文件包括除配置文件以外的用户安装的文件。示例包括 kernelspecs 和 notebook 扩展。与配置文件一样,数据文件也会自动迁移到它们新的 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 这样的命令来为笔记本服务器IPython 内核设置配置文件。在 Jupyter 中,不再可以一次性完成此操作,就像在 IPython 3 中对任何其他内核一样。

更改 Jupyter 笔记本配置目录#

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

JUPYTER_CONFIG_DIR=./jupyter_config
jupyter notebook

更改 Jupyter 笔记本配置文件#

如果你只想更改配置文件,可以执行

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

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

如果你确实想更改 IPython 内核的配置文件,则无法再在服务器命令行中执行此操作。必须通过修改内核规范来更改内核参数。你可以在不重新启动服务器的情况下执行此操作。每次启动新内核时,内核规范更改都会生效。但是,没有很好的方法来修改内核规范。一种方法是使用 jupyter kernelspec list 来查找 kernel.json 文件,然后手动修改它,例如 kernels/python3/kernel.json。或者,a2km 是一个实验项目,试图让这些事情变得更容易。

例如,将 --profile 选项添加到 kernels/mycustom/kernel.json 下的自定义内核规范(请参阅 Jupyter 内核规范说明 此处

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

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

了解安装更改#

有关安装 Jupyter 的更多信息,请参阅 安装和使用 页面。Jupyter 会自动迁移某些内容,如笔记本扩展和内核。

笔记本扩展#

任何 IPython 笔记本扩展都应在数据文件迁移过程中自动迁移

笔记本扩展已通过以下方式安装

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 内核