重要

本文档涵盖 IPython 6.0 及更高版本。从 6.0 版本开始,IPython 不再支持与低于 3.3 的 Python 版本(包括所有版本的 Python 2.7)兼容。

如果您正在寻找与 Python 2.7 兼容的 IPython 版本,请使用 IPython 5.x LTS 版本并参考其文档(LTS 是长期支持版本)。

IPython 配置系统概述

本节介绍 IPython 配置系统。它基于 traitlets.config;有关整体架构的更多信息,请参阅该文档。

配置文件位置

那么您应该将配置文件放在哪里?IPython 使用“配置文件”进行配置,默认情况下,所有配置文件都将存储在所谓的“IPython 目录”中。此目录的位置由以下算法确定

  • 如果给出了 ipython-dir 命令行标志,则使用其值。

  • 如果没有,则使用 IPython.paths.get_ipython_dir() 返回的值。此函数将首先查看 IPYTHONDIR 环境变量,然后默认为 ~/.ipython。对 IPYTHON_DIR 环境变量的历史支持将在未来版本中删除。

对于大多数用户,配置目录将是 ~/.ipython

以前版本的 IPython 在 Linux 上会使用 XDG 配置目录,默认创建 ~/.config/ipython。我们决定返回 ~/.ipython 以在系统之间保持一致性。如果 IPython 找到 XDG 位置,它将发出警告,并且如果那里还没有目录,它将把它移动到新位置。

一旦确定了 IPython 目录的位置,您需要知道您正在使用哪个配置文件。对于具有单个配置的用户,这将只是“default”,并且将位于 <IPYTHONDIR>/profile_default 中。

接下来你需要了解的是如何命名你的配置文件。基本思想是每个应用程序都有其自己的默认配置文件名。由ipython命令行程序使用的默认名称是ipython_config.py所有IPython应用程序都将使用此文件。IPython内核将在ipython_config.py之后加载其自己的配置文件。要加载特定配置文件而不是默认配置文件,可以通过config_file命令行标志覆盖名称。

要生成默认配置文件,请执行

$ ipython profile create

你将在profile_default下的IPython目录中拥有一个默认的ipython_config.py

注意

IPython配置选项区分大小写,IPython无法捕获错误命名的键或无效值。

默认情况下,IPython还将忽略任何无效配置文件。

5.0版本中添加: IPython可以配置为在配置文件无效时中止。为此,请将环境变量IPYTHON_SUPPRESS_CONFIG_ERRORS设置为'1''true'

定位这些文件

从命令行,你可以使用以下命令快速找到IPYTHONDIR或特定配置文件

$ ipython locate
/home/you/.ipython

$ ipython locate profile foo
/home/you/.ipython/profile_foo

这些映射到实用程序函数:IPython.paths.get_ipython_dir()IPython.paths.locate_profile()

配置文件

配置文件是一个包含配置和运行时文件的目录,例如日志、并行应用程序的连接信息以及你的IPython命令历史记录。

其思想是用户通常希望为不同目的维护一组配置文件:一个用于使用NumPy和SciPy进行数值计算,另一个用于使用SymPy进行符号计算。配置文件可以轻松地为每个目的保留单独的配置文件、日志和历史记录。

让我们首先展示如何使用配置文件

$ ipython --profile=sympy

这告诉ipython命令行程序从“sympy”配置文件获取其配置。各种配置文件的文件名不会改变。唯一的区别是配置文件的命名方式很特别。在上面的情况下,“sympy”配置文件表示在<IPYTHONDIR>/profile_sympy中查找ipython_config.py

一般模式是这样的:只需使用以下命令创建一个新配置文件

$ ipython profile create <name>

它会向你的IPython目录添加一个名为profile_<name>的目录。然后,你可以通过向命令行选项添加--profile=<name>来加载此配置文件。所有IPython应用程序都支持配置文件。

IPython扩展了Python文件的配置加载器,以便你可以从另一个配置文件继承配置。为此,在你的Python配置文件中使用类似于以下内容的行

load_subconfig('ipython_config.py', profile='default')