|
|
.. _extensions_overview:
|
|
|
|
|
|
==================
|
|
|
IPython extensions
|
|
|
==================
|
|
|
|
|
|
A level above configuration are IPython extensions, Python modules which modify
|
|
|
the behaviour of the shell. They are referred to by an importable module name,
|
|
|
and can be placed anywhere you'd normally import from, or in
|
|
|
``$IPYTHONDIR/extensions/``.
|
|
|
|
|
|
Getting extensions
|
|
|
==================
|
|
|
|
|
|
A few important extensions are :ref:`bundled with IPython <bundled_extensions>`.
|
|
|
Others can be found on the `extensions index
|
|
|
<http://wiki.ipython.org/Extensions_Index>`_ on the wiki, and installed with
|
|
|
the ``%install_ext`` magic function.
|
|
|
|
|
|
Using extensions
|
|
|
================
|
|
|
|
|
|
To load an extension while IPython is running, use the ``%load_ext`` magic:
|
|
|
|
|
|
.. sourcecode:: ipython
|
|
|
|
|
|
In [1]: %load_ext myextension
|
|
|
|
|
|
To load it each time IPython starts, list it in your configuration file::
|
|
|
|
|
|
c.InteractiveShellApp.extensions = [
|
|
|
'myextension'
|
|
|
]
|
|
|
|
|
|
Writing extensions
|
|
|
==================
|
|
|
|
|
|
An IPython extension is an importable Python module that has a couple of special
|
|
|
functions to load and unload it. Here is a template::
|
|
|
|
|
|
# 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, plugins or aliases, for example.
|
|
|
|
|
|
def unload_ipython_extension(ipython):
|
|
|
# If you want your extension to be unloadable, put that logic here.
|
|
|
|
|
|
This :func:`load_ipython_extension` function is called after your extension is
|
|
|
imported, and the currently active :class:`~IPython.core.interactiveshell.InteractiveShell`
|
|
|
instance is passed as the only argument. You can do anything you want with
|
|
|
IPython at that point.
|
|
|
|
|
|
:func:`load_ipython_extension` will be called again if you load or reload
|
|
|
the extension again. It is up to the extension author to add code to manage
|
|
|
that.
|
|
|
|
|
|
Useful :class:`InteractiveShell` methods include :meth:`~IPython.core.interactiveshell.InteractiveShell.define_magic`,
|
|
|
:meth:`~IPython.core.interactiveshell.InteractiveShell.push` (to add variables to the user namespace) and
|
|
|
:meth:`~IPython.core.interactiveshell.InteractiveShell.drop_by_id` (to remove variables on unloading).
|
|
|
|
|
|
You can put your extension modules anywhere you want, as long as they can be
|
|
|
imported by Python's standard import mechanism. However, to make it easy to
|
|
|
write extensions, you can also put your extensions in
|
|
|
``os.path.join(ip.ipython_dir, 'extensions')``. This directory is added to
|
|
|
``sys.path`` automatically.
|
|
|
|
|
|
When your extension is ready for general use, please add it to the `extensions
|
|
|
index <http://wiki.ipython.org/Extensions_Index>`_.
|
|
|
|
|
|
Plugin class
|
|
|
------------
|
|
|
|
|
|
More advanced extensions might want to subclass :class:`IPython.core.plugin.Plugin`.
|
|
|
A plugin can have options configured by IPython's main :ref:`configuration
|
|
|
system <config_overview>`. The code to load and unload it looks like this::
|
|
|
|
|
|
def load_ipython_extension(ip):
|
|
|
"""Load the plugin in IPython."""
|
|
|
plugin = MyPlugin(shell=ip, config=ip.config)
|
|
|
try:
|
|
|
ip.plugin_manager.register_plugin('myplugin', plugin)
|
|
|
except KeyError:
|
|
|
print("Already loaded")
|
|
|
|
|
|
def unload_ipython_extension(ip):
|
|
|
ip.plugin_manager.unregister_plugin('myplugin')
|
|
|
|
|
|
For examples, see these files:
|
|
|
|
|
|
* :file:`IPython/extensions/autoreload.py`
|
|
|
* :file:`IPython/extensions/storemagic.py`
|
|
|
|
|
|
.. _bundled_extensions:
|
|
|
|
|
|
Extensions bundled with IPython
|
|
|
===============================
|
|
|
|
|
|
.. toctree::
|
|
|
:maxdepth: 1
|
|
|
|
|
|
autoreload
|
|
|
cythonmagic
|
|
|
octavemagic
|
|
|
rmagic
|
|
|
storemagic
|
|
|
sympyprinting
|
|
|
|