Show More
@@ -1,212 +1,231 b'' | |||||
1 | ================================================ |
|
1 | ================================================ | |
2 | Development version |
|
2 | Development version | |
3 | ================================================ |
|
3 | ================================================ | |
4 |
|
4 | |||
5 | Main `ipython` branch |
|
5 | Main `ipython` branch | |
6 | ===================== |
|
6 | ===================== | |
7 |
|
7 | |||
8 | As of the 0.11 version of IPython, a signifiant portion of the core has been |
|
8 | As of the 0.11 version of IPython, a signifiant portion of the core has been | |
9 | refactored. This refactoring is founded on a number of new abstractions. |
|
9 | refactored. This refactoring is founded on a number of new abstractions. | |
10 | The main new classes that implement these abstractions are: |
|
10 | The main new classes that implement these abstractions are: | |
11 |
|
11 | |||
12 | * :class:`IPython.utils.traitlets.HasTraitlets`. |
|
12 | * :class:`IPython.utils.traitlets.HasTraitlets`. | |
13 | * :class:`IPython.core.component.Component`. |
|
13 | * :class:`IPython.core.component.Component`. | |
14 | * :class:`IPython.core.application.Application`. |
|
14 | * :class:`IPython.core.application.Application`. | |
15 | * :class:`IPython.config.loader.ConfigLoader`. |
|
15 | * :class:`IPython.config.loader.ConfigLoader`. | |
16 | * :class:`IPython.config.loader.Config` |
|
16 | * :class:`IPython.config.loader.Config` | |
17 |
|
17 | |||
18 | We are still in the process of writing developer focused documentation about |
|
18 | We are still in the process of writing developer focused documentation about | |
19 | these classes, but for now our :ref:`configuration documentation |
|
19 | these classes, but for now our :ref:`configuration documentation | |
20 | <config_overview>` contains a high level overview of the concepts that these |
|
20 | <config_overview>` contains a high level overview of the concepts that these | |
21 | classes express. |
|
21 | classes express. | |
22 |
|
22 | |||
23 | The changes listed here are a brief summary of the recent work on IPython. |
|
23 | The changes listed here are a brief summary of the recent work on IPython. | |
24 | For more details, please consult the actual source. |
|
24 | For more details, please consult the actual source. | |
25 |
|
25 | |||
26 | New features |
|
26 | New features | |
27 | ------------ |
|
27 | ------------ | |
28 |
|
28 | |||
|
29 | * The :mod:`IPython.extensions.pretty` extension has been moved out of | |||
|
30 | quarantine and fully updated to the new extension API. | |||
|
31 | ||||
|
32 | * New magics for loading/unloading/reloading extensions have been added: | |||
|
33 | ``%load_ext``, ``%unload_ext`` and ``%reload_ext``. | |||
|
34 | ||||
29 | * The configuration system and configuration files are brand new. See the |
|
35 | * The configuration system and configuration files are brand new. See the | |
30 | configuration system :ref:`documentation <config_index>` for more details. |
|
36 | configuration system :ref:`documentation <config_index>` for more details. | |
31 |
|
37 | |||
32 | * The :class:`~IPython.core.iplib.InteractiveShell` class is now a |
|
38 | * The :class:`~IPython.core.iplib.InteractiveShell` class is now a | |
33 | :class:`~IPython.core.component.Component` subclass and has traitlets that |
|
39 | :class:`~IPython.core.component.Component` subclass and has traitlets that | |
34 | determine the defaults and runtime environment. The ``__init__`` method has |
|
40 | determine the defaults and runtime environment. The ``__init__`` method has | |
35 | also been refactored so this class can be instantiated and run without the |
|
41 | also been refactored so this class can be instantiated and run without the | |
36 | old :mod:`ipmaker` module. |
|
42 | old :mod:`ipmaker` module. | |
37 |
|
43 | |||
38 | * The methods of :class:`~IPython.core.iplib.InteractiveShell` have |
|
44 | * The methods of :class:`~IPython.core.iplib.InteractiveShell` have | |
39 | been organized into sections to make it easier to turn more sections |
|
45 | been organized into sections to make it easier to turn more sections | |
40 | of functionality into componenets. |
|
46 | of functionality into componenets. | |
41 |
|
47 | |||
42 | * The embedded shell has been refactored into a truly standalone subclass of |
|
48 | * The embedded shell has been refactored into a truly standalone subclass of | |
43 | :class:`InteractiveShell` called :class:`InteractiveShellEmbed`. All |
|
49 | :class:`InteractiveShell` called :class:`InteractiveShellEmbed`. All | |
44 | embedding logic has been taken out of the base class and put into the |
|
50 | embedding logic has been taken out of the base class and put into the | |
45 | embedded subclass. |
|
51 | embedded subclass. | |
46 |
|
52 | |||
47 | * I have created methods of :class:`~IPython.core.iplib.InteractiveShell` to |
|
53 | * I have created methods of :class:`~IPython.core.iplib.InteractiveShell` to | |
48 | help it cleanup after itself. The :meth:`cleanup` method controls this. We |
|
54 | help it cleanup after itself. The :meth:`cleanup` method controls this. We | |
49 | couldn't do this in :meth:`__del__` because we have cycles in our object |
|
55 | couldn't do this in :meth:`__del__` because we have cycles in our object | |
50 | graph that prevent it from being called. |
|
56 | graph that prevent it from being called. | |
51 |
|
57 | |||
52 | * Created a new module :mod:`IPython.utils.importstring` for resolving |
|
58 | * Created a new module :mod:`IPython.utils.importstring` for resolving | |
53 | strings like ``foo.bar.Bar`` to the actual class. |
|
59 | strings like ``foo.bar.Bar`` to the actual class. | |
54 |
|
60 | |||
55 | * Completely refactored the :mod:`IPython.core.prefilter` module into |
|
61 | * Completely refactored the :mod:`IPython.core.prefilter` module into | |
56 | :class:`~IPython.core.component.Component` subclasses. Added a new layer |
|
62 | :class:`~IPython.core.component.Component` subclasses. Added a new layer | |
57 | into the prefilter system, called "transformations" that all new prefilter |
|
63 | into the prefilter system, called "transformations" that all new prefilter | |
58 | logic should use (rather than the older "checker/handler" approach). |
|
64 | logic should use (rather than the older "checker/handler" approach). | |
59 |
|
65 | |||
60 | * Aliases are now components (:mod:`IPython.core.alias`). |
|
66 | * Aliases are now components (:mod:`IPython.core.alias`). | |
61 |
|
67 | |||
62 | * We are now using an internally shipped version of |
|
68 | * We are now using an internally shipped version of | |
63 | :mod:`~IPython.external.argparse` to parse command line options for |
|
69 | :mod:`~IPython.external.argparse` to parse command line options for | |
64 | :command:`ipython`. |
|
70 | :command:`ipython`. | |
65 |
|
71 | |||
66 | * New top level :func:`~IPython.core.embed.embed` function that can be called |
|
72 | * New top level :func:`~IPython.core.embed.embed` function that can be called | |
67 | to embed IPython at any place in user's code. One the first call it will |
|
73 | to embed IPython at any place in user's code. One the first call it will | |
68 | create an :class:`~IPython.core.embed.InteractiveShellEmbed` instance and |
|
74 | create an :class:`~IPython.core.embed.InteractiveShellEmbed` instance and | |
69 | call it. In later calls, it just calls the previously created |
|
75 | call it. In later calls, it just calls the previously created | |
70 | :class:`~IPython.core.embed.InteractiveShellEmbed`. |
|
76 | :class:`~IPython.core.embed.InteractiveShellEmbed`. | |
71 |
|
77 | |||
72 | * Created a component system (:mod:`IPython.core.component`) that is based on |
|
78 | * Created a component system (:mod:`IPython.core.component`) that is based on | |
73 | :mod:`IPython.utils.traitlets`. Components are arranged into a runtime |
|
79 | :mod:`IPython.utils.traitlets`. Components are arranged into a runtime | |
74 | containment tree (not inheritance) that i) automatically propagates |
|
80 | containment tree (not inheritance) that i) automatically propagates | |
75 | configuration information and ii) allows components to discover each other |
|
81 | configuration information and ii) allows components to discover each other | |
76 | in a loosely coupled manner. In the future all parts of IPython will be |
|
82 | in a loosely coupled manner. In the future all parts of IPython will be | |
77 | subclasses of :class:`~IPython.core.component.Component`. All IPython |
|
83 | subclasses of :class:`~IPython.core.component.Component`. All IPython | |
78 | developers should become familiar with the component system. |
|
84 | developers should become familiar with the component system. | |
79 |
|
85 | |||
80 | * Created a new :class:`~IPython.config.loader.Config` for holding |
|
86 | * Created a new :class:`~IPython.config.loader.Config` for holding | |
81 | configuration information. This is a dict like class with a few extras: i) |
|
87 | configuration information. This is a dict like class with a few extras: i) | |
82 | it supports attribute style access, ii) it has a merge function that merges |
|
88 | it supports attribute style access, ii) it has a merge function that merges | |
83 | two :class:`~IPython.config.loader.Config` instances recursively and iii) it |
|
89 | two :class:`~IPython.config.loader.Config` instances recursively and iii) it | |
84 | will automatically create sub-:class:`~IPython.config.loader.Config` |
|
90 | will automatically create sub-:class:`~IPython.config.loader.Config` | |
85 | instances for attributes that start with an uppercase character. |
|
91 | instances for attributes that start with an uppercase character. | |
86 |
|
92 | |||
87 | * Created new configuration loaders in :mod:`IPython.config.loader`. These |
|
93 | * Created new configuration loaders in :mod:`IPython.config.loader`. These | |
88 | loaders provide a unified loading interface for all configuration |
|
94 | loaders provide a unified loading interface for all configuration | |
89 | information including command line arguments and configuration files. We |
|
95 | information including command line arguments and configuration files. We | |
90 | have two default implementations based on :mod:`argparse` and plain python |
|
96 | have two default implementations based on :mod:`argparse` and plain python | |
91 | files. These are used to implement the new configuration system. |
|
97 | files. These are used to implement the new configuration system. | |
92 |
|
98 | |||
93 | * Created a top-level :class:`Application` class in |
|
99 | * Created a top-level :class:`Application` class in | |
94 | :mod:`IPython.core.application` that is designed to encapsulate the starting |
|
100 | :mod:`IPython.core.application` that is designed to encapsulate the starting | |
95 | of any IPython process. An application loads and merges all the |
|
101 | of any IPython process. An application loads and merges all the | |
96 | configuration objects, constructs the main application :class:`Component` |
|
102 | configuration objects, constructs the main application :class:`Component` | |
97 | instances and then starts the application running. The default |
|
103 | instances and then starts the application running. The default | |
98 | :class:`Application` class has built-in logic for handling the IPython |
|
104 | :class:`Application` class has built-in logic for handling the IPython | |
99 | directory as well as profiles. |
|
105 | directory as well as profiles. | |
100 |
|
106 | |||
101 | * The :class:`Type` and :class:`Instance` traitlets now handle classes given |
|
107 | * The :class:`Type` and :class:`Instance` traitlets now handle classes given | |
102 | as strings, like ``foo.bar.Bar``. This is needed for forward declarations. |
|
108 | as strings, like ``foo.bar.Bar``. This is needed for forward declarations. | |
103 | But, this was implemented in a careful way so that string to class |
|
109 | But, this was implemented in a careful way so that string to class | |
104 | resolution is done at a single point, when the parent |
|
110 | resolution is done at a single point, when the parent | |
105 | :class:`~IPython.utils.traitlets.HasTraitlets` is instantiated. |
|
111 | :class:`~IPython.utils.traitlets.HasTraitlets` is instantiated. | |
106 |
|
112 | |||
107 | * :mod:`IPython.utils.ipstruct` has been refactored to be a subclass of |
|
113 | * :mod:`IPython.utils.ipstruct` has been refactored to be a subclass of | |
108 | dict. It also now has full docstrings and doctests. |
|
114 | dict. It also now has full docstrings and doctests. | |
109 | * Created a Trait's like implementation in :mod:`IPython.utils.traitlets`. |
|
115 | * Created a Trait's like implementation in :mod:`IPython.utils.traitlets`. | |
110 | This is a pure Python, lightweight version of a library that is similar to |
|
116 | This is a pure Python, lightweight version of a library that is similar to | |
111 | :mod:`enthought.traits`. We are using this for validation, defaults and |
|
117 | :mod:`enthought.traits`. We are using this for validation, defaults and | |
112 | notification in our new component system. Although it is not API compatible |
|
118 | notification in our new component system. Although it is not API compatible | |
113 | with :mod:`enthought.traits`, we plan on moving in this direction so that |
|
119 | with :mod:`enthought.traits`, we plan on moving in this direction so that | |
114 | eventually our implementation could be replaced by a (yet to exist) pure |
|
120 | eventually our implementation could be replaced by a (yet to exist) pure | |
115 | Python version of :mod:`enthought.traits`. |
|
121 | Python version of :mod:`enthought.traits`. | |
116 |
|
122 | |||
117 | * Added a new module :mod:`IPython.lib.inputhook` to manage the integration |
|
123 | * Added a new module :mod:`IPython.lib.inputhook` to manage the integration | |
118 | with GUI event loops using `PyOS_InputHook`. See the docstrings in this |
|
124 | with GUI event loops using `PyOS_InputHook`. See the docstrings in this | |
119 | module or the main IPython docs for details. |
|
125 | module or the main IPython docs for details. | |
120 |
|
126 | |||
121 | * For users, GUI event loop integration is now handled through the new |
|
127 | * For users, GUI event loop integration is now handled through the new | |
122 | :command:`%gui` magic command. Type ``%gui?`` at an IPython prompt for |
|
128 | :command:`%gui` magic command. Type ``%gui?`` at an IPython prompt for | |
123 | documentation. |
|
129 | documentation. | |
124 |
|
130 | |||
125 | * The command line options ``-wthread``, ``-qthread`` and |
|
131 | * The command line options ``-wthread``, ``-qthread`` and | |
126 | ``-gthread`` just call the appropriate :mod:`IPython.lib.inputhook` |
|
132 | ``-gthread`` just call the appropriate :mod:`IPython.lib.inputhook` | |
127 | functions. |
|
133 | functions. | |
128 |
|
134 | |||
129 | * For developers :mod:`IPython.lib.inputhook` provides a simple interface |
|
135 | * For developers :mod:`IPython.lib.inputhook` provides a simple interface | |
130 | for managing the event loops in their interactive GUI applications. |
|
136 | for managing the event loops in their interactive GUI applications. | |
131 | Examples can be found in our :file:`docs/examples/lib` directory. |
|
137 | Examples can be found in our :file:`docs/examples/lib` directory. | |
132 |
|
138 | |||
133 | Bug fixes |
|
139 | Bug fixes | |
134 | --------- |
|
140 | --------- | |
135 |
|
141 | |||
|
142 | * Previously, the latex Sphinx docs were in a single chapter. This has been | |||
|
143 | fixed by adding a sixth argument of True to the ``latex_documents`` | |||
|
144 | attribute of :file:`conf.py`. | |||
|
145 | ||||
|
146 | * The ``psum`` example in the MPI documentation has been updated to mpi4py | |||
|
147 | version 1.1.0. Thanks to J. Thomas for this fix. | |||
|
148 | ||||
|
149 | * The top-level, zero-install :file:`ipython.py` script has been updated to | |||
|
150 | the new application launching API. | |||
|
151 | ||||
136 | * Keyboard interrupts now work with GUI support enabled across all platforms |
|
152 | * Keyboard interrupts now work with GUI support enabled across all platforms | |
137 | and all GUI toolkits reliably. |
|
153 | and all GUI toolkits reliably. | |
138 |
|
154 | |||
139 | Backwards incompatible changes |
|
155 | Backwards incompatible changes | |
140 | ------------------------------ |
|
156 | ------------------------------ | |
141 |
|
157 | |||
|
158 | * The extension loading functions have been renamed to | |||
|
159 | :func:`load_ipython_extension` and :func:`unload_ipython_extension`. | |||
|
160 | ||||
142 | * :class:`~IPython.core.iplib.InteractiveShell` no longer takes an |
|
161 | * :class:`~IPython.core.iplib.InteractiveShell` no longer takes an | |
143 | ``embedded`` argument. Instead just use the |
|
162 | ``embedded`` argument. Instead just use the | |
144 | :class:`~IPython.core.iplib.InteractiveShellEmbed` class. |
|
163 | :class:`~IPython.core.iplib.InteractiveShellEmbed` class. | |
145 |
|
164 | |||
146 | * ``__IPYTHON__`` is no longer injected into ``__builtin__``. |
|
165 | * ``__IPYTHON__`` is no longer injected into ``__builtin__``. | |
147 |
|
166 | |||
148 | * :meth:`Struct.__init__` no longer takes `None` as its first argument. It |
|
167 | * :meth:`Struct.__init__` no longer takes `None` as its first argument. It | |
149 | must be a :class:`dict` or :class:`Struct`. |
|
168 | must be a :class:`dict` or :class:`Struct`. | |
150 |
|
169 | |||
151 | * :meth:`~IPython.core.iplib.InteractiveShell.ipmagic` has been renamed |
|
170 | * :meth:`~IPython.core.iplib.InteractiveShell.ipmagic` has been renamed | |
152 | :meth:`~IPython.core.iplib.InteractiveShell.magic.` |
|
171 | :meth:`~IPython.core.iplib.InteractiveShell.magic.` | |
153 |
|
172 | |||
154 | * The functions :func:`ipmagic` and :func:`ipalias` have been removed from |
|
173 | * The functions :func:`ipmagic` and :func:`ipalias` have been removed from | |
155 | :mod:`__builtins__`. |
|
174 | :mod:`__builtins__`. | |
156 |
|
175 | |||
157 | * The references to the global :class:`~IPython.core.iplib.InteractiveShell` |
|
176 | * The references to the global :class:`~IPython.core.iplib.InteractiveShell` | |
158 | instance (``_ip``, and ``__IP``) have been removed from the user's |
|
177 | instance (``_ip``, and ``__IP``) have been removed from the user's | |
159 | namespace. They are replaced by a new function called :func:`get_ipython` |
|
178 | namespace. They are replaced by a new function called :func:`get_ipython` | |
160 | that returns the current :class:`~IPython.core.iplib.InteractiveShell` |
|
179 | that returns the current :class:`~IPython.core.iplib.InteractiveShell` | |
161 | instance. This function is injected into the user's namespace and is now the |
|
180 | instance. This function is injected into the user's namespace and is now the | |
162 | main way of accessing IPython's API. |
|
181 | main way of accessing IPython's API. | |
163 |
|
182 | |||
164 | * Old style configuration files :file:`ipythonrc` and :file:`ipy_user_conf.py` |
|
183 | * Old style configuration files :file:`ipythonrc` and :file:`ipy_user_conf.py` | |
165 | are no longer supported. Users should migrate there configuration files to |
|
184 | are no longer supported. Users should migrate there configuration files to | |
166 | the new format described :ref:`here <config_overview>` and :ref:`here |
|
185 | the new format described :ref:`here <config_overview>` and :ref:`here | |
167 | <configuring_ipython>`. |
|
186 | <configuring_ipython>`. | |
168 |
|
187 | |||
169 | * The old IPython extension API that relied on :func:`ipapi` has been |
|
188 | * The old IPython extension API that relied on :func:`ipapi` has been | |
170 | completely removed. The new extension API is described :ref:`here |
|
189 | completely removed. The new extension API is described :ref:`here | |
171 | <configuring_ipython>`. |
|
190 | <configuring_ipython>`. | |
172 |
|
191 | |||
173 | * Support for ``qt3`` has been dropped. User's who need this should use |
|
192 | * Support for ``qt3`` has been dropped. User's who need this should use | |
174 | previous versions of IPython. |
|
193 | previous versions of IPython. | |
175 |
|
194 | |||
176 | * Removed :mod:`shellglobals` as it was obsolete. |
|
195 | * Removed :mod:`shellglobals` as it was obsolete. | |
177 |
|
196 | |||
178 | * Removed all the threaded shells in :mod:`IPython.core.shell`. These are no |
|
197 | * Removed all the threaded shells in :mod:`IPython.core.shell`. These are no | |
179 | longer needed because of the new capabilities in |
|
198 | longer needed because of the new capabilities in | |
180 | :mod:`IPython.lib.inputhook`. |
|
199 | :mod:`IPython.lib.inputhook`. | |
181 |
|
200 | |||
182 | * The ``-pylab`` command line flag has been disabled until matplotlib adds |
|
201 | * The ``-pylab`` command line flag has been disabled until matplotlib adds | |
183 | support for the new :mod:`IPython.lib.inputhook` approach. The new stuff |
|
202 | support for the new :mod:`IPython.lib.inputhook` approach. The new stuff | |
184 | does work with matplotlib, but you have to set everything up by hand. |
|
203 | does work with matplotlib, but you have to set everything up by hand. | |
185 |
|
204 | |||
186 | * New top-level sub-packages have been created: :mod:`IPython.core`, |
|
205 | * New top-level sub-packages have been created: :mod:`IPython.core`, | |
187 | :mod:`IPython.lib`, :mod:`IPython.utils`, :mod:`IPython.deathrow`, |
|
206 | :mod:`IPython.lib`, :mod:`IPython.utils`, :mod:`IPython.deathrow`, | |
188 | :mod:`IPython.quarantine`. All existing top-level modules have been |
|
207 | :mod:`IPython.quarantine`. All existing top-level modules have been | |
189 | moved to appropriate sub-packages. All internal import statements |
|
208 | moved to appropriate sub-packages. All internal import statements | |
190 | have been updated and tests have been added. The build system (setup.py |
|
209 | have been updated and tests have been added. The build system (setup.py | |
191 | and friends) have been updated. See :ref:`this section <module_reorg>` of the |
|
210 | and friends) have been updated. See :ref:`this section <module_reorg>` of the | |
192 | documentation for descriptions of these new sub-packages. |
|
211 | documentation for descriptions of these new sub-packages. | |
193 |
|
212 | |||
194 | * Compatability modules have been created for :mod:`IPython.Shell`, |
|
213 | * Compatability modules have been created for :mod:`IPython.Shell`, | |
195 | :mod:`IPython.ipapi` and :mod:`IPython.iplib` that display warnings |
|
214 | :mod:`IPython.ipapi` and :mod:`IPython.iplib` that display warnings | |
196 | and then load the actual implementation from :mod:`IPython.core`. |
|
215 | and then load the actual implementation from :mod:`IPython.core`. | |
197 |
|
216 | |||
198 | * :mod:`Extensions` has been moved to :mod:`extensions` and all existing |
|
217 | * :mod:`Extensions` has been moved to :mod:`extensions` and all existing | |
199 | extensions have been moved to either :mod:`IPython.quarantine` or |
|
218 | extensions have been moved to either :mod:`IPython.quarantine` or | |
200 | :mod:`IPython.deathrow`. :mod:`IPython.quarantine` contains modules that we |
|
219 | :mod:`IPython.deathrow`. :mod:`IPython.quarantine` contains modules that we | |
201 | plan on keeping but that need to be updated. :mod:`IPython.deathrow` |
|
220 | plan on keeping but that need to be updated. :mod:`IPython.deathrow` | |
202 | contains modules that are either dead or that should be maintained as third |
|
221 | contains modules that are either dead or that should be maintained as third | |
203 | party libraries. More details about this can be found :ref:`here |
|
222 | party libraries. More details about this can be found :ref:`here | |
204 | <module_reorg>`. |
|
223 | <module_reorg>`. | |
205 |
|
224 | |||
206 | * The IPython GUIs in :mod:`IPython.frontend` and :mod:`IPython.gui` are likely |
|
225 | * The IPython GUIs in :mod:`IPython.frontend` and :mod:`IPython.gui` are likely | |
207 | broken because of the refactoring in the core. With proper updates, these |
|
226 | broken because of the refactoring in the core. With proper updates, these | |
208 | should still work. We probably want to get these so they are not using |
|
227 | should still work. We probably want to get these so they are not using | |
209 | :mod:`IPython.kernel.core` (which is being phased out). |
|
228 | :mod:`IPython.kernel.core` (which is being phased out). | |
210 |
|
229 | |||
211 |
|
230 | |||
212 |
|
231 |
General Comments 0
You need to be logged in to leave comments.
Login now