重要

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

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

IPython 扩展

比配置高一级的 IPython 扩展是 Python 模块,它们修改 shell 的行为。它们通过可导入的模块名称引用,并且可以放置在您通常导入的任何位置。

获取扩展

一些重要的扩展是 随 IPython 捆绑 的。可以在 wiki 上的 扩展索引 和 PyPI 上的 框架 :: IPython 标记 中找到其他扩展。

PyPI 上的扩展可以使用 pip 安装,就像任何其他 Python 包一样。

使用扩展

要在 IPython 运行时加载扩展,请使用 %load_ext 魔术

In [1]: %load_ext myextension

要在每次 IPython 启动时加载扩展,请在配置文件中列出它

c.InteractiveShellApp.extensions = [
    'myextension'
]

编写扩展

IPython 扩展是一个可导入的 Python 模块,它有一些特殊函数来加载和卸载它。这是一个模板

# myextension.py

def load_ipython_extension(ipython):
    # The `ipython` argument is the currently active `InteractiveShell`
    # instance, which can be used in any way. This allows you to register
    # new magics or aliases, for example.

def unload_ipython_extension(ipython):
    # If you want your extension to be unloadable, put that logic here.

load_ipython_extension() 函数在导入扩展后调用,并且当前处于活动状态的 InteractiveShell 实例作为唯一参数传递。在这一点上,您可以对 IPython 做任何您想做的事情。

如果用户使用 %load_extension,则不会再次调用 load_ipython_extension()。用户必须明确要求重新加载扩展(使用 %reload_extension)。在用户要求重新加载扩展的情况下,将卸载扩展(使用 unload_ipython_extension),然后重新加载它。

有用的 InteractiveShell 方法包括 register_magic_function()push()(向用户命名空间添加变量)和 drop_by_id()(在卸载时删除变量)。

另请参阅

定义自定义魔术

只要扩展模块可以通过 Python 的标准导入机制导入,就可以将它们放在任何想要的位置。

当扩展模块准备好供一般使用时,请将其添加到 扩展索引 中。我们还鼓励你将其上传到 PyPI 并使用 Framework :: IPython 分类器,以便用户可以使用标准打包工具安装它。

与 IPython 捆绑的扩展

  • octavemagic 曾经是捆绑的,但现在是 oct2py 的一部分。使用 %load_ext oct2py.ipython 加载它。

  • rmagic 现在是 rpy2 的一部分。使用 %load_ext rpy2.ipython 加载它,并参阅 rpy2.ipython.rmagic 了解如何使用它的详细信息。

  • cythonmagic 曾经是捆绑的,但现在是 cython 的一部分。使用 %load_ext Cython 加载它。

  • sympyprinting 曾经是一个捆绑的扩展,但现在你应该改用 sympy.init_printing()