1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391
|
============
3.x Series
============
IPython 3.2.3
=============
Fixes compatibility with Python 3.4.4.
IPython 3.2.2
=============
Address vulnerabilities when files have maliciously crafted filenames (CVE-2015-6938),
or vulnerability when opening text files with malicious binary content (CVE pending).
Users are **strongly** encouraged to upgrade immediately.
There are also a few small unicode and nbconvert-related fixes.
IPython 3.2.1
=============
IPython 3.2.1 is a small bugfix release, primarily for cross-site security fixes in the notebook.
Users are **strongly** encouraged to upgrade immediately.
There are also a few small unicode and nbconvert-related fixes.
See :ref:`issues_list_3` for details.
IPython 3.2
===========
IPython 3.2 contains important security fixes. Users are **strongly** encouraged to upgrade immediately.
Highlights:
- Address cross-site scripting vulnerabilities CVE-2015-4706, CVE-2015-4707
- A security improvement that set the secure attribute to login cookie to prevent them to be sent over http
- Revert the face color of matplotlib axes in the inline backend to not be transparent.
- Enable mathjax safe mode by default
- Fix XSS vulnerability in JSON error messages
- Various widget-related fixes
See :ref:`issues_list_3` for details.
IPython 3.1
===========
Released April 3, 2015
The first 3.x bugfix release, with 33 contributors and 344 commits.
This primarily includes bugfixes to notebook layout and focus problems.
Highlights:
- Various focus jumping and scrolling fixes in the notebook.
- Various message ordering and widget fixes in the notebook.
- Images in markdown and output are confined to the notebook width.
An `.unconfined` CSS class is added to disable this behavior per-image.
The resize handle on output images is removed.
- Improved ordering of tooltip content for Python functions, putting the signature at the top.
- Fix UnicodeErrors when displaying some objects with unicode reprs on Python 2.
- Set the kernel's working directory to the notebook directory when running ``nbconvert --execute``,
so that behavior matches the live notebook.
- Allow setting custom SSL options for the tornado server with ``NotebookApp.ssl_options``,
and protect against POODLE with default settings by disabling SSLv3.
- Fix memory leak in the IPython.parallel Controller on Python 3.
See :ref:`issues_list_3` for details.
Release 3.0
===========
Released February 27, 2015
This is a really big release. Over 150 contributors, and almost 6000 commits in a bit under a year.
Support for languages other than Python is greatly improved,
notebook UI has been significantly redesigned,
and a lot of improvement has happened in the experimental interactive widgets.
The message protocol and document format have both been updated,
while maintaining better compatibility with previous versions than prior updates.
The notebook webapp now enables editing of any text file, and even
a web-based terminal (on Unix platforms).
3.x will be the last monolithic release of IPython,
as the next release cycle will see the growing project split into its Python-specific and language-agnostic components.
Language-agnostic projects (notebook, qtconsole, etc.) will move under the umbrella of the new Project Jupyter name,
while Python-specific projects (interactive Python shell, Python kernel, IPython.parallel)
will remain under IPython, and be split into a few smaller packages.
To reflect this, IPython is in a bit of a transition state.
The logo on the notebook is now the Jupyter logo.
When installing kernels system-wide, they go in a `jupyter` directory.
We are going to do our best to ease this transition for users and developers.
Big changes are ahead.
Using different kernels
-----------------------
.. image:: ../_images/kernel_selector_screenshot.png
:alt: Screenshot of 'new' dropdown showing different kernels
:align: center
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::
ipython qtconsole --kernel bash
ipython console --kernel bash
# To list available kernels
ipython kernelspec list
Kernel authors should see :ref:`kernelspecs` for how to register their kernels
with IPython so that these mechanisms work.
Typing unicode identifiers
--------------------------
.. image:: /_images/unicode_completion.png
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.
For information about migrating widget notebooks and custom widgets to 3.0 refer
to the :doc:`widget migration guide<version3_widget_migration>`.
Other new features
------------------
* :class:`~.TextWidget` and :class:`~.TextareaWidget` objects now include a
``placeholder`` attribute, for displaying placeholder text before the
user has typed anything.
* The :magic:`load` magic can now find the source for objects in the user namespace.
To enable searching the namespace, use the ``-n`` option.
.. sourcecode:: ipython
In [1]: %load -n my_module.some_function
* :class:`~.DirectView` objects have a new :meth:`~.DirectView.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.
__ https://pypi.python.org/pypi/cloud
* Added a .ipynb exporter to nbconvert. It can be used by passing `--to notebook`
as a commandline argument to nbconvert.
* New nbconvert preprocessor called :class:`~.ClearOutputPreprocessor`. This
clears the output from IPython notebooks.
* New preprocessor for nbconvert that executes all the code cells in a notebook.
To run a notebook and save its output in a new notebook::
ipython nbconvert InputNotebook --ExecutePreprocessor.enabled=True --to notebook --output Executed
* 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 :magic:`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 :doc:`/config/eventloops` for details. As part
of this, the direct ``enable_*`` and ``disable_*`` functions for various GUIs
in :mod:`IPython.lib.inputhook` have been deprecated in favour of
:meth:`~.InputHookManager.enable_gui` and :meth:`~.InputHookManager.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 :func:`~IPython.html.widgets.interaction.interact_manual` has been
added which behaves similarly to :func:`~IPython.html.widgets.interaction.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 :ref:`kernel spec <kernelspecs>`.
* IPython can now be configured systemwide, with files in :file:`/etc/ipython`
or :file:`/usr/local/etc/ipython` on Unix systems,
or :file:`{%PROGRAMDATA%}\\ipython` on Windows.
* Added support for configurable user-supplied `Jinja
<http://jinja.pocoo.org/>`_ 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.
For example, to replace the notebook's built-in ``error.html`` with your own,
create a directory like ``/home/my_templates`` and put your override template
at ``/home/my_templates/error.html``. To start the notebook with your custom
error page enabled, you would run::
ipython notebook '--extra_template_paths=["/home/my_templates/"]'
It's also possible to override a template while also `inheriting
<http://jinja.pocoo.org/docs/dev/templates/#template-inheritance>`_ 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. For example, to add additional CSS to the
built-in ``error.html``, you might create an override that looks like::
{% extends "templates/error.html" %}
{% block stylesheet %}
{{super()}}
<style type="text/css">
/* My Awesome CSS */
</style>
{% endblock %}
* 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.
Example code for persisting your widget state to session data::
%%javascript
require(['widgets/js/manager'], function(manager) {
manager.WidgetManager.set_state_callbacks(function() { // Load
return JSON.parse(sessionStorage.widgets_state || '{}');
}, function(state) { // Save
sessionStorage.widgets_state = JSON.stringify(state);
});
});
* Enhanced support for :magic:`env` magic. As before, :magic:`env` with no
arguments displays all environment variables and values. Additionally,
:magic:`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 :ref:`message protocol <messaging>` 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 :func:`IPython.nbformat.read` and :func:`~IPython.nbformat.write`
to read and write notebook files
instead of the deprecated :mod:`IPython.nbformat.current` APIs.
You can downgrade a notebook to v3 via ``nbconvert``::
ipython nbconvert --to notebook --nbformat 3 <notebook>
which will create :file:`notebook.v3.ipynb`, a copy of the notebook in v3 format.
* :func:`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: :func:`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 :samp:`ipython nbconvert --to python {notebook}` instead.
* The ``rmagic`` extension is deprecated, as it is now part of rpy2. See
:mod:`rpy2.ipython.rmagic`.
* :meth:`~.KernelManager.start_kernel` and :meth:`~.KernelManager.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/<kernel-id>/channels` instead of separate
`/kernels/<kernel-id>/{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.::
c.NotebookApp.tornado_settings = {
'headers': {
'Content-Security-Policy': "frame-ancestors 'self'"
}
}
Example policies::
Content-Security-Policy: default-src 'self' https://*.jupyter.org
Matches embeddings on any subdomain of jupyter.org, so long as they are served
over SSL.
There is a `report-uri <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/report-uri>`_ endpoint available for logging CSP violations, located at
``/api/security/csp-report``. To use it, set ``report-uri`` as part of the CSP::
c.NotebookApp.tornado_settings = {
'headers': {
'Content-Security-Policy': "frame-ancestors 'self'; report-uri /api/security/csp-report"
}
}
It simply provides the CSP report as a warning in IPython's logs. The default
CSP sets this report-uri relative to the ``base_url`` (not shown above).
For a more thorough and accurate guide on Content Security Policies, check out
`MDN's Using Content Security Policy <https://developer.mozilla.org/en-US/docs/Web/Security/CSP/Using_Content_Security_Policy>`_ for more examples.
|