##// END OF EJS Templates
update whatsnew with some 0.11 developments
MinRK -
Show More
@@ -1,239 +1,277 b''
1 ================================================
1 ================================================
2 Development version
2 Development version
3 ================================================
3 ================================================
4
4
5 The changes listed here are a brief summary of the substantial work on IPython
5 The changes listed here are a brief summary of the substantial work on IPython
6 since the 0.10.x release series. For more details, please consult the actual
6 since the 0.10.x release series. For more details, please consult the actual
7 source.
7 source.
8
8
9 Main `ipython` branch
9 Main `ipython` branch
10 =====================
10 =====================
11
11
12 Refactoring
12 Refactoring
13 -----------
13 -----------
14
14
15 As of the 0.11 version of IPython, a signifiant portion of the core has been
15 As of the 0.11 version of IPython, a signifiant portion of the core has been
16 refactored. This refactoring is founded on a number of new abstractions.
16 refactored. This refactoring is founded on a number of new abstractions.
17 The main new classes that implement these abstractions are:
17 The main new classes that implement these abstractions are:
18
18
19 * :class:`IPython.utils.traitlets.HasTraitlets`.
19 * :class:`IPython.utils.traitlets.HasTraitlets`.
20 * :class:`IPython.core.component.Component`.
20 * :class:`IPython.config.configurable.Configurable`.
21 * :class:`IPython.core.application.Application`.
21 * :class:`IPython.config.application.Application`.
22 * :class:`IPython.config.loader.ConfigLoader`.
22 * :class:`IPython.config.loader.ConfigLoader`.
23 * :class:`IPython.config.loader.Config`
23 * :class:`IPython.config.loader.Config`
24
24
25 We are still in the process of writing developer focused documentation about
25 We are still in the process of writing developer focused documentation about
26 these classes, but for now our :ref:`configuration documentation
26 these classes, but for now our :ref:`configuration documentation
27 <config_overview>` contains a high level overview of the concepts that these
27 <config_overview>` contains a high level overview of the concepts that these
28 classes express.
28 classes express.
29
29
30 The biggest user-visible change is likely the move to using the config system to
31 determine the command-line arguments for IPython applications. The benefit of
32 this is that *all* configurable values in IPython are exposed on the
33 command-line, but the syntax for specifying values has changed. The gist is that
34 assigning values is pure Python assignment, so there is always an '=', and never
35 a leading '-', nor a space separating key from value. Flags exist, to set
36 multiple values or boolean flags, and these are always prefixed with '--', and
37 never take arguments.
38
30 ZMQ architecture
39 ZMQ architecture
31 ----------------
40 ----------------
32
41
33 There is a new GUI framework for IPython, based on a client-server model in
42 There is a new GUI framework for IPython, based on a client-server model in
34 which multiple clients can communicate with one IPython kernel, using the
43 which multiple clients can communicate with one IPython kernel, using the
35 ZeroMQ messaging framework. There is already a Qt console client, which can
44 ZeroMQ messaging framework. There is already a Qt console client, which can
36 be started by calling ``ipython qtconsole``. The protocol is :ref:`documented
45 be started by calling ``ipython qtconsole``. The protocol is :ref:`documented
37 <messaging>`.
46 <messaging>`.
38
47
39 The parallel computing framework has also been rewritten using ZMQ. The
48 The parallel computing framework has also been rewritten using ZMQ. The
40 protocol is described :ref:`here <parallel_messages>`, and the code is in the
49 protocol is described :ref:`here <parallel_messages>`, and the code is in the
41 new :mod:`IPython.parallel` module.
50 new :mod:`IPython.parallel` module.
42
51
43 New features
52 New features
44 ------------
53 ------------
45
54
55 * Added ``Bytes`` traitlet, removing ``Str``. All 'string' traitlets should
56 either be ``Unicode`` if a real string, or ``Bytes`` if a C-string. This
57 removes ambiguity and helps the Python 3 transition.
58
59 * New magic ``%loadpy`` loads a python file from disk or web URL into
60 the current input buffer.
61
62 * New magic ``%pastebin`` for sharing code via the 'Lodge it' pastebin.
63
64 * New magic ``%precision`` for controlling float and numpy pretty printing.
65
66 * IPython applications initiate logging, so any object can gain access to
67 a the logger of the currently running Application with:
68
69 .. sourcecode:: python
70
71 from IPython.config.application import Application
72 logger = Application.instance().log
73
46 * You can now get help on an object halfway through typing a command. For
74 * You can now get help on an object halfway through typing a command. For
47 instance, typing ``a = zip?`` shows the details of :func:`zip`. It also
75 instance, typing ``a = zip?`` shows the details of :func:`zip`. It also
48 leaves the command at the next prompt so you can carry on with it.
76 leaves the command at the next prompt so you can carry on with it.
49
77
50 * The input history is now written to an SQLite database. The API for
78 * The input history is now written to an SQLite database. The API for
51 retrieving items from the history has also been redesigned.
79 retrieving items from the history has also been redesigned.
52
80
53 * The :mod:`IPython.extensions.pretty` extension has been moved out of
81 * The :mod:`IPython.extensions.pretty` extension has been moved out of
54 quarantine and fully updated to the new extension API.
82 quarantine and fully updated to the new extension API.
55
83
56 * New magics for loading/unloading/reloading extensions have been added:
84 * New magics for loading/unloading/reloading extensions have been added:
57 ``%load_ext``, ``%unload_ext`` and ``%reload_ext``.
85 ``%load_ext``, ``%unload_ext`` and ``%reload_ext``.
58
86
59 * The configuration system and configuration files are brand new. See the
87 * The configuration system and configuration files are brand new. See the
60 configuration system :ref:`documentation <config_index>` for more details.
88 configuration system :ref:`documentation <config_index>` for more details.
61
89
62 * The :class:`~IPython.core.iplib.InteractiveShell` class is now a
90 * The :class:`~IPython.core.interactiveshell.InteractiveShell` class is now a
63 :class:`~IPython.core.component.Component` subclass and has traitlets that
91 :class:`~IPython.config.configurable.Configurable` subclass and has traitlets that
64 determine the defaults and runtime environment. The ``__init__`` method has
92 determine the defaults and runtime environment. The ``__init__`` method has
65 also been refactored so this class can be instantiated and run without the
93 also been refactored so this class can be instantiated and run without the
66 old :mod:`ipmaker` module.
94 old :mod:`ipmaker` module.
67
95
68 * The methods of :class:`~IPython.core.iplib.InteractiveShell` have
96 * The methods of :class:`~IPython.core.interactiveshell.InteractiveShell` have
69 been organized into sections to make it easier to turn more sections
97 been organized into sections to make it easier to turn more sections
70 of functionality into components.
98 of functionality into components.
71
99
72 * The embedded shell has been refactored into a truly standalone subclass of
100 * The embedded shell has been refactored into a truly standalone subclass of
73 :class:`InteractiveShell` called :class:`InteractiveShellEmbed`. All
101 :class:`InteractiveShell` called :class:`InteractiveShellEmbed`. All
74 embedding logic has been taken out of the base class and put into the
102 embedding logic has been taken out of the base class and put into the
75 embedded subclass.
103 embedded subclass.
76
104
77 * I have created methods of :class:`~IPython.core.iplib.InteractiveShell` to
105 * Added methods of :class:`~IPython.core.interactiveshell.InteractiveShell` to
78 help it cleanup after itself. The :meth:`cleanup` method controls this. We
106 help it cleanup after itself. The :meth:`cleanup` method controls this. We
79 couldn't do this in :meth:`__del__` because we have cycles in our object
107 couldn't do this in :meth:`__del__` because we have cycles in our object
80 graph that prevent it from being called.
108 graph that prevent it from being called.
81
109
82 * Created a new module :mod:`IPython.utils.importstring` for resolving
110 * Created a new module :mod:`IPython.utils.importstring` for resolving
83 strings like ``foo.bar.Bar`` to the actual class.
111 strings like ``foo.bar.Bar`` to the actual class.
84
112
85 * Completely refactored the :mod:`IPython.core.prefilter` module into
113 * Completely refactored the :mod:`IPython.core.prefilter` module into
86 :class:`~IPython.core.component.Component` subclasses. Added a new layer
114 :class:`~IPython.config.configurable.Configurable` subclasses. Added a new layer
87 into the prefilter system, called "transformations" that all new prefilter
115 into the prefilter system, called "transformations" that all new prefilter
88 logic should use (rather than the older "checker/handler" approach).
116 logic should use (rather than the older "checker/handler" approach).
89
117
90 * Aliases are now components (:mod:`IPython.core.alias`).
118 * Aliases are now components (:mod:`IPython.core.alias`).
91
119
92 * We are now using an internally shipped version of
120 * We are now using an internally shipped version of
93 :mod:`~IPython.external.argparse` to parse command line options for
121 :mod:`~IPython.external.argparse` to parse command line options for
94 :command:`ipython`.
122 :command:`ipython`.
95
123
96 * New top level :func:`~IPython.frontend.terminal.embed.embed` function that can be called
124 * New top level :func:`~IPython.frontend.terminal.embed.embed` function that can
97 to embed IPython at any place in user's code. One the first call it will
125 be called to embed IPython at any place in user's code. One the first call it
98 create an :class:`~IPython.frontend.terminal.embed.InteractiveShellEmbed` instance and
126 will create an :class:`~IPython.frontend.terminal.embed.InteractiveShellEmbed`
99 call it. In later calls, it just calls the previously created
127 instance and call it. In later calls, it just calls the previously created
100 :class:`~IPython.frontend.terminal.embed.InteractiveShellEmbed`.
128 :class:`~IPython.frontend.terminal.embed.InteractiveShellEmbed`.
101
129
102 * Created a component system (:mod:`IPython.core.component`) that is based on
130 * Created a configuration system (:mod:`IPython.config.configurable`) that is
103 :mod:`IPython.utils.traitlets`. Components are arranged into a runtime
131 based on :mod:`IPython.utils.traitlets`. Configurables are arranged into a
104 containment tree (not inheritance) that i) automatically propagates
132 runtime containment tree (not inheritance) that i) automatically propagates
105 configuration information and ii) allows components to discover each other
133 configuration information and ii) allows singletons to discover each other in
106 in a loosely coupled manner. In the future all parts of IPython will be
134 a loosely coupled manner. In the future all parts of IPython will be
107 subclasses of :class:`~IPython.core.component.Component`. All IPython
135 subclasses of :class:`~IPython.config.configurable.Configurable`. All IPython
108 developers should become familiar with the component system.
136 developers should become familiar with the config system.
109
137
110 * Created a new :class:`~IPython.config.loader.Config` for holding
138 * Created a new :class:`~IPython.config.loader.Config` for holding
111 configuration information. This is a dict like class with a few extras: i)
139 configuration information. This is a dict like class with a few extras: i)
112 it supports attribute style access, ii) it has a merge function that merges
140 it supports attribute style access, ii) it has a merge function that merges
113 two :class:`~IPython.config.loader.Config` instances recursively and iii) it
141 two :class:`~IPython.config.loader.Config` instances recursively and iii) it
114 will automatically create sub-:class:`~IPython.config.loader.Config`
142 will automatically create sub-:class:`~IPython.config.loader.Config`
115 instances for attributes that start with an uppercase character.
143 instances for attributes that start with an uppercase character.
116
144
117 * Created new configuration loaders in :mod:`IPython.config.loader`. These
145 * Created new configuration loaders in :mod:`IPython.config.loader`. These
118 loaders provide a unified loading interface for all configuration
146 loaders provide a unified loading interface for all configuration
119 information including command line arguments and configuration files. We
147 information including command line arguments and configuration files. We
120 have two default implementations based on :mod:`argparse` and plain python
148 have two default implementations based on :mod:`argparse` and plain python
121 files. These are used to implement the new configuration system.
149 files. These are used to implement the new configuration system.
122
150
123 * Created a top-level :class:`Application` class in
151 * Created a top-level :class:`Application` class in
124 :mod:`IPython.core.application` that is designed to encapsulate the starting
152 :mod:`IPython.core.application` that is designed to encapsulate the starting
125 of any IPython process. An application loads and merges all the
153 of any basic Python program. An application loads and merges all the
126 configuration objects, constructs the main application :class:`Component`
154 configuration objects, constructs the main application, configures and
127 instances and then starts the application running. The default
155 initiates logging, and creates and configures any :class:`Configurable`
128 :class:`Application` class has built-in logic for handling the IPython
156 instances and then starts the application running. An extended
129 directory as well as profiles.
157 :class:`BaseIPythonApplication` class adds logic for handling the
158 IPython directory as well as profiles, and all IPython entry points
159 extend it.
130
160
131 * The :class:`Type` and :class:`Instance` traitlets now handle classes given
161 * The :class:`Type` and :class:`Instance` traitlets now handle classes given
132 as strings, like ``foo.bar.Bar``. This is needed for forward declarations.
162 as strings, like ``foo.bar.Bar``. This is needed for forward declarations.
133 But, this was implemented in a careful way so that string to class
163 But, this was implemented in a careful way so that string to class
134 resolution is done at a single point, when the parent
164 resolution is done at a single point, when the parent
135 :class:`~IPython.utils.traitlets.HasTraitlets` is instantiated.
165 :class:`~IPython.utils.traitlets.HasTraitlets` is instantiated.
136
166
137 * :mod:`IPython.utils.ipstruct` has been refactored to be a subclass of
167 * :mod:`IPython.utils.ipstruct` has been refactored to be a subclass of
138 dict. It also now has full docstrings and doctests.
168 dict. It also now has full docstrings and doctests.
139 * Created a Trait's like implementation in :mod:`IPython.utils.traitlets`.
169 * Created a Trait's like implementation in :mod:`IPython.utils.traitlets`.
140 This is a pure Python, lightweight version of a library that is similar to
170 This is a pure Python, lightweight version of a library that is similar to
141 :mod:`enthought.traits`. We are using this for validation, defaults and
171 :mod:`enthought.traits`. We are using this for validation, defaults and
142 notification in our new component system. Although it is not API compatible
172 notification in our new component system. Although it is not API compatible
143 with :mod:`enthought.traits`, we plan on moving in this direction so that
173 with :mod:`enthought.traits`, we plan on moving in this direction so that
144 eventually our implementation could be replaced by a (yet to exist) pure
174 eventually our implementation could be replaced by a (yet to exist) pure
145 Python version of :mod:`enthought.traits`.
175 Python version of :mod:`enthought.traits`.
146
176
147 * Added a new module :mod:`IPython.lib.inputhook` to manage the integration
177 * Added a new module :mod:`IPython.lib.inputhook` to manage the integration
148 with GUI event loops using `PyOS_InputHook`. See the docstrings in this
178 with GUI event loops using `PyOS_InputHook`. See the docstrings in this
149 module or the main IPython docs for details.
179 module or the main IPython docs for details.
150
180
151 * For users, GUI event loop integration is now handled through the new
181 * For users, GUI event loop integration is now handled through the new
152 :command:`%gui` magic command. Type ``%gui?`` at an IPython prompt for
182 :command:`%gui` magic command. Type ``%gui?`` at an IPython prompt for
153 documentation.
183 documentation.
154
184
155 * The command line options ``-wthread``, ``-qthread`` and
156 ``-gthread`` just call the appropriate :mod:`IPython.lib.inputhook`
157 functions.
158
159 * For developers :mod:`IPython.lib.inputhook` provides a simple interface
185 * For developers :mod:`IPython.lib.inputhook` provides a simple interface
160 for managing the event loops in their interactive GUI applications.
186 for managing the event loops in their interactive GUI applications.
161 Examples can be found in our :file:`docs/examples/lib` directory.
187 Examples can be found in our :file:`docs/examples/lib` directory.
162
188
163 Backwards incompatible changes
189 Backwards incompatible changes
164 ------------------------------
190 ------------------------------
165
191
192 * The Twisted-based :mod:`IPython.kernel` has been removed, and completely
193 rewritten as :mod:`IPython.parallel`, using ZeroMQ.
194
195 * Profiles are now directories. Instead of a profile being a single config file,
196 profiles are now self-contained directories. By default, profiles get their
197 own IPython history, log files, and everything. To create a new profile, do
198 ``ipython profile create <name>``.
199
200 * All IPython applications have been rewritten to use
201 :class:`~IPython.config.loader.KeyValueConfigLoader`. This means that
202 command-line options have changed. Now, all configurable values are accessible
203 from the command-line with the same syntax as in a configuration file.
204
205 * The command line options ``-wthread``, ``-qthread`` and
206 ``-gthread`` have been removed. Use ``gui=wx``, ``gui=qt``, ``gui=gtk``
207 instead.
208
166 * The extension loading functions have been renamed to
209 * The extension loading functions have been renamed to
167 :func:`load_ipython_extension` and :func:`unload_ipython_extension`.
210 :func:`load_ipython_extension` and :func:`unload_ipython_extension`.
168
211
169 * :class:`~IPython.core.iplib.InteractiveShell` no longer takes an
212 * :class:`~IPython.core.interactiveshell.InteractiveShell` no longer takes an
170 ``embedded`` argument. Instead just use the
213 ``embedded`` argument. Instead just use the
171 :class:`~IPython.core.iplib.InteractiveShellEmbed` class.
214 :class:`~IPython.core.interactiveshell.InteractiveShellEmbed` class.
172
215
173 * ``__IPYTHON__`` is no longer injected into ``__builtin__``.
216 * ``__IPYTHON__`` is no longer injected into ``__builtin__``.
174
217
175 * :meth:`Struct.__init__` no longer takes `None` as its first argument. It
218 * :meth:`Struct.__init__` no longer takes `None` as its first argument. It
176 must be a :class:`dict` or :class:`Struct`.
219 must be a :class:`dict` or :class:`Struct`.
177
220
178 * :meth:`~IPython.core.iplib.InteractiveShell.ipmagic` has been renamed
221 * :meth:`~IPython.core.interactiveshell.InteractiveShell.ipmagic` has been
179 :meth:`~IPython.core.iplib.InteractiveShell.magic.`
222 renamed :meth:`~IPython.core.interactiveshell.InteractiveShell.magic.`
180
223
181 * The functions :func:`ipmagic` and :func:`ipalias` have been removed from
224 * The functions :func:`ipmagic` and :func:`ipalias` have been removed from
182 :mod:`__builtins__`.
225 :mod:`__builtins__`.
183
226
184 * The references to the global :class:`~IPython.core.iplib.InteractiveShell`
227 * The references to the global
185 instance (``_ip``, and ``__IP``) have been removed from the user's
228 :class:`~IPython.core.interactivehell.InteractiveShell` instance (``_ip``, and
186 namespace. They are replaced by a new function called :func:`get_ipython`
229 ``__IP``) have been removed from the user's namespace. They are replaced by a
187 that returns the current :class:`~IPython.core.iplib.InteractiveShell`
230 new function called :func:`get_ipython` that returns the current
188 instance. This function is injected into the user's namespace and is now the
231 :class:`~IPython.core.interactiveshell.InteractiveShell` instance. This
189 main way of accessing IPython's API.
232 function is injected into the user's namespace and is now the main way of
233 accessing the running IPython.
190
234
191 * Old style configuration files :file:`ipythonrc` and :file:`ipy_user_conf.py`
235 * Old style configuration files :file:`ipythonrc` and :file:`ipy_user_conf.py`
192 are no longer supported. Users should migrate there configuration files to
236 are no longer supported. Users should migrate there configuration files to
193 the new format described :ref:`here <config_overview>` and :ref:`here
237 the new format described :ref:`here <config_overview>` and :ref:`here
194 <configuring_ipython>`.
238 <configuring_ipython>`.
195
239
196 * The old IPython extension API that relied on :func:`ipapi` has been
240 * The old IPython extension API that relied on :func:`ipapi` has been
197 completely removed. The new extension API is described :ref:`here
241 completely removed. The new extension API is described :ref:`here
198 <configuring_ipython>`.
242 <configuring_ipython>`.
199
243
200 * Support for ``qt3`` has been dropped. User's who need this should use
244 * Support for ``qt3`` has been dropped. Users who need this should use
201 previous versions of IPython.
245 previous versions of IPython.
202
246
203 * Removed :mod:`shellglobals` as it was obsolete.
247 * Removed :mod:`shellglobals` as it was obsolete.
204
248
205 * Removed all the threaded shells in :mod:`IPython.core.shell`. These are no
249 * Removed all the threaded shells in :mod:`IPython.core.shell`. These are no
206 longer needed because of the new capabilities in
250 longer needed because of the new capabilities in
207 :mod:`IPython.lib.inputhook`.
251 :mod:`IPython.lib.inputhook`.
208
252
209 * The ``-pylab`` command line flag has been disabled until matplotlib adds
210 support for the new :mod:`IPython.lib.inputhook` approach. The new stuff
211 does work with matplotlib, but you have to set everything up by hand.
212
213 * New top-level sub-packages have been created: :mod:`IPython.core`,
253 * New top-level sub-packages have been created: :mod:`IPython.core`,
214 :mod:`IPython.lib`, :mod:`IPython.utils`, :mod:`IPython.deathrow`,
254 :mod:`IPython.lib`, :mod:`IPython.utils`, :mod:`IPython.deathrow`,
215 :mod:`IPython.quarantine`. All existing top-level modules have been
255 :mod:`IPython.quarantine`. All existing top-level modules have been
216 moved to appropriate sub-packages. All internal import statements
256 moved to appropriate sub-packages. All internal import statements
217 have been updated and tests have been added. The build system (setup.py
257 have been updated and tests have been added. The build system (setup.py
218 and friends) have been updated. See :ref:`this section <module_reorg>` of the
258 and friends) have been updated. See :ref:`this section <module_reorg>` of the
219 documentation for descriptions of these new sub-packages.
259 documentation for descriptions of these new sub-packages.
220
260
221 * Compatability modules have been created for :mod:`IPython.Shell`,
261 * :mod:`IPython.ipapi` has been moved to :mod:`IPython.core.ipapi`.
222 :mod:`IPython.ipapi` and :mod:`IPython.iplib` that display warnings
262 :mod:`IPython.Shell` and :mod:`IPython.iplib` have been split and removed as
223 and then load the actual implementation from :mod:`IPython.core`.
263 part of the refactor.
224
264
225 * :mod:`Extensions` has been moved to :mod:`extensions` and all existing
265 * :mod:`Extensions` has been moved to :mod:`extensions` and all existing
226 extensions have been moved to either :mod:`IPython.quarantine` or
266 extensions have been moved to either :mod:`IPython.quarantine` or
227 :mod:`IPython.deathrow`. :mod:`IPython.quarantine` contains modules that we
267 :mod:`IPython.deathrow`. :mod:`IPython.quarantine` contains modules that we
228 plan on keeping but that need to be updated. :mod:`IPython.deathrow`
268 plan on keeping but that need to be updated. :mod:`IPython.deathrow`
229 contains modules that are either dead or that should be maintained as third
269 contains modules that are either dead or that should be maintained as third
230 party libraries. More details about this can be found :ref:`here
270 party libraries. More details about this can be found :ref:`here
231 <module_reorg>`.
271 <module_reorg>`.
232
272
233 * The IPython GUIs in :mod:`IPython.frontend` and :mod:`IPython.gui` are likely
273 * Previous IPython GUIs in :mod:`IPython.frontend` and :mod:`IPython.gui` are
234 broken because of the refactoring in the core. With proper updates, these
274 likely broken, and have been removed to :mod:`IPython.deathrow` because of the
235 should still work. We probably want to get these so they are not using
275 refactoring in the core. With proper updates, these should still work.
236 :mod:`IPython.kernel.core` (which is being phased out).
237
238
276
239
277
General Comments 0
You need to be logged in to leave comments. Login now