If you are looking for an IPython version compatible with Python 2.7, please use the IPython 5.x LTS release and refer to its documentation (LTS is the long term support release).

This documentation covers IPython versions 6.0 and higher. Beginning with version 6.0, IPython stopped supporting compatibility with Python versions lower than 3.3 including all versions of Python 2.7.

IPython 7.18¶ IPython 7.18 is a minor release that mostly contains bugfixes. CRLF is now handled by magics my default; solving some issues due to copy pasting on windows. PR #12475

Requiring pexpect >=4.3 as we are Python 3.7+ only and earlier version of pexpect will be incompatible. PR #12510

Minimum jedi version is now 0.16. PR #12488

IPython 7.17¶ IPython 7.17 brings a couple of new improvements to API and a couple of user facing changes to make the terminal experience more user friendly. PR #12407 introduces the ability to pass extra argument to the IPython debugger class; this is to help a new project from kmaork (https://github.com/kmaork/madbg) to feature a fully remote debugger. PR #12410 finally remove support for 3.6, while the codebase is still technically compatible; IPython will not install on Python 3.6. lots of work on the debugger and hidden frames from @impact27 in PR #12437, PR #12445, PR #12460 and in particular PR #12453 which make the debug magic more robust at handling spaces. Biggest API addition is code transformation which is done before code execution; IPython allows a number of hooks to catch non-valid Python syntax (magic, prompt stripping…etc). Transformers are usually called many time; typically: When trying to figure out whether the code is complete and valid (should we insert a new line or execute ?)

During actual code execution pass before giving the code to Python’s exec . This lead to issues when transformer might have had side effects; or do external queries. Starting with IPython 7.17 you can expect your transformer to be called less time. Input transformers are now called only once in the execution path of InteractiveShell , allowing to register transformer that potentially have side effects (note that this is not recommended). Internal methods should_run_async , and run_cell_async now take a recommended optional transformed_cell , and preprocessing_exc_tuple parameters that will become mandatory at some point in the future; that is to say cells need to be explicitly transformed to be valid Python syntax ahead of trying to run them. PR #12440; input_transformers can now also have an attribute has_side_effects set to True , when this attribute is present; this will prevent the transformers from being ran when IPython is trying to guess whether the user input is complete. Note that this may means you will need to explicitly execute in some case where your transformations are now not ran; but will not affect users with no custom extensions. API Changes¶ Change of API and exposed objects automatically detected using frappuccino The following items are new since 7.16.0: + IPython . core . interactiveshell . InteractiveShell . get_local_scope ( self , stack_depth ) The following signatures differ since 7.16.0: - IPython . core . interactiveshell . InteractiveShell . run_cell_async ( self , raw_cell , store_history = False , silent = False , shell_futures = True ) + IPython . core . interactiveshell . InteractiveShell . run_cell_async ( self , raw_cell , store_history = False , silent = False , shell_futures = True , * , transformed_cell = None , preprocessing_exc_tuple = None ) - IPython . core . interactiveshell . InteractiveShell . should_run_async ( self , raw_cell ) + IPython . core . interactiveshell . InteractiveShell . should_run_async ( self , raw_cell , * , transformed_cell = None , preprocessing_exc_tuple = None ) - IPython . terminal . debugger . TerminalPdb . pt_init ( self ) + IPython . terminal . debugger . TerminalPdb . pt_init ( self , pt_session_options = None ) This method was added: + IPython . core . interactiveshell . InteractiveShell . get_local_scope Which is now also present on subclasses: + IPython . terminal . embed . InteractiveShellEmbed . get_local_scope + IPython . terminal . interactiveshell . TerminalInteractiveShell . get_local_scope

IPython 7.16¶ The default traceback mode will now skip frames that are marked with __tracebackhide__ = True and show how many traceback frames have been skipped. This can be toggled by using %xmode with the --show or --hide attribute. It will have no effect on non verbose traceback modes. The ipython debugger also now understands __tracebackhide__ as well and will skip hidden frames when displaying. Movement up and down the stack will skip the hidden frames and will show how many frames were hidden. Internal IPython frames are also now hidden by default. The behavior can be changed with the skip_hidden while in the debugger, command and accepts “yes”, “no”, “true” and “false” case insensitive parameters. Misc Noticeable changes:¶ Exceptions are now (re)raised when running notebooks via the %run , helping to catch issues in workflows and pipelines. PR #12301

Fix inputhook for qt 5.15.0 PR #12355

Fix wx inputhook PR #12375

Add handling for malformed pathext env var (Windows) PR #12367

use $SHELL in system_piped PR #12360 for uniform behavior with ipykernel. Reproducible Build¶ IPython 7.15 reproducible build did not work, so we try again this month PR #12358. API Changes¶ Change of API and exposed objects automatically detected using frappuccino (still in beta): The following items are new and mostly related to understanding __tracebackbhide__ : + IPython . core . debugger . Pdb . do_down ( self , arg ) + IPython . core . debugger . Pdb . do_skip_hidden ( self , arg ) + IPython . core . debugger . Pdb . do_up ( self , arg ) + IPython . core . debugger . Pdb . hidden_frames ( self , stack ) + IPython . core . debugger . Pdb . stop_here ( self , frame ) The following items have been removed: - IPython . core . debugger . Pdb . new_do_down - IPython . core . debugger . Pdb . new_do_up Those were implementation details.

IPython 7.14¶ IPython 7.14 is a minor release that fix a couple of bugs and prepare compatibility with new or future versions of some libraries. Important changes:¶ Fix compatibility with Sphinx 3+ PR #12235

Remove deprecated matplotlib parameter usage, compatibility with matplotlib 3.3+ : 122250 Misc Changes¶ set .py extension when editing current buffer in vi/emacs. PR #12167

support for unicode identifiers in ? / ?? PR #12208

add extra options to the Video Rich objects PR #12212

add pretty-printing to SimpleNamespace PR #12230 IPython.core.debugger.Pdb is now interruptible¶ A KeyboardInterrupt will now interrupt IPython’s extended debugger, in order to make Jupyter able to interrupt it. (PR #12168) Video HTML attributes¶ Add an option to IPython.display.Video to change the attributes of the HTML display of the video (PR #12212) Pending deprecated imports¶ Many object present in IPython.core.display are there for internal use only, and should already been imported from IPython.display by users and external libraries. Trying to import those from IPython.core.display is still possible but will trigger a deprecation warning in later versions of IPython and will become errors in the future. This will simplify compatibility with other Python kernels (like Xeus-Python), and simplify code base.

IPython 7.13¶ IPython 7.13 is the final release of the 7.x branch since master is diverging toward an 8.0. Exiting new features have already been merged in 8.0 and will not be available on the 7.x branch. All the changes below have been backported from the master branch. Fix inability to run PDB when inside an event loop PR #12141

Fix ability to interrupt some processes on windows PR #12137

Fix debugger shortcuts PR #12132

improve tab completion when inside a string by removing irrelevant elements PR #12128

Fix display of filename tab completion when the path is long PR #12122

Many removal of Python 2 specific code path PR #12110

displaying wav files do not require NumPy anymore, and is 5x to 30x faster PR #12113 See the list of all closed issues and pull request on github.

IPython 7.12¶ IPython 7.12 is a minor update that mostly brings code cleanup, removal of longtime deprecated function and a couple update to documentation cleanup as well. Notable changes are the following: Exit non-zero when ipython is given a file path to run that doesn’t exist PR #12074

Test PR on ARM64 with Travis-CI PR #12073

Update CI to work with latest Pytest PR #12086

Add infrastructure to run ipykernel eventloop via trio PR #12097

Support git blame ignore revs PR #12091

Start multi-line __repr__ s on their own line PR #12099

IPython 7.11.1¶ A couple of deprecated functions (no-op) have been reintroduces in py3compat as Cython was still relying on them, and will be removed in a couple of versions.

IPython 7.11¶ IPython 7.11 received a couple of compatibility fixes and code cleanup. A number of function in the py3compat have been removed; a number of types in the IPython code base are now non-ambiguous and now always unicode instead of Union[Unicode,bytes] ; many of the relevant code path have thus been simplified/cleaned and types annotation added. IPython support several verbosity level from exceptions. xmode plain now support chained exceptions. PR #11999 We are starting to remove shell=True in some usages of subprocess. While not directly a security issue (as IPython is made to run arbitrary code anyway) it is not good practice and we’d like to show the example. #12023. This discussion was started by @mschwager thanks to a new auditing tool they are working on with duo-labs (dlint). Work around some bugs in Python 3.9 tokenizer PR #12057 IPython will now print its version after a crash. PR #11986 This is likely the last release from the 7.x series that will see new feature. The master branch will soon accept large code changes and thrilling new features; the 7.x branch will only start to accept critical bug fixes, and update dependencies.

IPython 7.10.2¶ IPython 7.10.2 fix a couple of extra incompatibility between IPython, ipdb, asyncio and Prompt Toolkit 3.

IPython 7.10.1¶ IPython 7.10.1 fix a couple of incompatibilities with Prompt toolkit 3 (please update Prompt toolkit to 3.0.2 at least), and fixes some interaction with headless IPython.

IPython 7.10.0¶ IPython 7.10 is the first double digit minor release in the last decade, and first since the release of IPython 1.0, previous double digit minor release was in August 2009. We’ve been trying to give you regular release on the last Friday of every month for a guaranty of rapid access to bug fixes and new features. Unlike the previous first few releases that have seen only a couple of code changes, 7.10 bring a number of changes, new features and bugfixes. Stop Support for Python 3.5 – Adopt NEP 29¶ IPython has decided to follow the informational NEP 29 which layout a clear policy as to which version of (C)Python and NumPy are supported. We thus dropped support for Python 3.5, and cleaned up a number of code path that were Python-version dependant. If you are on 3.5 or earlier pip should automatically give you the latest compatible version of IPython so you do not need to pin to a given version. Support for Prompt Toolkit 3.0¶ Prompt Toolkit 3.0 was release a week before IPython 7.10 and introduces a few breaking changes. We believe IPython 7.10 should be compatible with both Prompt Toolkit 2.x and 3.x, though it has not been extensively tested with 3.x so please report any issues. Prompt Rendering Performance improvements¶ Pull Request PR #11933 introduced an optimisation in the prompt rendering logic that should decrease the resource usage of IPython when using the _default_ configuration but could potentially introduce a regression of functionalities if you are using a custom prompt. We know assume if you haven’t changed the default keybindings that the prompt will not change during the duration of your input – which is for example not true when using vi insert mode that switches between [ins] and [nor] for the current mode. If you are experiencing any issue let us know. Code autoformatting¶ The IPython terminal can now auto format your code just before entering a new line or executing a command. To do so use the --TerminalInteractiveShell.autoformatter option and set it to 'black' ; if black is installed IPython will use black to format your code when possible. IPython cannot always properly format your code; in particular it will auto formatting with black will only work if: Your code does not contains magics or special python syntax.

There is no code after your cursor. The Black API is also still in motion; so this may not work with all versions of black. It should be possible to register custom formatter, though the API is till in flux. Arbitrary Mimetypes Handing in Terminal (Aka inline images in terminal)¶ When using IPython terminal it is now possible to register function to handle arbitrary mimetypes. While rendering non-text based representation was possible in many jupyter frontend; it was not possible in terminal IPython, as usually terminal are limited to displaying text. As many terminal these days provide escape sequences to display non-text; bringing this loved feature to IPython CLI made a lot of sens. This functionality will not only allow inline images; but allow opening of external program; for example mplayer to “display” sound files. So far only the hooks necessary for this are in place, but no default mime renderers added; so inline images will only be available via extensions. We will progressively enable these features by default in the next few releases, and contribution is welcomed. We welcome any feedback on the API. See Mime Renderer Extensions for more informations. This is originally based on work form in PR #10610 from @stephanh42 started over two years ago, and still a lot need to be done. MISC¶ Completions can define their own ordering PR #11855

Enable Plotting in the same cell than the one that import matplotlib PR #11916

Allow to store and restore multiple variables at once PR #11930 You can see all pull-requests for this release. API Changes¶ Change of API and exposed objects automatically detected using frappuccino (still in beta): The following items are new in IPython 7.10: + IPython . terminal . shortcuts . reformat_text_before_cursor ( buffer , document , shell ) + IPython . terminal . interactiveshell . PTK3 + IPython . terminal . interactiveshell . black_reformat_handler ( text_before_cursor ) + IPython . terminal . prompts . RichPromptDisplayHook . write_format_data ( self , format_dict , md_dict = 'None' ) The following items have been removed in 7.10: - IPython . lib . pretty . DICT_IS_ORDERED The following signatures differ between versions: - IPython . extensions . storemagic . restore_aliases ( ip ) + IPython . extensions . storemagic . restore_aliases ( ip , alias = 'None' ) Special Thanks¶ @stephanh42 who started the work on inline images in terminal 2 years ago

@augustogoulart who spent a lot of time triaging issues and responding to users.

@con-f-use who is my (@Carreau) first sponsor on GitHub, as a reminder if you like IPython, Jupyter and many other library of the SciPy stack you can donate to numfocus.org non profit

IPython 7.9.0¶ IPython 7.9 is a small release with a couple of improvement and bug fixes. Xterm terminal title should be restored on exit PR #11910

special variables _ ,``__``, ___ are not set anymore when cache size is 0 or less. PR #11877

Autoreload should have regained some speed by using a new heuristic logic to find all objects needing reload. This should avoid large objects traversal like pandas dataframes. PR #11876

Get ready for Python 4. PR #11874

%env Magic now has heuristic to hide potentially sensitive values PR #11896 This is a small release despite a number of Pull Request Pending that need to be reviewed/worked on. Many of the core developers have been busy outside of IPython/Jupyter and we thanks all contributor for their patience; we’ll work on these as soon as we have time.

IPython 7.8.0¶ IPython 7.8.0 contain a few bugfix and 2 new APIs: Enable changing the font color for LaTeX rendering PR #11840

and Re-Expose some PDB API (see below) Expose Pdb API¶ Expose the built-in pdb.Pdb API. Pdb constructor arguments are generically exposed, regardless of python version. Newly exposed arguments: skip - Python 3.1+

nosiginnt - Python 3.2+

readrc - Python 3.6+ Try it out: from IPython.terminal.debugger import TerminalPdb pdb = TerminalPdb ( skip = [ "skipthismodule" ]) See PR #11840

IPython 7.7.0¶ IPython 7.7.0 contain multiple bug fixes and documentation updates; Here are a few of the outstanding issue fixed: Fix a bug introduced in 7.6 where the %matplotlib magic would fail on previously acceptable arguments PR #11814.

Fix the manage location on freebsd PR #11808.

Fix error message about aliases after %reset call in ipykernel PR #11806

Fix Duplication completions in emacs PR #11803 We are planning to adopt NEP29 (still currently in draft) which may make this minor version of IPython the last one to support Python 3.5 and will make the code base more aggressive toward removing compatibility with older versions of Python. GitHub now support to give only “Triage” permissions to users; if you’d like to help close stale issues and labels issues please reach to us with your GitHub Username and we’ll add you to the triage team. It is a great way to start contributing and a path toward getting commit rights.

IPython 7.6.1¶ IPython 7.6.1 contain a critical bugfix in the %timeit magic, which would crash on some inputs as a side effect of PR #11716. See PR #11812

IPython 7.6.0¶ IPython 7.6.0 contains a couple of bug fixes and number of small features additions as well as some compatibility with the current development version of Python 3.8. Add a -l option to %psearch to list the available search types. PR #11672

Support PathLike for DisplayObject and Image . PR #11764

Configurability of timeout in the test suite for slow platforms. PR #11756

Accept any casing for matplotlib backend. PR #121748

Properly skip test that requires numpy to be installed PR #11723

More support for Python 3.8 and positional only arguments (pep570) PR #11720

Unicode names for the completion are loaded lazily on first use which should decrease startup time. PR #11693

Autoreload now update the types of reloaded objects; this for example allow pickling of reloaded objects. PR #11644

Fix a bug where %%time magic would suppress cell output. PR #11716 Prepare migration to pytest (instead of nose) for testing¶ Most of the work between 7.5 and 7.6 was to prepare the migration from our testing framework to pytest. Most of the test suite should now work by simply issuing pytest from the root of the repository. The migration to pytest is just at its beginning. Many of our test still rely on IPython-specific plugins for nose using pytest (doctest using IPython syntax is one example of this where test appear as “passing”, while no code has been ran). Many test also need to be updated like yield-test to be properly parametrized tests. Migration to pytest allowed me to discover a number of issues in our test suite; which was hiding a number of subtle issues – or not actually running some of the tests in our test suite – I have thus corrected many of those; like improperly closed resources; or used of deprecated features. I also made use of the pytest --durations=... to find some of our slowest test and speed them up (our test suite can now be up to 10% faster). Pytest as also a variety of plugins and flags which will make the code quality of IPython and the testing experience better. Misc¶ We skipped the release of 7.6 at the end of May, but will attempt to get back on schedule. We are starting to think about making introducing backward incompatible change and start the 8.0 series. Special Thanks to Gabriel (@gpotter2 on GitHub), who among other took care many of the remaining task for 7.4 and 7.5, like updating the website.

IPython 7.5.0¶ IPython 7.5.0 consist mostly of bug-fixes, and documentation updates, with one minor new feature. The Audio display element can now be assigned an element id when displayed in browser. See PR #11670 The major outstanding bug fix correct a change of behavior that was introduce in 7.4.0 where some cell magics would not be able to access or modify global scope when using the @needs_local_scope decorator. This was typically encountered with the %%time and %%timeit magics. See #11659 and PR #11698.

IPython 7.4.0¶ Unicode name completions¶ Previously, we provided completion for a unicode name with its relative symbol. With this, now IPython provides complete suggestions to unicode name symbols. As on the PR, if user types \LAT<tab> , IPython provides a list of possible completions. In this case, it would be something like: 'LATIN CAPITAL LETTER A' , 'LATIN CAPITAL LETTER B' , 'LATIN CAPITAL LETTER C' , 'LATIN CAPITAL LETTER D' , .... This help to type unicode character that do not have short latex aliases, and have long unicode names. for example Ͱ , \GREEK CAPITAL LETTER HETA . This feature was contributed by Luciana Marques PR #11583. Make audio normalization optional¶ Added ‘normalize’ argument to IPython.display.Audio . This argument applies when audio data is given as an array of samples. The default of normalize=True preserves prior behavior of normalizing the audio to the maximum possible range. Setting to False disables normalization. Miscellaneous¶ Fix improper acceptation of return outside of functions. PR #11641.

Fixed PyQt 5.11 backwards incompatibility causing sip import failure. PR #11613.

Fix Bug where type? would crash IPython. PR #1608.

Allow to apply @needs_local_scope to cell magics for convenience. PR #11542.

IPython 7.3.0¶ IPython 7.3.0 bring several bug fixes and small improvements that you will described bellow. The biggest change to this release is the implementation of the %conda and %pip magics, that will attempt to install packages in the current environment. You may still need to restart your interpreter or kernel for the change to be taken into account, but it should simplify installation of packages into remote environment. Installing using pip/conda from the command line is still the prefer method. The %pip magic was already present, but was only printing a warning; now it will actually forward commands to pip. Misc bug fixes and improvements: Compatibility with Python 3.8.

Do not expand shell variable in execution magics, and added the no_var_expand decorator for magic requiring a similar functionality PR #11516

Add %pip and %conda magic PR #11524

Re-initialize posix aliases after a %reset PR #11528

Allow the IPython command line to run *.ipynb files PR #11529

IPython 7.2.0¶ IPython 7.2.0 brings minor bugfixes, improvements, and new configuration options: Fix a bug preventing PySide2 GUI integration from working PR #11464

Run CI on Mac OS ! PR #11471

Fix IPython “Demo” mode. PR #11498

Fix %run magic with path in name PR #11499

Fix: add CWD to sys.path after stdlib PR #11502

Better rendering of signatures, especially long ones. PR #11505

Re-enable jedi by default if it’s installed PR #11506

Add New minimal exception reporting mode (useful for educational purpose). See PR #11509 Added ability to show subclasses when using pinfo and other utilities¶ When using ? / ?? on a class, IPython will now list the first 10 subclasses. Special Thanks to Chris Mentzel of the Moore Foundation for this feature. Chris is one of the people who played a critical role in IPython/Jupyter getting funding. We are grateful for all the help Chris has given us over the years, and we’re now proud to have code contributed by Chris in IPython. OSMagics.cd_force_quiet configuration option¶ You can set this option to force the %cd magic to behave as if -q was passed: In [ 1 ]: cd / / In [ 2 ]: % config OSMagics . cd_force_quiet = True In [ 3 ]: cd / tmp In [ 4 ]: See PR #11491 In vi editing mode, whether the prompt includes the current vi mode can now be configured¶ Set the TerminalInteractiveShell.prompt_includes_vi_mode to a boolean value (default: True) to control this feature. See PR #11492