|
@@
-1,221
+1,277
|
|
1
|
1
|
=====================
|
|
2
|
2
|
Development version
|
|
3
|
3
|
=====================
|
|
4
|
4
|
|
|
5
|
5
|
This document describes in-flight development work.
|
|
6
|
6
|
|
|
7
|
7
|
.. warning::
|
|
8
|
8
|
|
|
9
|
9
|
Please do not edit this file by hand (doing so will likely cause merge
|
|
10
|
10
|
conflicts for other Pull Requests). Instead, create a new file in the
|
|
11
|
11
|
`docs/source/whatsnew/pr` folder
|
|
12
|
12
|
|
|
13
|
13
|
Using different kernels
|
|
14
|
14
|
-----------------------
|
|
15
|
15
|
|
|
16
|
16
|
.. image:: ../_images/kernel_selector_screenshot.png
|
|
17
|
17
|
:alt: Screenshot of notebook kernel selection dropdown menu
|
|
18
|
18
|
:align: center
|
|
19
|
19
|
|
|
20
|
20
|
You can now choose a kernel for a notebook within the user interface, rather
|
|
21
|
21
|
than starting up a separate notebook server for each kernel you want to use. The
|
|
22
|
22
|
syntax highlighting adapts to match the language you're working in.
|
|
23
|
23
|
|
|
24
|
24
|
Information about the kernel is stored in the notebook file, so when you open a
|
|
25
|
25
|
notebook, it will automatically start the correct kernel.
|
|
26
|
26
|
|
|
27
|
27
|
It is also easier to use the Qt console and the terminal console with other
|
|
28
|
28
|
kernels, using the --kernel flag::
|
|
29
|
29
|
|
|
30
|
30
|
ipython qtconsole --kernel bash
|
|
31
|
31
|
ipython console --kernel bash
|
|
32
|
32
|
|
|
33
|
33
|
# To list available kernels
|
|
34
|
34
|
ipython kernelspec list
|
|
35
|
35
|
|
|
36
|
36
|
Kernel authors should see :ref:`kernelspecs` for how to register their kernels
|
|
37
|
37
|
with IPython so that these mechanisms work.
|
|
38
|
38
|
|
|
39
|
39
|
Typing unicode identifiers
|
|
40
|
40
|
--------------------------
|
|
41
|
41
|
|
|
42
|
42
|
.. image:: /_images/unicode_completion.png
|
|
43
|
43
|
|
|
44
|
44
|
Complex expressions can be much cleaner when written with a wider choice of
|
|
45
|
45
|
characters. Python 3 allows unicode identifiers, and IPython 3 makes it easier
|
|
46
|
46
|
to type those, using a feature from Julia. Type a backslash followed by a LaTeX
|
|
47
|
47
|
style short name, such as ``\alpha``. Press tab, and it will turn into α.
|
|
48
|
48
|
|
|
49
|
49
|
Other new features
|
|
50
|
50
|
------------------
|
|
51
|
51
|
|
|
52
|
52
|
* :class:`~.TextWidget` and :class:`~.TextareaWidget` objects now include a
|
|
53
|
53
|
``placeholder`` attribute, for displaying placeholder text before the
|
|
54
|
54
|
user has typed anything.
|
|
55
|
55
|
|
|
56
|
56
|
* The :magic:`load` magic can now find the source for objects in the user namespace.
|
|
57
|
57
|
To enable searching the namespace, use the ``-n`` option.
|
|
58
|
58
|
|
|
59
|
59
|
.. sourcecode:: ipython
|
|
60
|
60
|
|
|
61
|
61
|
In [1]: %load -n my_module.some_function
|
|
62
|
62
|
|
|
63
|
63
|
* :class:`~.DirectView` objects have a new :meth:`~.DirectView.use_cloudpickle`
|
|
64
|
64
|
method, which works like ``view.use_dill()``, but causes the ``cloudpickle``
|
|
65
|
65
|
module from PiCloud's `cloud`__ library to be used rather than dill or the
|
|
66
|
66
|
builtin pickle module.
|
|
67
|
67
|
|
|
68
|
68
|
__ https://pypi.python.org/pypi/cloud
|
|
69
|
69
|
|
|
70
|
70
|
* Added a .ipynb exporter to nbconvert. It can be used by passing `--to notebook`
|
|
71
|
71
|
as a commandline argument to nbconvert.
|
|
72
|
72
|
|
|
73
|
73
|
* New nbconvert preprocessor called :class:`~.ClearOutputPreprocessor`. This
|
|
74
|
74
|
clears the output from IPython notebooks.
|
|
75
|
75
|
|
|
76
|
76
|
* New preprocessor for nbconvert that executes all the code cells in a notebook.
|
|
77
|
77
|
To run a notebook and save its output in a new notebook::
|
|
78
|
78
|
|
|
79
|
79
|
ipython nbconvert InputNotebook --ExecutePreprocessor.enabled=True --to notebook --output Executed
|
|
80
|
80
|
|
|
81
|
81
|
* Consecutive stream (stdout/stderr) output is merged into a single output
|
|
82
|
82
|
in the notebook document.
|
|
83
|
83
|
Previously, all output messages were preserved as separate output fields in the JSON.
|
|
84
|
84
|
Now, the same merge is applied to the stored output as the displayed output,
|
|
85
|
85
|
improving document load time for notebooks with many small outputs.
|
|
86
|
86
|
|
|
87
|
87
|
* ``NotebookApp.webapp_settings`` is deprecated and replaced with
|
|
88
|
88
|
the more informatively named ``NotebookApp.tornado_settings``.
|
|
89
|
89
|
|
|
90
|
90
|
* Using :magic:`timeit` prints warnings if there is atleast a 4x difference in timings
|
|
91
|
91
|
between the slowest and fastest runs, since this might meant that the multiple
|
|
92
|
92
|
runs are not independent of one another.
|
|
93
|
93
|
|
|
94
|
94
|
* It's now possible to provide mechanisms to integrate IPython with other event
|
|
95
|
95
|
loops, in addition to the ones we already support. This lets you run GUI code
|
|
96
|
96
|
in IPython with an interactive prompt, and to embed the IPython
|
|
97
|
97
|
kernel in GUI applications. See :doc:`/config/eventloops` for details. As part
|
|
98
|
98
|
of this, the direct ``enable_*`` and ``disable_*`` functions for various GUIs
|
|
99
|
99
|
in :mod:`IPython.lib.inputhook` have been deprecated in favour of
|
|
100
|
100
|
:meth:`~.InputHookManager.enable_gui` and :meth:`~.InputHookManager.disable_gui`.
|
|
101
|
101
|
|
|
102
|
102
|
* 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.
|
|
103
|
103
|
|
|
104
|
104
|
* The function :func:`~IPython.html.widgets.interaction.interact_manual` has been
|
|
105
|
105
|
added which behaves similarly to :func:`~IPython.html.widgets.interaction.interact`,
|
|
106
|
106
|
but adds a button to explicitly run the interacted-with function, rather than
|
|
107
|
107
|
doing it automatically for every change of the parameter widgets. This should
|
|
108
|
108
|
be useful for long-running functions.
|
|
109
|
109
|
|
|
110
|
110
|
* 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.
|
|
111
|
111
|
|
|
112
|
112
|
* The Notebook application now offers integrated terminals on Unix platforms,
|
|
113
|
113
|
intended for when it is used on a remote server. To enable these, install
|
|
114
|
114
|
the ``terminado`` Python package.
|
|
115
|
115
|
|
|
116
|
116
|
* Setting the default highlighting language for nbconvert with the config option
|
|
117
|
117
|
``NbConvertBase.default_language`` is deprecated. Nbconvert now respects
|
|
118
|
118
|
metadata stored in the :ref:`kernel spec <kernelspecs>`.
|
|
119
|
119
|
|
|
120
|
120
|
* IPython can now be configured systemwide, with files in :file:`/etc/ipython`
|
|
121
|
121
|
or :file:`/usr/local/etc/ipython` on Unix systems,
|
|
122
|
122
|
or :file:`{%PROGRAMDATA%}\\ipython` on Windows.
|
|
123
|
123
|
|
|
|
124
|
* Added support for configurable user-supplied `Jinja
|
|
|
125
|
<http://jinja.pocoo.org/>`_ HTML templates for the notebook. Paths to
|
|
|
126
|
directories containing template files can be specified via
|
|
|
127
|
``NotebookApp.extra_template_paths``. User-supplied template directories
|
|
|
128
|
searched first by the notebook, making it possible to replace existing
|
|
|
129
|
templates with your own files.
|
|
|
130
|
|
|
|
131
|
For example, to replace the notebook's built-in ``error.html`` with your own,
|
|
|
132
|
create a directory like ``/home/my_templates`` and put your override template
|
|
|
133
|
at ``/home/my_templates/error.html``. To start the notebook with your custom
|
|
|
134
|
error page enabled, you would run::
|
|
|
135
|
|
|
|
136
|
ipython notebook '--extra_template_paths=["/home/my_templates/"]'
|
|
|
137
|
|
|
|
138
|
It's also possible to override a template while also `inheriting
|
|
|
139
|
<http://jinja.pocoo.org/docs/dev/templates/#template-inheritance>`_ from that
|
|
|
140
|
template, by prepending ``templates/`` to the ``{% extends %}`` target of
|
|
|
141
|
your child template. This is useful when you only want to override a
|
|
|
142
|
specific block of a template. For example, to add additional CSS to the
|
|
|
143
|
built-in ``error.html``, you might create an override that looks like::
|
|
|
144
|
|
|
|
145
|
{% extends "templates/error.html" %}
|
|
|
146
|
|
|
|
147
|
{% block stylesheet %}
|
|
|
148
|
{{super()}}
|
|
|
149
|
<style type="text/css">
|
|
|
150
|
/* My Awesome CSS */
|
|
|
151
|
</style>
|
|
|
152
|
{% endblock %}
|
|
|
153
|
|
|
|
154
|
* Added a widget persistence API. This allows you to persist your notebooks interactive widgets.
|
|
|
155
|
Two levels of control are provided:
|
|
|
156
|
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.
|
|
|
157
|
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.
|
|
|
158
|
|
|
|
159
|
Example code for persisting your widget state to session data::
|
|
|
160
|
|
|
|
161
|
%%javascript
|
|
|
162
|
require(['widgets/js/manager'], function(manager) {
|
|
|
163
|
manager.WidgetManager.set_state_callbacks(function() { // Load
|
|
|
164
|
return JSON.parse(sessionStorage.widgets_state || '{}');
|
|
|
165
|
}, function(state) { // Save
|
|
|
166
|
sessionStorage.widgets_state = JSON.stringify(state);
|
|
|
167
|
});
|
|
|
168
|
});
|
|
|
169
|
|
|
|
170
|
* Enhanced support for :magic:`env` magic. As before, :magic:`env` with no
|
|
|
171
|
arguments displays all environment variables and values. Additionally,
|
|
|
172
|
:magic:`env` can be used to get or set individual environment variables. To
|
|
|
173
|
display an individual value, use the `%env var` syntax. To set a value, use
|
|
|
174
|
`env var val` or `env var=val`. Python value expansion using `$` works as usual.
|
|
|
175
|
|
|
124
|
176
|
.. DO NOT EDIT THIS LINE BEFORE RELEASE. FEATURE INSERTION POINT.
|
|
125
|
177
|
|
|
126
|
178
|
|
|
127
|
179
|
Backwards incompatible changes
|
|
128
|
180
|
------------------------------
|
|
129
|
181
|
|
|
130
|
182
|
* :func:`IPython.core.oinspect.getsource` call specification has changed:
|
|
131
|
183
|
|
|
132
|
184
|
* `oname` keyword argument has been added for property source formatting
|
|
133
|
185
|
* `is_binary` keyword argument has been dropped, passing ``True`` had
|
|
134
|
186
|
previously short-circuited the function to return ``None`` unconditionally
|
|
135
|
187
|
|
|
136
|
188
|
* Removed the octavemagic extension: it is now available as ``oct2py.ipython``.
|
|
137
|
189
|
|
|
138
|
190
|
* Creating PDFs with LaTeX no longer uses a post processor.
|
|
139
|
191
|
Use `nbconvert --to pdf` instead of `nbconvert --to latex --post pdf`.
|
|
140
|
192
|
|
|
141
|
193
|
* Used https://github.com/jdfreder/bootstrap2to3 to migrate the Notebook to Bootstrap 3.
|
|
142
|
194
|
|
|
143
|
195
|
Additional changes:
|
|
144
|
196
|
|
|
145
|
197
|
- Set `.tab-content .row` `0px;` left and right margin (bootstrap default is `-15px;`)
|
|
146
|
198
|
- Removed `height: @btn_mini_height;` from `.list_header>div, .list_item>div` in `tree.less`
|
|
147
|
199
|
- Set `#header` div `margin-bottom: 0px;`
|
|
148
|
200
|
- Set `#menus` to `float: left;`
|
|
149
|
201
|
- Set `#maintoolbar .navbar-text` to `float: none;`
|
|
150
|
202
|
- Added no-padding convienence class.
|
|
151
|
203
|
- Set border of #maintoolbar to 0px
|
|
152
|
204
|
|
|
153
|
205
|
* Accessing the `container` DOM object when displaying javascript has been
|
|
154
|
206
|
deprecated in IPython 2.0 in favor of accessing `element`. Starting with
|
|
155
|
207
|
IPython 3.0 trying to access `container` will raise an error in browser
|
|
156
|
208
|
javascript console.
|
|
157
|
209
|
|
|
158
|
210
|
* ``IPython.utils.py3compat.open`` was removed: :func:`io.open` provides all
|
|
159
|
211
|
the same functionality.
|
|
160
|
212
|
|
|
161
|
213
|
* The NotebookManager and ``/api/notebooks`` service has been replaced by
|
|
162
|
214
|
a more generic ContentsManager and ``/api/contents`` service,
|
|
163
|
215
|
which supports all kinds of files.
|
|
164
|
216
|
* The Dashboard now lists all files, not just notebooks and directories.
|
|
165
|
217
|
* The ``--script`` hook for saving notebooks to Python scripts is removed,
|
|
166
|
218
|
use :samp:`ipython nbconvert --to python {notebook}` instead.
|
|
167
|
219
|
|
|
168
|
220
|
* The ``rmagic`` extension is deprecated, as it is now part of rpy2. See
|
|
169
|
221
|
:mod:`rpy2.ipython.rmagic`.
|
|
170
|
222
|
|
|
171
|
223
|
* :meth:`~.KernelManager.start_kernel` and :meth:`~.KernelManager.format_kernel_cmd`
|
|
172
|
224
|
no longer accept a ``executable`` parameter. Use the kernelspec machinery instead.
|
|
173
|
225
|
|
|
174
|
226
|
* The widget classes have been renamed from `*Widget` to `*`. The old names are
|
|
175
|
227
|
still functional, but are deprecated. i.e. `IntSliderWidget` has been renamed
|
|
176
|
228
|
to `IntSlider`.
|
|
177
|
229
|
* The ContainerWidget was renamed to Box and no longer defaults as a flexible
|
|
178
|
230
|
box in the web browser. A new FlexBox widget was added, which allows you to
|
|
179
|
231
|
use the flexible box model.
|
|
180
|
232
|
|
|
|
233
|
* The notebook now uses a single websocket at `/kernels/<kernel-id>/channels` instead of separate
|
|
|
234
|
`/kernels/<kernel-id>/{shell|iopub|stdin}` channels. Messages on each channel are identified by a
|
|
|
235
|
`channel` key in the message dict, for both send and recv.
|
|
|
236
|
|
|
181
|
237
|
.. DO NOT EDIT THIS LINE BEFORE RELEASE. INCOMPAT INSERTION POINT.
|
|
182
|
238
|
|
|
183
|
239
|
Content Security Policy
|
|
184
|
240
|
```````````````````````
|
|
185
|
241
|
|
|
186
|
242
|
The Content Security Policy is a web standard for adding a layer of security to
|
|
187
|
243
|
detect and mitigate certain classes of attacks, including Cross Site Scripting
|
|
188
|
244
|
(XSS) and data injection attacks. This was introduced into the notebook to
|
|
189
|
245
|
ensure that the IPython Notebook and its APIs (by default) can only be embedded
|
|
190
|
246
|
in an iframe on the same origin.
|
|
191
|
247
|
|
|
192
|
248
|
Override ``headers['Content-Security-Policy']`` within your notebook
|
|
193
|
249
|
configuration to extend for alternate domains and security settings.::
|
|
194
|
250
|
|
|
195
|
251
|
c.NotebookApp.tornado_settings = {
|
|
196
|
252
|
'headers': {
|
|
197
|
253
|
'Content-Security-Policy': "frame-ancestors 'self'"
|
|
198
|
254
|
}
|
|
199
|
255
|
}
|
|
200
|
256
|
|
|
201
|
257
|
Example policies::
|
|
202
|
258
|
|
|
203
|
259
|
Content-Security-Policy: default-src 'self' https://*.jupyter.org
|
|
204
|
260
|
|
|
205
|
261
|
Matches embeddings on any subdomain of jupyter.org, so long as they are served
|
|
206
|
262
|
over SSL.
|
|
207
|
263
|
|
|
208
|
264
|
There is a `report-uri <https://developer.mozilla.org/en-US/docs/Web/Security/CSP/CSP_policy_directives#report-uri>`_ endpoint available for logging CSP violations, located at
|
|
209
|
265
|
``/api/security/csp-report``. To use it, set ``report-uri`` as part of the CSP::
|
|
210
|
266
|
|
|
211
|
267
|
c.NotebookApp.tornado_settings = {
|
|
212
|
268
|
'headers': {
|
|
213
|
269
|
'Content-Security-Policy': "frame-ancestors 'self'; report-uri /api/security/csp-report"
|
|
214
|
270
|
}
|
|
215
|
271
|
}
|
|
216
|
272
|
|
|
217
|
273
|
It simply provides the CSP report as a warning in IPython's logs. The default
|
|
218
|
274
|
CSP sets this report-uri relative to the ``base_url`` (not shown above).
|
|
219
|
275
|
|
|
220
|
276
|
For a more thorough and accurate guide on Content Security Policies, check out
|
|
221
|
277
|
`MDN's Using Content Security Policy <https://developer.mozilla.org/en-US/docs/Web/Security/CSP/Using_Content_Security_Policy>`_ for more examples.
|