从 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 以将文件复制到所需目录。

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

数据文件包括除配置文件以外的用户安装文件。示例包括内核规范和笔记本扩展。与配置文件一样,数据文件也会自动迁移到新的 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.py, ipython_notebook_config.py) 和运行时文件 (history.sqlite, security/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 包含用于管理依赖项的 shim;因此,所有在 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 内核