Cookbook: Updating code for use with IPython 0.11 and later

georgexsh edited this page Aug 5, 2016 · 2 revisions
Clone this wiki locally

If you have Python code that imports IPython to start a REPL, you'll need to update it for version 0.11.

If you want to still support older versions, a try: except: block is probably the best way. The version number as a string is available as IPython..

If you're having trouble, talk to us on IRC or the mailing lists (links on the homepage).

Table of Contents

Namespace reorganization

Many functions and attributes previously available directly in IPython have been moved to IPython.core or IPython.lib

Starting IPython

embedded IPython does not load all configuration, and is often not what many users who use IPython.embed() actually want. Specifically, embedded IPython skips the namespace initialization steps (running startup files, etc.). If you want to start a regular IPython session, that has changed:

Old code:

from IPython.Shell import make_IPython
shell = make_IPython()

New code:

from IPython.terminal.ipapp import TerminalIPythonApp
app = TerminalIPythonApp.instance()
app.initialize(argv=[]) # argv=[] instructs IPython to ignore sys.argv

Embedding API

Embedding IPython means putting IPython into a particular namespace (like a debugger). This is often not actually what people want, and you may want to check out the above code for starting 'regular' IPython.

  • IPython.Shell.IPShellEmbed moved to IPython.frontend.terminal.embed.InteractiveShellEmbed, embed is accessible from IPython too.
Old code:
import IPython
argv = ["-prompt_in1", "myprompt [\\#]> ",
        "-prompt_out", "myprompt [\\#]: ",
        "-profile", ipythonprofile]
shell = IPython.Shell.IPShellEmbed(argv=argv, user_ns=namespace)
shell.set_banner(shell.IP.BANNER + '\n\n' + banner)
shell.IP.user_ns = {}

New code:

import IPython
from IPython.config.loader import Config
cfg = Config()
cfg.InteractiveShellEmbed.prompt_in1="myprompt [\\#]> "
cfg.InteractiveShellEmbed.prompt_out="myprompt [\\#]: "
# directly open the shell
IPython.embed(config=cfg, user_ns=namespace, banner2=banner)
# or get shell object and open it later
from IPython.frontend.terminal.embed import InteractiveShellEmbed
shell = InteractiveShellEmbed(config=cfg, user_ns=namespace, banner2=banner)
shell.user_ns = {}

Custom interact loop


The parallel processing features have a completely new api. See the documentation for details

IPython directive

There is a new version in the ipython source: docs/sphinxext/ but it may still contain bugs.

Example patches with < 0.11 compatibility