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