IPython Changelog

What's new in IPython 3.0.0

Feb 28, 2015
  • Using different kernels:
  • You can now choose a kernel for a notebook within the user interface, rather than starting up a separate notebook server for each kernel you want to use. The syntax highlighting adapts to match the language you’re working in.
  • Information about the kernel is stored in the notebook file, so when you open a notebook, it will automatically start the correct kernel.
  • It is also easier to use the Qt console and the terminal console with other kernels, using the –kernel flag.
  • Kernel authors should see Kernel specs for how to register their kernels with IPython so that these mechanisms work.
  • Typing unicode identifiers:
  • Complex expressions can be much cleaner when written with a wider choice of characters. Python 3 allows unicode identifiers, and IPython 3 makes it easier to type those, using a feature from Julia. Type a backslash followed by a LaTeX style short name, such as \alpha. Press tab, and it will turn into α.
  • Widget migration guide:
  • The widget framework has a lot of backwards incompatible changes.
  • Other new features:
  • TextWidget and TextareaWidget objects now include a placeholder attribute, for displaying placeholder text before the user has typed anything.
  • The %load magic can now find the source for objects in the user namespace. To enable searching the namespace, use the -n option.
  • DirectView objects have a new use_cloudpickle() method, which works like view.use_dill(), but causes the cloudpickle module from PiCloud’s cloud library to be used rather than dill or the builtin pickle module.
  • Added a .ipynb exporter to nbconvert. It can be used by passing --to notebook as a commandline argument to nbconvert.
  • New nbconvert preprocessor called ClearOutputPreprocessor. This clears the output from IPython notebooks.
  • New preprocessor for nbconvert that executes all the code cells in a notebook.
  • Consecutive stream (stdout/stderr) output is merged into a single output in the notebook document. Previously, all output messages were preserved as separate output fields in the JSON. Now, the same merge is applied to the stored output as the displayed output, improving document load time for notebooks with many small outputs.
  • NotebookApp.webapp_settings is deprecated and replaced with the more informatively named NotebookApp.tornado_settings.
  • Using %timeit prints warnings if there is atleast a 4x difference in timings between the slowest and fastest runs, since this might meant that the multiple runs are not independent of one another.
  • It’s now possible to provide mechanisms to integrate IPython with other event loops, in addition to the ones we already support. This lets you run GUI code in IPython with an interactive prompt, and to embed the IPython kernel in GUI applications. See Integrating with GUI event loops for details. As part of this, the direct enable_* and disable_* functions for various GUIs in IPython.lib.inputhook have been deprecated in favour of enable_gui() and disable_gui().
  • A ScrollManager was added to the notebook. The ScrollManager controls how the notebook document is scrolled using keyboard. Users can inherit from the ScrollManager or TargetScrollManager to customize how their notebook scrolls. The default ScrollManager is the SlideScrollManager, which tries to scroll to the nearest slide or sub-slide cell.
  • The function interact_manual() has been added which behaves similarly to interact(), but adds a button to explicitly run the interacted-with function, rather than doing it automatically for every change of the parameter widgets. This should be useful for long-running functions.
  • The %cython magic is now part of the Cython module. Use %load_ext Cython with a version of Cython >= 0.21 to have access to the magic now.
  • The Notebook application now offers integrated terminals on Unix platforms, intended for when it is used on a remote server. To enable these, install the terminado Python package.
  • The Notebook application can now edit any plain text files, via a full-page CodeMirror instance.
  • Setting the default highlighting language for nbconvert with the config option NbConvertBase.default_language is deprecated. Nbconvert now respects metadata stored in the kernel spec.
  • IPython can now be configured systemwide, with files in /etc/ipython or /usr/local/etc/ipython on Unix systems, or %PROGRAMDATA%\ipython on Windows.
  • Added support for configurable user-supplied Jinja HTML templates for the notebook. Paths to directories containing template files can be specified via NotebookApp.extra_template_paths. User-supplied template directories searched first by the notebook, making it possible to replace existing templates with your own files.
  • t’s also possible to override a template while also inheriting from that template, by prepending templates/ to the {% extends %} target of your child template. This is useful when you only want to override a specific block of a template.
  • Added a widget persistence API. This allows you to persist your notebooks interactive widgets. Two levels of control are provided: 1. Higher level- WidgetManager.set_state_callbacks allows you to register callbacks for loading and saving widget state. The callbacks you register are automatically called when necessary. 2. Lower level- the WidgetManager Javascript class now has get_state and set_state methods that allow you to get and set the state of the widget runtime.
  • Enhanced support for %env magic. As before, %env with no arguments displays all environment variables and values. Additionally, %env can be used to get or set individual environment variables. To display an individual value, use the %env var syntax. To set a value, use env var val or env var=val. Python value expansion using $ works as usual.
  • Backwards incompatible changes:
  • The message protocol has been updated from version 4 to version 5. Adapters are included, so IPython frontends can still talk to kernels that implement protocol version 4.
  • The notebook format has been updated from version 3 to version 4. Read-only support for v4 notebooks has been backported to IPython 2.4. Notable changes:
  • heading cells are removed in favor or markdown headings
  • notebook outputs and output messages are more consistent with each other
  • use IPython.nbformat.read() and write() to read and write notebook files instead of the deprecated IPython.nbformat.current APIs.
  • IPython.core.oinspect.getsource() call specification has changed:
  • oname keyword argument has been added for property source formatting
  • is_binary keyword argument has been dropped, passing True had previously short-circuited the function to return None unconditionally
  • Removed the octavemagic extension: it is now available as oct2py.ipython.
  • Creating PDFs with LaTeX no longer uses a post processor. Use nbconvert --to pdf instead of nbconvert --to latex --post pdf.
  • Used https://github.com/jdfreder/bootstrap2to3 to migrate the Notebook to Bootstrap 3.
  • Additional changes:
  • Set .tab-content .row 0px; left and right margin (bootstrap default is -15px;)
  • Removed height: @btn_mini_height; from .list_header>div, .list_item>div in tree.less
  • Set #header div margin-bottom: 0px;
  • Set #menus to float: left;
  • Set #maintoolbar .navbar-text to float: none;
  • Added no-padding convenience class.
  • Set border of #maintoolbar to 0px
  • Accessing the container DOM object when displaying javascript has been deprecated in IPython 2.0 in favor of accessing element. Starting with IPython 3.0 trying to access container will raise an error in browser javascript console.
  • IPython.utils.py3compat.open was removed: io.open() provides all the same functionality.
  • The NotebookManager and /api/notebooks service has been replaced by a more generic ContentsManager and /api/contents service, which supports all kinds of files.
  • The Dashboard now lists all files, not just notebooks and directories.
  • The --script hook for saving notebooks to Python scripts is removed, use ipython nbconvert --to python notebook instead.
  • The rmagic extension is deprecated, as it is now part of rpy2. See rpy2.ipython.rmagic.
  • start_kernel() and format_kernel_cmd() no longer accept a executable parameter. Use the kernelspec machinery instead.
  • The widget classes have been renamed from *Widget to *. The old names are still functional, but are deprecated. i.e. IntSliderWidget has been renamed to IntSlider.
  • The ContainerWidget was renamed to Box and no longer defaults as a flexible box in the web browser. A new FlexBox widget was added, which allows you to use the flexible box model.
  • The notebook now uses a single websocket at /kernels//channels instead of separate /kernels//{shell|iopub|stdin} channels. Messages on each channel are identified by a channel key in the message dict, for both send and recv.
  • Content Security Policy:
  • The Content Security Policy is a web standard for adding a layer of security to detect and mitigate certain classes of attacks, including Cross Site Scripting (XSS) and data injection attacks. This was introduced into the notebook to ensure that the IPython Notebook and its APIs (by default) can only be embedded in an iframe on the same origin.
  • Override headers['Content-Security-Policy'] within your notebook configuration to extend for alternate domains and security settings.
  • There is a report-uri endpoint available for logging CSP violations, located at /api/security/csp-report.

New in IPython 2.4.0 (Feb 6, 2015)

  • A bug fix and minor feature release for IPython 2.x.

New in IPython 2.3.0 (Oct 2, 2014)

  • Bugfixes for 2.x, most importantly a fix for maths rendering in notebooks exported to HTML by nbconvert.

New in IPython 2.1.0 (May 22, 2014)

  • Fixed Issues:
  • #5364: Horizontal scrollbar hides cell’s last line on Firefox
  • #5192: horisontal scrollbar overlaps output or touches next cell
  • #5840: Third-party Windows kernels don’t get interrupt signal
  • #2412: print history to file using qtconsole and notebook
  • #5703: Notebook doesn’t render with “ask me every time” cookie setting in Firefox
  • #5817: calling mock object in IPython 2.0.0 under Python 3.4.0 raises AttributeError
  • #5499: Error running widgets nbconvert example
  • #5654: Broken links from ipython documentation
  • #5019: print in QT event callback doesn’t show up in ipython notebook.
  • #5800: Only last In prompt number set ?
  • #5801: startup_command specified in ipengine_config.py is not executed
  • #5690: ipython 2.0.0 and pandoc 1.12.2.1 problem
  • #5408: Add checking/flushing of background output from kernel in mainloop
  • #5407: clearing message handlers on status=idle loses async output
  • #5467: Incorrect behavior of up/down keyboard arrows in code cells on wrapped lines
  • #3085: nicer notebook error message when lacking permissions
  • #5765: map_sync over empty list raises IndexError
  • #5553: Notebook matplotlib inline backend: can’t set figure facecolor
  • #5710: inspect.findsource monkeypatch raises wrong exception for C extensions
  • #5706: Multi-Directory notebooks overwrite each other’s checkpoints
  • #5698: can’t require a function named f
  • #5569: Keyboard shortcuts in documentation are out of date
  • #5566: Function name printing should use __qualname__ instead of __name__ (Python 3)
  • #5676: “bookmark -l” not working in ipython 2.0
  • #5555: Differentiate more clearly between Notebooks and Folders in new UI
  • #5590: Marked double escape
  • #5514: import tab-complete fail with ipython 2.0 shell
  • #4012: Notebook: link to markdown formatting reference
  • #5611: Typo in ‘storemagic’ documentation
  • #5589: Kernel start fails when using –browser argument
  • #5491: Bug in Windows ipconfig ip address regular expression
  • #5579: rmagic extension throws ‘Error while parsing the string.’ when last line is comment
  • #5518: Ipython2 will not open ipynb in example directory
  • #5561: New widget documentation has missing notebook link
  • #5128: Page jumping when output from widget interaction replaced
  • #5519: IPython.parallel.Client behavior as iterator
  • #5510: Tab-completion for function argument list
  • Pull Requests:
  • PR #5871: specify encoding in msgpack.unpackb
  • PR #5869: Catch more errors from clipboard access on Windows
  • PR #5866: Make test robust against differences in line endings
  • PR #5605: Two cell toolbar fixes.
  • PR #5843: remove Firefox-specific CSS workaround
  • PR #5845: Pass Windows interrupt event to kernels as an environment variable
  • PR #5835: fix typo in v2 convert
  • PR #5841: Fix writing history with output to a file in Python 2
  • PR #5842: fix typo in nbconvert help
  • PR #5846: Fix typos in Cython example
  • PR #5839: Close graphics dev in finally clause
  • PR #5837: pass on install docs
  • PR #5832: Fixed example to work with python3
  • PR #5826: allow notebook tour instantiation to fail
  • PR #5560: Minor expansion of Cython example
  • PR #5818: interpret any exception in getcallargs as not callable
  • PR #5816: Add output to IPython directive when in verbatim mode.
  • PR #5822: Don’t overwrite widget description in interact
  • PR #5782: Silence exception thrown by completer when dir() does not return a list
  • PR #5807: Drop log level to info for Qt console shutdown
  • PR #5814: Remove -i options from mv, rm and cp aliases
  • PR #5812: Fix application name when printing subcommand help.
  • PR #5804: remove an inappropriate !
  • PR #5805: fix engine startup files
  • PR #5806: Don’t auto-move .config/ipython if symbolic link
  • PR #5716: Add booktabs package to latex base.tplx
  • PR #5669: allows threadsafe sys.stdout.flush from background threads
  • PR #5668: allow async output on the most recent request
  • PR #5768: fix cursor keys in long lines wrapped in markdown
  • PR #5788: run cells with silent=True in %run nb.ipynb
  • PR #5715: log all failed ajax API requests
  • PR #5769: Don’t urlescape the text that goes into a title tag
  • PR #5762: Fix check for pickling closures
  • PR #5766: View.map with empty sequence should return empty list
  • PR #5758: Applied bug fix: using fc and ec did not properly set the figure canvas ...
  • PR #5754: Format command name into subcommand_description at run time, not import
  • PR #5744: Describe using PyPI/pip to distribute & install extensions
  • PR #5712: monkeypatch inspect.findsource only when we use it
  • PR #5708: create checkpoints dir in notebook subdirectories
  • PR #5714: log error message when API requests fail
  • PR #5732: Quick typo fix in nbformat/convert.py
  • PR #5713: Fix a NameError in IPython.parallel
  • PR #5704: Update nbconvertapp.py
  • PR #5534: cleanup some pre css inheritance
  • PR #5699: don’t use common names in require decorators
  • PR #5692: Update notebook.rst fixing broken reference to notebook examples readme
  • PR #5693: Update parallel_intro.rst to fix a broken link to examples
  • PR #5486: disambiguate to location when no IPs can be determined
  • PR #5574: Remove the outdated keyboard shortcuts from notebook docs
  • PR #5568: Use __qualname__ in pretty reprs for Python 3
  • PR #5678: Fix copy & paste error in docstring of ImageWidget class
  • PR #5677: Fix %bookmark -l for Python 3
  • PR #5670: nbconvert: Fix CWD imports
  • PR #5647: Mention git hooks in install documentation
  • PR #5671: Fix blank slides issue in Reveal slideshow pdf export
  • PR #5657: use ‘localhost’ as default for the notebook server
  • PR #5584: more semantic icons
  • PR #5594: update components with marked-0.3.2
  • PR #5500: check for Python 3.2
  • PR #5582: reset readline after running PYTHONSTARTUP
  • PR #5630: Fixed Issue #4012 Added Help menubar link to Github markdown doc
  • PR #5613: Fixing bug #5607
  • PR #5633: Provide more help if lessc is not found.
  • PR #5620: fixed a typo in IPython.core.formatters
  • PR #5619: Fix typo in storemagic module docstring
  • PR #5592: add missing browser to notebook_aliases list
  • PR #5506: Fix ipconfig regex pattern
  • PR #5581: Fix rmagic for cells ending in comment.
  • PR #5576: only process cr if it’s found
  • PR #5478: Add git-hooks install script. Update README.md
  • PR #5546: do not shutdown notebook if ‘n’ is part of answer
  • PR #5527: Don’t remove upload items from nav tree unless explicitly requested.
  • PR #5501: remove inappropriate wheel tag override
  • PR #5548: FileNotebookManager: Use shutil.move() instead of os.rename()
  • PR #5524: never use for (var i in array)
  • PR #5459: Fix interact animation page jump FF
  • PR #5559: Minor typo fix in “Cython Magics.ipynb”
  • PR #5507: Fix typo in interactive widgets examples index notebook
  • PR #5554: Make HasTraits pickleable
  • PR #5535: fix n^2 performance issue in coalesce_streams preprocessor
  • PR #5522: fix iteration over Client
  • PR #5488: Added missing require and jquery from cdn.
  • PR #5516: ENH: list generated config files in generated, and rm them upon clean
  • PR #5493: made a minor fix to one of the widget examples
  • PR #5512: Update tooltips to refer to shift-tab
  • PR #5505: Make backport_pr work on Python 3
  • PR #5503: check explicitly for ‘dev’ before adding the note to docs
  • PR #5498: use milestones to indicate backport
  • PR #5492: Polish whatsnew docs
  • PR #5495: Fix various broken things in docs
  • PR #5496: Exclude whatsnew/pr directory from docs builds
  • PR #5489: Fix required Python versions

New in IPython 2.0.0 (May 22, 2014)

  • The principal milestones of 2.0 are:
  • interactive widgets for the notebook
  • directory navigation in the notebook dashboard
  • persistent URLs for notebooks
  • a new modal user interface in the notebook
  • a security model for notebooks

New in IPython 1.2.1 (Mar 10, 2014)

  • Bug fix release for Python 2.6 and 3.4:
  • PR #4372: Don’t assume that SyntaxTB is always called with a SyntaxError
  • PR #5166: remove mktemp usage
  • PR #5163: Simplify implementation of TemporaryWorkingDirectory.
  • PR #5105: add index to format to support py2.6

New in IPython 1.2.0 (Feb 14, 2014)

  • Pull Requests:
  • PR #4972: Work around problem in doctest discovery in Python 3.4 with PyQt
  • PR #4934: ipython profile create respects –ipython-dir
  • PR #4845: Add Origin Checking.
  • PR #4928: use importlib.machinery when available
  • PR #4849: Various unicode fixes (mostly on Windows)
  • PR #4880: set profile name from profile_dir
  • PR #4908: detect builtin docstrings in oinspect
  • PR #4909: sort dictionary keys before comparison, ordering is not guaranteed
  • PR #4903: use https for all embeds
  • PR #4868: Static path fixes
  • PR #4820: fix regex for cleaning old logs with ipcluster
  • PR #4840: Error in Session.send_raw()
  • PR #4762: whitelist alphanumeric characters for cookie_name
  • PR #4748: fix race condition in profiledir creation.
  • PR #4720: never use ssh multiplexer in tunnels
  • PR #4738: don’t inject help into user_ns
  • PR #4722: allow purging local results as long as they are not outstanding
  • PR #4668: Make non-ASCII docstring unicode
  • PR #4639: Minor import fix to get qtconsole with –pylab=qt working
  • PR #4453: Play nice with App Nap
  • PR #4609: Fix bytes regex for Python 3.
  • PR #4488: fix typo in message spec doc
  • PR #4346: getpass() on Windows & Python 2 needs bytes prompt
  • PR #4230: Switch correctly to the user’s default matplotlib backend after inline.
  • PR #4214: engine ID metadata should be unicode, not bytes
  • PR #4232: no highlight if no language specified
  • PR #4218: Fix display of SyntaxError when .py file is modified
  • PR #4217: avoid importing numpy at the module level
  • PR #4213: fixed dead link in examples/notebooks readme to Part 3
  • PR #4183: ESC should be handled by CM if tooltip is not on
  • PR #4193: Update for #3549: Append Firefox overflow-x fix
  • PR #4205: use TextIOWrapper when communicating with pandoc subprocess
  • PR #4204: remove some extraneous print statements from IPython.parallel
  • PR #4201: HeadingCells cannot be split or merged
  • Issues:
  • #4892: IPython.qt test failure with python3.4
  • #4810: ipcluster bug in clean_logs flag
  • #4765: missing build script for highlight.js
  • #4761: ipv6 address triggers cookie exception
  • #4721: purge_results with jobid crashing - looking for insight
  • #4602: “ipcluster stop” fails after “ipcluster start –daemonize” using python3.3
  • #3386: Magic %paste not working in Python 3.3.2. TypeError: Type str doesn’t support the buffer API
  • #4485: Incorrect info in “Messaging in IPython” documentation.
  • #4351: /parallel/apps/launcher.py error
  • #4334: NotebookApp.webapp_settings static_url_prefix causes crash
  • #4039: Celltoolbar example issue
  • #4256: IPython no longer handles unicode file names
  • #4122: Nbconvert [windows]: Inconsistent line endings in markdown cells exported to latex
  • #3819: nbconvert add extra blank line to code block on Windows.
  • #4203: remove spurious print statement from parallel annoted functions
  • #4200: Notebook: merging a heading cell and markdown cell cannot be undone

New in IPython 1.1.0 (Sep 12, 2013)

  • Pull Requests:
  • PR #4188 - Allow user_ns trait to be None
  • PR #4189 - always fire LOCAL_IPS.extend(PUBLIC_IPS)
  • PR #4174 - various issues in markdown and rst templates
  • PR #4178 - add missing data_javascript
  • PR #4181 - nbconvert: Fix, sphinx template not removing new lines from headers
  • PR #4043 - don't 'restore_bytes' in from_JSON
  • PR #4163 - Fix for incorrect default encoding on Windows.
  • PR #4136 - catch javascript errors in any output
  • PR #4171 - add nbconvert config file when creating profiles
  • PR #4125 - Basic exercise of ipython [subcommand] -h and help-all
  • PR #4085 - nbconvert: Fix sphinx preprocessor date format string for Windows
  • PR #4159 - don't split .cell and div.cell CSS
  • PR #4158 - generate choices for --gui configurable from real mapping
  • PR #4065 - do not include specific css in embedable one
  • PR #4092 - nbconvert: Fix for unicode html headers, Windows + Python 2.x
  • PR #4074 - close Client sockets if connection fails
  • PR #4064 - Store default codemirror mode in only 1 place
  • PR #4104 - Add way to install MathJax to a particular profile
  • PR #4144 - help_end transformer shouldn't pick up ? in multiline string
  • PR #4143 - update example custom.js
  • PR #4142 - DOC: unwrap openssl line in public_server doc
  • PR #4141 - add files with a separate add call in backport_pr
  • PR #4137 - Restore autorestore option for storemagic
  • PR #4098 - pass profile-dir instead of profile name to Kernel
  • PR #4120 - support input in Python 2 kernels
  • PR #4088 - nbconvert: Fix coalescestreams line with incorrect nesting causing strange behavior
  • PR #4060 - only strip continuation prompts if regular prompts seen first
  • PR #4132 - Fixed name error bug in function safe_unicode in module py3compat.
  • PR #4121 - move test_kernel from IPython.zmq to IPython.kernel
  • PR #4118 - ZMQ heartbeat channel: catch EINTR exceptions and continue.
  • PR #4054 - use unicode for HTML export
  • PR #4106 - fix a couple of default block values
  • PR #4115 - Update docs on declaring a magic function
  • PR #4101 - restore accidentally removed EngineError
  • PR #4096 - minor docs changes
  • PR #4056 - respect pylab_import_all when --pylab specified at the command-line
  • PR #4091 - Make Qt console banner configurable
  • PR #4086 - fix missing errno import
  • PR #4030 - exclude .git in MANIFEST.in
  • PR #4047 - Use istype() when checking if canned object is a dict
  • PR #4031 - don't close_fds on Windows
  • PR #4029 - bson.Binary moved
  • PR #4035 - Fixed custom jinja2 templates being ignored when setting template_path
  • PR #4026 - small doc fix in nbconvert
  • PR #4016 - Fix IPython.start_* functions
  • PR #4021 - Fix parallel.client.View map() on numpy arrays
  • PR #4022 - DOC: fix links to matplotlib, notebook docs
  • PR #4018 - Fix warning when running IPython.kernel tests
  • PR #4019 - Test skipping without unicode paths
  • PR #4008 - Transform code before %prun/%%prun runs
  • PR #4014 - Fix typo in ipapp
  • PR #3987 - get files list in backport_pr
  • PR #3974 - nbconvert: Fix app tests on Window7 w/ Python 3.3
  • PR #3978 - fix --existing with non-localhost IP
  • PR #3939 - minor checkpoint cleanup
  • PR #3981 - BF: fix nbconvert rst input prompt spacing
  • PR #3960 - Don't make sphinx a dependency for importing nbconvert
  • PR #3973 - logging.Formatter is not new-style in 2.6
  • Issues:
  • #4024 - nbconvert markdown issues
  • #4095 - Catch js error in append html in stream/pyerr
  • #4156 - Specifying --gui=tk at the command line
  • #3818 - nbconvert can't handle Heading with Chinese characters on Japanese Windows OS.
  • #4134 - multi-line parser fails on ''' in comment, qtconsole and notebook.
  • #3998 - sample custom.js needs to be updated
  • #4078 - StoreMagic.autorestore not working in 1.0.0
  • #3990 - Buitlin input doesn't work over zmq
  • #4015 - nbconvert fails to convert all the content of a notebook
  • #4059 - Issues with Ellipsis literal in Python 3
  • #4103 - Wrong default argument of DirectView.clear
  • #4100 - parallel.client.client references undefined error.EngineError
  • #4005 - IPython.start_kernel doesn't work.
  • #4020 - IPython parallel map fails on numpy arrays
  • #3945 - nbconvert: commandline tests fail Win7x64 Py3.3
  • #3977 - unable to complete remote connections for two-process
  • #3980 - nbconvert rst output lacks needed blank lines
  • #3968 - TypeError: super() argument 1 must be type, not classobj (Python 2.6.6)

New in IPython 1.0 Alpha 1 (Jul 29, 2013)

  • Major reorganizations:
  • Added IPython.kernel for all kernel-related code. This means that IPython.zmq has been removed, and much of it is now in IPython.kernel.zmq, some of it being in the top-level IPython.kernel.
  • We have removed the frontend subpackage, as it caused unnecessary depth. So what was IPython.frontend.qt is now IPython.qt, and so on. The one difference is that the notebook has been further flattened, so that IPython.frontend.html.notebook is now just IPython.html. There is a shim module, so IPython.frontend is still importable in 1.0, but there will be a warning.
  • The IPython sphinx directives are now installed in IPython.sphinx, so they can be imported by other projects.
  • Core:
  • The input transformation framework has been reworked. This fixes some corner cases, and adds more flexibility for projects which use IPython, like SymPy & SAGE. For more details, see Custom input transformation.
  • Exception types can now be displayed with a custom traceback, by defining a _render_traceback_() method which returns a list of strings, each containing one line of the traceback.
  • A new command, ipython history trim can be used to delete everything but the last 1000 entries in the history database.
  • __file__ is defined in both config files at load time, and .ipy files executed with %run.
  • %logstart and %logappend are no longer broken.
  • Add glob expansion for %run, e.g. %run -g script.py *.txt.
  • Expand variables ($foo) in Cell Magic argument line.
  • By default, iptest will exclude various slow tests. All tests can be run with iptest –all.
  • SQLite history can be disabled in the various cases that it does not behave well.
  • �it works on interactively defined variables.
  • editor hooks have been restored from quarantine, enabling TextMate as editor, etc.
  • The env variable PYTHONSTARTUP is respected by IPython.
  • A %matplotlib magic is added, which is like the old %pylab magic, but it does not import anything to the interactive namespace. It is recommended that users switch to %matplotlib and explicit imports.
  • Major changes:
  • The notebook is now autosaved, by default at an interval of two minutes. When you press ‘save’ or Ctrl-S, a checkpoint is made, in a hidden folder. This checkpoint can be restored, so that the autosave model is strictly safer than traditional save. If you change nothing about your save habits, you will always have a checkpoint that you have written, and an autosaved file that is kept up to date.
  • You can load custom javascript and CSS in the notebook by editing the files $(ipython locate profile)/static/custom/custom.js,css.
  • Add %%html, %%svg, %%javascript, and %%latex cell magics for writing raw output in notebook cells.
  • add a redirect handler and anchors on heading cells, so you can link across notebooks, directly to heading cells in other notebooks.
  • Images support width and height metadata, and thereby 2x scaling (retina support).
  • _repr_foo_ methods can return a tuple of (data, metadata), where metadata is a dict containing metadata about the displayed object. This is used to set size, etc. for retina graphics. To enable retina matplotlib figures, simply set InlineBackend.figure_format = 'retina' for 2x PNG figures.
  • Add display.FileLink and FileLinks for quickly displaying HTML links to local files.
  • Cells have metadata, which can be edited via cell toolbars. This metadata can be used by external code (e.g. reveal.js or exporters), when examining the notebook.
  • Fix an issue parsing LaTeX in markdown cells, which required users to type \\\, instead of \\.
  • Notebook templates are rendered with Jinja instead of Tornado.
  • %%file has been renamed %%writefile (%%file) is deprecated.
  • ANSI (and VT100) color parsing has been improved in both performance and supported values.
  • The static files path can be found as IPython.html.DEFAULT_STATIC_FILES_PATH, which may be changed by package managers.
  • The notebook supports raw_input(), and thus also �bug.
  • IPython’s CSS is installed in static/css/style.min.css (all style, including bootstrap), and static/css/ipython.min.css, which only has IPython’s own CSS. The latter file should be useful for embedding IPython notebooks in other pages, blogs, etc.

New in IPython 0.13.2 (Jul 29, 2013)

  • Bug fixes:
  • PR #2244: fix css typo
  • PR #2399: IndentationError display
  • PR #2503: Fix traceback handling of SyntaxErrors without line numbers.
  • PR #2500: Add encoding attribute to OutStream class.
  • PR #2498: Don’t catch tab press when something selected
  • PR #2490: add ZMQInteractiveShell to IPEngineApp class list
  • PR #2491: color is supported in ironpython
  • PR #2511: trigger default remote_profile_dir when profile_dir is set
  • PR #2294: inputhook_qt4: Use QEventLoop instead of starting up the QCoreApplication
  • PR #2554: Avoid stopping in ipdb until we reach the main script.
  • PR #2561: Fix display of plain text containing multiple carriage returns before line feed
  • PR #2546: use 4 Pythons to build 4 Windows installers
  • PR #2526: Don’t kill paramiko tunnels when receiving ^C
  • PR #2591: Fix for Issue #2584
  • PR #2582: Fix displaying history when output cache is disabled.
  • PR #2574: Fix #2244
  • PR #2638: Fix %paste in Python 3 on Mac
  • PR #2656: Fix irunner tests when $PYTHONSTARTUP is set
  • PR #2663: Fix issue #2660: parsing of help and version arguments
  • PR #2668: pylab_not_importable: Catch all exceptions, not just RuntimeErrors.
  • PR #2662: qtconsole: wrap argument list in tooltip to match width of text body
  • PR #2686: Fix tox.ini
  • PR #2685: Fix pretty print of types when __module__ is not available.
  • PR #2713: Doc bugfix: user_ns is not an attribute of Magic objects.
  • PR #2717: One liner to fix debugger printing stack traces when lines of context are larger than source.
  • PR #2544: Infinite loop when multiple debuggers have been attached.
  • PR #2749: Tell Travis CI to test on Python 3.3 as well
  • PR #2738: Unicode content crashes the pager (console)
  • PR #2769: Allow shutdown when no engines are registered
  • PR #2773: Fixed minor typo causing AttributeError to be thrown.
  • PR #2778: P3K: fix DeprecationWarning under Python 3.x
  • PR #2757: check for complete pyside presence before trying to import
  • PR #2783: Prefilter shouldn’t touch execution_count
  • PR #2796: P3K: fix cookie parsing under Python 3.x (+ duplicate import is removed)
  • PR #2799: Exit code
  • PR #2816: in �it, don’t save “last_call” unless last call succeeded
  • PR #2830: BUG: Opening parenthesis after non-callable raises ValueError
  • PR #2849: utils/data: Use list comprehension for uniq_stable()
  • PR #2859: Correct docstring of ipython.py
  • PR #2863: whatsnew/version0.9.txt: Fix ‘~./ipython’ -> ‘~/.ipython’ typo
  • PR #2852: future pyzmq compatibility
  • PR #2864: Fix %run -t -N TypeError
  • PR #2926: Don’t die if stderr/stdout do not support set_parent() #2925
  • PR #2924: safe_run_module: Silence SystemExit codes 0 and None.
  • PR #2901: Fix inputhook_wx on osx
  • PR #2994: expanduser on %%file targets
  • PR #2831: avoid string version comparisons in external.qt
  • PR #3013: py3 workaround for reload in cythonmagic
  • PR #3008: fix cython module so extension for multiarched python
  • PR #3097: PyQt 4.10: use self._document = self.document()
  • PR #3117: propagate automagic change to shell
  • PR #3118: don’t give up on weird os names

New in IPython 0.10 (Aug 5, 2009)

  • New features:
  • New %paste magic automatically extracts current contents of clipboard and pastes it directly, while correctly handling code that is indented or prepended with >>> or ... python prompt markers. A very useful new feature contributed by Robert Kern.
  • IPython ‘demos’, created with the IPython.demo module, can now be created from files on disk or strings in memory. Other fixes and improvements to the demo system, by Tom Fetherston.
  • Added find_cmd() function to IPython.platutils module, to find commands in a cross-platform manner.
  • Many improvements and fixes to Gaël Varoquaux’s ipythonx, a WX-based lightweight IPython instance that can be easily embedded in other WX applications. These improvements have made it possible to now have an embedded IPython in Mayavi and other tools.
  • MultiengineClient objects now have a benchmark() method.
  • The manual now includes a full set of auto-generated API documents from the code sources, using Sphinx and some of our own support code. We are now using the Numpy Documentation Standard for all docstrings, and we have tried to update as many existing ones as possible to this format.
  • The new IPython.Extensions.ipy_pretty extension by Robert Kern provides configurable pretty-printing.
  • Many improvements to the ipython-wx standalone WX-based IPython application by Laurent Dufréchou. It can optionally run in a thread, and this can be toggled at runtime (allowing the loading of Matplotlib in a running session without ill effects).
  • IPython includes a copy of Steven Bethard’s argparse in the IPython.external package, so we can use it internally and it is also available to any IPython user. By installing it in this manner, we ensure zero conflicts with any system-wide installation you may already have while minimizing external dependencies for new users. In IPython 0.10, We ship argparse version 1.0.
  • An improved and much more robust test suite, that runs groups of tests in separate subprocesses using either Nose or Twisted’s trial runner to ensure proper management of Twisted-using code. The test suite degrades gracefully if optional dependencies are not available, so that the iptest command can be run with only Nose installed and nothing else. We also have more and cleaner test decorators to better select tests depending on runtime conditions, do setup/teardown, etc.
  • The new ipcluster now has a fully working ssh mode that should work on Linux, Unix and OS X. Thanks to Vishal Vatsa for implementing this!
  • The wonderful TextMate editor can now be used with �it on OS X. Thanks to Matt Foster for this patch.
  • The documentation regarding parallel uses of IPython, including MPI and PBS, has been significantly updated and improved.
  • The developer guidelines in the documentation have been updated to explain our workflow using bzr and Launchpad.
  • Fully refactored ipcluster command line program for starting IPython clusters. This new version is a complete rewrite and 1) is fully cross platform (we now use Twisted’s process management), 2) has much improved performance, 3) uses subcommands for different types of clusters, 4) uses argparse for parsing command line options, 5) has better support for starting clusters using mpirun, 6) has experimental support for starting engines using PBS. It can also reuse FURL files, by appropriately passing options to its subcommands. However, this new version of ipcluster should be considered a technology preview. We plan on changing the API in significant ways before it is final.
  • Full description of the security model added to the docs.
  • cd completer: show bookmarks if no other completions are available.
  • sh profile: easy way to give ‘title’ to prompt: assign to variable ‘_prompt_title’.
  • Bug fixes:
  • Fix #368719, removed top-level debian/ directory to make the job of Debian packagers easier.
  • Fix #291143 by including man pages contributed by Stephan Peijnik from the Debian project.
  • Fix #358202, effectively a race condition, by properly synchronizing file creation at cluster startup time.
  • %timeit now handles correctly functions that take a long time to execute even the first time, by not repeating them.
  • Fix #239054, releasing of references after exiting.
  • Fix #341726, thanks to Alexander Clausen.
  • Fix #269966. This long-standing and very difficult bug (which is actually a problem in Python itself) meant long-running sessions would inevitably grow in memory size, often with catastrophic consequences if users had large objects in their scripts. Now, using %run repeatedly should not cause any memory leaks. Special thanks to John Hunter and Sameer D’Costa for their help with this bug.
  • Fix #295371, bug in %history.
  • Improved support for py2exe.
  • Fix #270856: IPython hangs with PyGTK
  • Fix #270998: A magic with no docstring breaks the ‘%magic magic’
  • fix #271684: -c startup commands screw up raw vs. native history
  • Numerous bugs on Windows with the new ipcluster have been fixed.
  • The ipengine and ipcontroller scripts now handle missing furl files more gracefully by giving better error messages.
  • %rehashx: Aliases no longer contain dots. python3.0 binary will create alias python30. Fixes: #259716 “commands with dots in them don’t work”
  • %cpaste: %cpaste -r repeats the last pasted block. The block is assigned to pasted_block even if code raises exception.
  • Bug #274067 ‘The code in get_home_dir is broken for py2exe’ was fixed.
  • Many other small bug fixes not listed here by number (see the bzr log for more info).
  • Backwards incompatible changes:
  • ipykit and related files were unmaintained and have been removed.The IPython.genutils.doctest_reload() does not actually call reload(doctest) anymore, as this was causing many problems with the test suite. It still resets doctest.master to None.While we have not deliberately broken Python 2.4 compatibility, only minor testing was done with Python 2.4, while 2.5 and 2.6 were fully tested. But if you encounter problems with 2.4, please do report them as bugs.The ipcluster now requires a mode argument; for example to start a cluster on the local machine with 4 engines, you must now type: "$ ipcluster local -n 4"
  • The controller now has a -r flag that needs to be used if you want to reuse existing furl files. Otherwise they are deleted (the default).Remove ipy_leo.py. You can use easy_install ipython-extension to get it. (done to decouple it from ipython release cycle)