重要

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

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

概述

Python 最有用的功能之一是它的交互式解释器。它允许非常快速地测试想法,而无需像大多数编程语言中那样创建测试文件。但是,标准 Python 发行版附带的解释器对于扩展交互式使用来说有些局限。

IPython 的目标是创建一个用于交互式和探索性计算的综合环境。为了支持这一目标,IPython 有三个主要组件

  • 一个增强的交互式 Python shell。

  • 一个分离的双进程通信模型,它允许多个客户端连接到计算内核,最著名的是 Jupyter 提供的基于 Web 的笔记本。

  • 一个交互式并行计算架构,现在是 ipyparallel 包的一部分。

IPython 是完全开源的(根据修订后的 BSD 许可证发布)。

增强的交互式 Python shell

IPython 的交互式 shell (ipython) 具有以下目标,包括

  1. 提供一个优于 Python 默认 shell 的交互式 shell。IPython 具有许多用于制表符补全、对象内省、系统 shell 访问、跨会话检索命令历史记录以及在交互式工作时添加功能的特殊命令系统。它试图为 Python 代码开发和使用 Python 对象探索问题(例如数据分析)提供一个非常高效的环境。

  2. 作为您自己的程序的可嵌入、可随时使用的解释器。可以从另一个程序内部通过一个调用启动一个交互式 IPython shell,从而访问当前命名空间。这对于调试目的和需要批处理和交互式探索相结合的情况都非常有用。

  3. 提供一个灵活的框架,可以用作使用其他系统的工作基础环境,其中 Python 作为底层桥接语言。特别是像 Mathematica、IDL 和 Matlab 这样的科学环境激发了它的设计,但类似的想法在许多领域都很有用。

  4. 允许对线程化图形工具包进行交互式测试。IPython 支持通过特殊的线程标志对 GTK、Qt、WX、GLUT 和 OS X 应用程序进行交互式、非阻塞控制。普通的 Python shell 只可以对 Tkinter 应用程序执行此操作。

交互式 shell 的主要功能

  • 动态对象自省。只需按一个键即可访问解释器可访问的任何对象的文档字符串、函数定义原型、源代码、源文件和其他详细信息(? 代码,并且使用 ?? 代码可提供其他详细信息)。

  • 使用 * 通配符在模块和命名空间中搜索,在使用 ? 系统和通过 %psearch 命令时均可使用。

  • 在本地命名空间中通过在提示符处键入 TAB 来完成。这适用于当前目录中的关键字、模块、方法、变量和文件。这通过 prompt_toolkit 库提供支持。可以轻松地针对不同目的(系统命令、魔术参数等)实现自定义完成器。

  • 带命令历史记录(在会话之间保持持久性并绑定到每个配置文件)的编号输入/输出提示,在此历史记录中进行全面搜索并缓存所有输入和输出。

  • 用户可扩展的“魔术”命令。一组以 %%% 为前缀的命令可用于控制 IPython 本身,并提供目录控制、命名空间信息以及许多常见系统 shell 命令的别名。

  • 用于定义您自己的系统别名的别名工具。

  • 完整的系统 shell 访问权限。以 ! 开头的行直接传递到系统 shell,而使用 !!var = !cmd 将 shell 输出捕获到 python 变量中以供进一步使用。

  • 在调用系统 shell 时扩展 python 变量的能力。在 shell 命令中,任何以 $ 为前缀的 python 变量都会被扩展。双重 $$ 允许将一个文本 $ 传递到 shell(以访问 shell 和环境变量,例如 PATH)。

  • 文件系统导航,通过一个魔术 %cd 命令,以及一个持久书签系统(使用 %bookmark)以快速访问经常访问的目录。

  • 通过 %store 命令提供一个轻量级的持久性框架,它允许您保存任意 Python 变量。当您运行 %store -r 命令时,这些变量会得到恢复。

  • 在您键入时自动缩进和高亮显示代码(通过 prompt_toolkit 库)。

  • 宏系统,用于通过 %macro 命令使用单个名称快速重新执行多行以前的输入。宏可以通过 %store 持久存储,并通过 %edit 进行编辑。

  • 会话日志记录(您稍后可以在程序中将这些日志用作代码)。日志可以选择对所有输入进行时间戳记,还可以存储会话输出(标记为注释,因此日志仍然是有效的 Python 源代码)。

  • 会话恢复:可以重播日志以将以前的会话恢复到您离开时的状态。

  • 详细且带颜色的异常回溯打印输出。在视觉上更容易解析,并且在详细模式下,它们会产生大量有用的调试信息(基本上是 cgitb 模块的终端版本)。

  • 通过 %autocall 命令自动添加括号:可调用对象可以在没有括号的情况下执行:sin 3 会自动转换为 sin(3)

  • 自动加引号:使用 ,; 作为第一字符会强制对该行的其余部分自动加引号:,my_function a b 会自动变成 my_function("a","b"),而 ;my_function a b 会变成 my_function("a b")

  • 可扩展的输入语法。您可以定义过滤器,以预处理用户输入,以便在特殊情况下简化输入。例如,这允许粘贴以 >>>... 开头的多行代码片段,例如来自其他 Python 会话或标准 Python 文档的代码片段。

  • 灵活的 配置系统。它使用配置文件,该配置文件允许永久设置所有命令行选项、模块加载、代码和文件执行。该系统允许递归文件包含,因此您可以使用具有默认值和加载其他自定义项(针对特定项目)的图层的基本文件。

  • 可嵌入。您可以在自己的 Python 程序中将 IPython 作为 Python shell 调用。这既可用于调试代码,也可用于为您的程序提供交互式功能,同时了解本地命名空间(在调试和数据分析情况下非常有用)。

  • 轻松调试器访问。您可以将 IPython 设置为在每次出现未捕获的异常时调用 Python 调试器 (pdb) 的增强版本。这会将您转到触发异常的代码中,其中所有数据都是实时的,并且可以浏览堆栈以快速隔离错误源。%run 魔术命令(使用 -d 选项)可以在 pdb 的控制下运行任何脚本,自动为您设置初始断点。此版本的 pdb 具有特定于 IPython 的改进,包括制表符补全和回溯着色支持。要更轻松地访问调试器,请在看到异常后尝试 %debug

  • 分析器支持。您可以运行单个语句(类似于 profile.run())或在分析器的控制下运行完整程序。虽然这可以使用标准 cProfile 或 profile 模块实现,但 IPython 使用魔术命令(请参见 %prun%run -p)对该功能进行了封装,以便于快速交互式工作。

  • 简单的时序信息。您可以使用 %timeit 命令来获取 Python 语句或表达式的执行时间。此机制非常智能,可以针对非常快速完成的命令执行更多重复,以便更好地估计其运行时间。

In [1]: %timeit 1+1
7.88 ns ± 0.0494 ns per loop (mean ± std. dev. of 7 runs, 100000000 loops each)

In [2]: %timeit [math.sin(x) for x in range(5000)]
608 µs ± 5.57 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

要获取多个表达式的时序信息,请使用 %%timeit 单元格魔术命令。

  • Doctest 支持。特殊的 %doctest_mode 命令切换到使用与 doctest 兼容的提示符的模式,以便你可以将 IPython 会话用作 doctest 代码。默认情况下,IPython 还允许你粘贴现有的 doctest,并删除其中的前导 >>>... 提示符。

分离的双进程模型

IPython 通过将评估分离到自己的进程中,抽象并扩展了传统读-评估-打印循环 (REPL) 环境的概念。我们称此进程为内核:它从客户端接收执行指令,并将结果传达给客户端。

这种分离使我们能够让多个客户端连接到同一个内核,甚至允许客户端和内核驻留在不同的机器上。除了基于终端的传统单进程 IPython(如果你在没有任何子命令的情况下运行 ipython,就会启动它)之外,所有其他 IPython 机制都使用此双进程模型。现在,其中大部分内容都是 Jupyter 项目的一部分,其中包括 jupyter consolejupyter qtconsolejupyter notebook

例如,这意味着当你启动 jupyter qtconsole 时,你实际上启动了两个进程,一个内核和一个基于 Qt 的客户端,该客户端可以向该内核发送命令并从该内核接收结果。如果你想要连接到的内核已经运行,你可以传递 --existing 标志,该标志将跳过启动新内核,而是连接到最近的内核。要在运行多个内核后连接到特定内核,请使用 %connect_info 魔术命令获取唯一的连接文件,该文件类似于 --existing kernel-19732.json,但数字不同,对应于内核的进程 ID。

你可以阅读更多关于使用 jupyter qtconsolejupyter notebook 的内容。还有一个 消息规范,其中记录了内核和客户端之间通信的协议。

另请参阅

前端/内核模型 示例笔记本

交互式并行计算

此功能是可选的,现在是 ipyparallel 项目的一部分。

可移植性和 Python 要求

7.0+ 版本支持 Python 3.4 及更高版本。6.x 版本支持 Python 3.3 及更高版本。2.0 至 5.x 版本适用于 Python 2.7.x 版本和 Python 3.3 及更高版本。1.0 版本还适用于 Python 2.6 和 3.2。0.12 版本是第一个完全支持 Python 3 的版本。

已知 IPython 在以下操作系统上运行

  • Linux

  • 大多数其他类 Unix 操作系统(AIX、Solaris、BSD 等)

  • Mac OS X

  • Windows(CygWin、XP、Vista 等)

请参阅 此处 了解有关如何安装 IPython 的说明。