##// END OF EJS Templates
Merge updates for 0.9.rc1 release.
Fernando Perez -
r1597:43a326b1 merge
parent child Browse files
Show More
@@ -1,99 +1,99 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """Release data for the IPython project.
2 """Release data for the IPython project.
3
3
4 $Id: Release.py 3002 2008-02-01 07:17:00Z fperez $"""
4 $Id: Release.py 3002 2008-02-01 07:17:00Z fperez $"""
5
5
6 #*****************************************************************************
6 #*****************************************************************************
7 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
7 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
8 #
8 #
9 # Copyright (c) 2001 Janko Hauser <jhauser@zscout.de> and Nathaniel Gray
9 # Copyright (c) 2001 Janko Hauser <jhauser@zscout.de> and Nathaniel Gray
10 # <n8gray@caltech.edu>
10 # <n8gray@caltech.edu>
11 #
11 #
12 # Distributed under the terms of the BSD License. The full license is in
12 # Distributed under the terms of the BSD License. The full license is in
13 # the file COPYING, distributed as part of this software.
13 # the file COPYING, distributed as part of this software.
14 #*****************************************************************************
14 #*****************************************************************************
15
15
16 # Name of the package for release purposes. This is the name which labels
16 # Name of the package for release purposes. This is the name which labels
17 # the tarballs and RPMs made by distutils, so it's best to lowercase it.
17 # the tarballs and RPMs made by distutils, so it's best to lowercase it.
18 name = 'ipython'
18 name = 'ipython'
19
19
20 # For versions with substrings (like 0.6.16.svn), use an extra . to separate
20 # For versions with substrings (like 0.6.16.svn), use an extra . to separate
21 # the new substring. We have to avoid using either dashes or underscores,
21 # the new substring. We have to avoid using either dashes or underscores,
22 # because bdist_rpm does not accept dashes (an RPM) convention, and
22 # because bdist_rpm does not accept dashes (an RPM) convention, and
23 # bdist_deb does not accept underscores (a Debian convention).
23 # bdist_deb does not accept underscores (a Debian convention).
24
24
25 development = False # change this to False to do a release
25 development = False # change this to False to do a release
26 version_base = '0.9.beta3'
26 version_base = '0.9.rc1'
27 branch = 'ipython'
27 branch = 'ipython'
28 revision = '1106'
28 revision = '1124'
29
29
30 if development:
30 if development:
31 if branch == 'ipython':
31 if branch == 'ipython':
32 version = '%s.bzr.r%s' % (version_base, revision)
32 version = '%s.bzr.r%s' % (version_base, revision)
33 else:
33 else:
34 version = '%s.bzr.r%s.%s' % (version_base, revision, branch)
34 version = '%s.bzr.r%s.%s' % (version_base, revision, branch)
35 else:
35 else:
36 version = version_base
36 version = version_base
37
37
38
38
39 description = "Tools for interactive development in Python."
39 description = "Tools for interactive development in Python."
40
40
41 long_description = \
41 long_description = \
42 """
42 """
43 IPython provides a replacement for the interactive Python interpreter with
43 IPython provides a replacement for the interactive Python interpreter with
44 extra functionality.
44 extra functionality.
45
45
46 Main features:
46 Main features:
47
47
48 * Comprehensive object introspection.
48 * Comprehensive object introspection.
49
49
50 * Input history, persistent across sessions.
50 * Input history, persistent across sessions.
51
51
52 * Caching of output results during a session with automatically generated
52 * Caching of output results during a session with automatically generated
53 references.
53 references.
54
54
55 * Readline based name completion.
55 * Readline based name completion.
56
56
57 * Extensible system of 'magic' commands for controlling the environment and
57 * Extensible system of 'magic' commands for controlling the environment and
58 performing many tasks related either to IPython or the operating system.
58 performing many tasks related either to IPython or the operating system.
59
59
60 * Configuration system with easy switching between different setups (simpler
60 * Configuration system with easy switching between different setups (simpler
61 than changing $PYTHONSTARTUP environment variables every time).
61 than changing $PYTHONSTARTUP environment variables every time).
62
62
63 * Session logging and reloading.
63 * Session logging and reloading.
64
64
65 * Extensible syntax processing for special purpose situations.
65 * Extensible syntax processing for special purpose situations.
66
66
67 * Access to the system shell with user-extensible alias system.
67 * Access to the system shell with user-extensible alias system.
68
68
69 * Easily embeddable in other Python programs.
69 * Easily embeddable in other Python programs.
70
70
71 * Integrated access to the pdb debugger and the Python profiler.
71 * Integrated access to the pdb debugger and the Python profiler.
72
72
73 The latest development version is always available at the IPython subversion
73 The latest development version is always available at the IPython subversion
74 repository_.
74 repository_.
75
75
76 .. _repository: http://ipython.scipy.org/svn/ipython/ipython/trunk#egg=ipython-dev
76 .. _repository: http://ipython.scipy.org/svn/ipython/ipython/trunk#egg=ipython-dev
77 """
77 """
78
78
79 license = 'BSD'
79 license = 'BSD'
80
80
81 authors = {'Fernando' : ('Fernando Perez','fperez@colorado.edu'),
81 authors = {'Fernando' : ('Fernando Perez','fperez@colorado.edu'),
82 'Janko' : ('Janko Hauser','jhauser@zscout.de'),
82 'Janko' : ('Janko Hauser','jhauser@zscout.de'),
83 'Nathan' : ('Nathaniel Gray','n8gray@caltech.edu'),
83 'Nathan' : ('Nathaniel Gray','n8gray@caltech.edu'),
84 'Ville' : ('Ville Vainio','vivainio@gmail.com'),
84 'Ville' : ('Ville Vainio','vivainio@gmail.com'),
85 'Brian' : ('Brian E Granger', 'ellisonbg@gmail.com'),
85 'Brian' : ('Brian E Granger', 'ellisonbg@gmail.com'),
86 'Min' : ('Min Ragan-Kelley', 'benjaminrk@gmail.com')
86 'Min' : ('Min Ragan-Kelley', 'benjaminrk@gmail.com')
87 }
87 }
88
88
89 author = 'The IPython Development Team'
89 author = 'The IPython Development Team'
90
90
91 author_email = 'ipython-dev@scipy.org'
91 author_email = 'ipython-dev@scipy.org'
92
92
93 url = 'http://ipython.scipy.org'
93 url = 'http://ipython.scipy.org'
94
94
95 download_url = 'http://ipython.scipy.org/dist'
95 download_url = 'http://ipython.scipy.org/dist'
96
96
97 platforms = ['Linux','Mac OSX','Windows XP/2000/NT','Windows 95/98/ME']
97 platforms = ['Linux','Mac OSX','Windows XP/2000/NT','Windows 95/98/ME']
98
98
99 keywords = ['Interactive','Interpreter','Shell','Parallel','Distributed']
99 keywords = ['Interactive','Interpreter','Shell','Parallel','Distributed']
@@ -1,87 +1,86 b''
1 # Makefile for Sphinx documentation
1 # Makefile for Sphinx documentation
2 #
2 #
3
3
4 # You can set these variables from the command line.
4 # You can set these variables from the command line.
5 SPHINXOPTS =
5 SPHINXOPTS =
6 SPHINXBUILD = sphinx-build
6 SPHINXBUILD = sphinx-build
7 PAPER =
7 PAPER =
8
8
9 # Internal variables.
9 # Internal variables.
10 PAPEROPT_a4 = -D latex_paper_size=a4
10 PAPEROPT_a4 = -D latex_paper_size=a4
11 PAPEROPT_letter = -D latex_paper_size=letter
11 PAPEROPT_letter = -D latex_paper_size=letter
12 ALLSPHINXOPTS = -d build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
12 ALLSPHINXOPTS = -d build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
13
13
14 .PHONY: help clean html web pickle htmlhelp latex changes linkcheck
14 .PHONY: help clean html web pickle htmlhelp latex changes linkcheck
15
15
16 help:
16 help:
17 @echo "Please use \`make <target>' where <target> is one of"
17 @echo "Please use \`make <target>' where <target> is one of"
18 @echo " html to make standalone HTML files"
18 @echo " html to make standalone HTML files"
19 @echo " pickle to make pickle files (usable by e.g. sphinx-web)"
19 @echo " pickle to make pickle files (usable by e.g. sphinx-web)"
20 @echo " htmlhelp to make HTML files and a HTML help project"
20 @echo " htmlhelp to make HTML files and a HTML help project"
21 @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
21 @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
22 @echo " changes to make an overview over all changed/added/deprecated items"
22 @echo " changes to make an overview over all changed/added/deprecated items"
23 @echo " linkcheck to check all external links for integrity"
23 @echo " linkcheck to check all external links for integrity"
24 @echo
24 @echo
25 @echo "Compound utility targets:"
25 @echo "Compound utility targets:"
26 @echo "pdf latex and then runs the PDF generation"
26 @echo "pdf latex and then runs the PDF generation"
27 @echo "all html and pdf"
27 @echo "all html and pdf"
28 @echo "dist all, and then puts the results in dist/"
28 @echo "dist all, and then puts the results in dist/"
29
29
30 clean:
30 clean:
31 -rm -rf build/*
31 -rm -rf build/* dist/*
32
32
33 pdf: latex
33 pdf: latex
34 cd build/latex && make all-pdf
34 cd build/latex && make all-pdf
35
35
36 all: html pdf
36 all: html pdf
37
37
38 dist: all
38 dist: clean all
39 mkdir -p dist
39 mkdir -p dist
40 -rm -rf dist/*
40 ln build/latex/ipython.pdf dist/
41 ln build/latex/IPython.pdf dist/
42 cp -al build/html dist/
41 cp -al build/html dist/
43 @echo "Build finished. Final docs are in dist/"
42 @echo "Build finished. Final docs are in dist/"
44
43
45 html:
44 html:
46 mkdir -p build/html build/doctrees
45 mkdir -p build/html build/doctrees
47 $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) build/html
46 $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) build/html
48 @echo
47 @echo
49 @echo "Build finished. The HTML pages are in build/html."
48 @echo "Build finished. The HTML pages are in build/html."
50
49
51 pickle:
50 pickle:
52 mkdir -p build/pickle build/doctrees
51 mkdir -p build/pickle build/doctrees
53 $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) build/pickle
52 $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) build/pickle
54 @echo
53 @echo
55 @echo "Build finished; now you can process the pickle files or run"
54 @echo "Build finished; now you can process the pickle files or run"
56 @echo " sphinx-web build/pickle"
55 @echo " sphinx-web build/pickle"
57 @echo "to start the sphinx-web server."
56 @echo "to start the sphinx-web server."
58
57
59 web: pickle
58 web: pickle
60
59
61 htmlhelp:
60 htmlhelp:
62 mkdir -p build/htmlhelp build/doctrees
61 mkdir -p build/htmlhelp build/doctrees
63 $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) build/htmlhelp
62 $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) build/htmlhelp
64 @echo
63 @echo
65 @echo "Build finished; now you can run HTML Help Workshop with the" \
64 @echo "Build finished; now you can run HTML Help Workshop with the" \
66 ".hhp project file in build/htmlhelp."
65 ".hhp project file in build/htmlhelp."
67
66
68 latex:
67 latex:
69 mkdir -p build/latex build/doctrees
68 mkdir -p build/latex build/doctrees
70 $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) build/latex
69 $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) build/latex
71 @echo
70 @echo
72 @echo "Build finished; the LaTeX files are in build/latex."
71 @echo "Build finished; the LaTeX files are in build/latex."
73 @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
72 @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
74 "run these through (pdf)latex."
73 "run these through (pdf)latex."
75
74
76 changes:
75 changes:
77 mkdir -p build/changes build/doctrees
76 mkdir -p build/changes build/doctrees
78 $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) build/changes
77 $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) build/changes
79 @echo
78 @echo
80 @echo "The overview file is in build/changes."
79 @echo "The overview file is in build/changes."
81
80
82 linkcheck:
81 linkcheck:
83 mkdir -p build/linkcheck build/doctrees
82 mkdir -p build/linkcheck build/doctrees
84 $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) build/linkcheck
83 $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) build/linkcheck
85 @echo
84 @echo
86 @echo "Link check complete; look for any errors in the above output " \
85 @echo "Link check complete; look for any errors in the above output " \
87 "or in build/linkcheck/output.txt."
86 "or in build/linkcheck/output.txt."
@@ -1,247 +1,252 b''
1 .. _changes:
1 .. _changes:
2
2
3 ==========
3 ==========
4 What's new
4 What's new
5 ==========
5 ==========
6
6
7 .. contents::
7 .. contents::
8 ..
8 ..
9 1 Release 0.9
9 1 Release 0.9
10 1.1 New features
10 1.1 New features
11 1.2 Bug fixes
11 1.2 Bug fixes
12 1.3 Backwards incompatible changes
12 1.3 Backwards incompatible changes
13 1.4 Changes merged in from IPython1
13 1.4 Changes merged in from IPython1
14 1.4.1 New features
14 1.4.1 New features
15 1.4.2 Bug fixes
15 1.4.2 Bug fixes
16 1.4.3 Backwards incompatible changes
16 1.4.3 Backwards incompatible changes
17 2 Release 0.8.4
17 2 Release 0.8.4
18 3 Release 0.8.2
18 3 Release 0.8.2
19 4 Release 0.8.3
19 4 Release 0.8.3
20 5 Older releases
20 5 Older releases
21 ..
21 ..
22
22
23
23
24 Release 0.9
24 Release 0.9
25 ===========
25 ===========
26
26
27 New features
27 New features
28 ------------
28 ------------
29
29
30 * Laurent's WX application has been given a top-level script called ipython-wx,
31 and it has received numerous fixes. We expect this code to be
32 architecturally better integrated with Gael's WX 'ipython widget' over the
33 next few releases.
34
30 * The Editor synchronization work by Vivian De Smedt has been merged in. This
35 * The Editor synchronization work by Vivian De Smedt has been merged in. This
31 code adds a number of new editor hooks to synchronize with editors under
36 code adds a number of new editor hooks to synchronize with editors under
32 Windows.
37 Windows.
33
38
34 * A new, still experimental but highly functional, WX shell by Gael Varoquaux.
39 * A new, still experimental but highly functional, WX shell by Gael Varoquaux.
35 This work was sponsored by Enthought, and while it's still very new, it is
40 This work was sponsored by Enthought, and while it's still very new, it is
36 based on a more cleanly organized arhictecture of the various IPython
41 based on a more cleanly organized arhictecture of the various IPython
37 components. We will continue to develop this over the next few releases as a
42 components. We will continue to develop this over the next few releases as a
38 model for GUI components that use IPython.
43 model for GUI components that use IPython.
39
44
40 * Another GUI frontend, Cocoa based (Cocoa is the OSX native GUI framework),
45 * Another GUI frontend, Cocoa based (Cocoa is the OSX native GUI framework),
41 authored by Barry Wark. Currently the WX and the Cocoa ones have slightly
46 authored by Barry Wark. Currently the WX and the Cocoa ones have slightly
42 different internal organizations, but the whole team is working on finding
47 different internal organizations, but the whole team is working on finding
43 what the right abstraction points are for a unified codebase.
48 what the right abstraction points are for a unified codebase.
44
49
45 * As part of the frontend work, Barry Wark also implemented an experimental
50 * As part of the frontend work, Barry Wark also implemented an experimental
46 event notification system that various ipython components can use. In the
51 event notification system that various ipython components can use. In the
47 next release the implications and use patterns of this system regarding the
52 next release the implications and use patterns of this system regarding the
48 various GUI options will be worked out.
53 various GUI options will be worked out.
49
54
50 * IPython finally has a full test system, that can test docstrings with
55 * IPython finally has a full test system, that can test docstrings with
51 IPython-specific functionality. There are still a few pieces missing for it
56 IPython-specific functionality. There are still a few pieces missing for it
52 to be widely accessible to all users (so they can run the test suite at any
57 to be widely accessible to all users (so they can run the test suite at any
53 time and report problems), but it now works for the developers. We are
58 time and report problems), but it now works for the developers. We are
54 working hard on continuing to improve it, as this was probably IPython's
59 working hard on continuing to improve it, as this was probably IPython's
55 major Achilles heel (the lack of proper test coverage made it effectively
60 major Achilles heel (the lack of proper test coverage made it effectively
56 impossible to do large-scale refactoring).
61 impossible to do large-scale refactoring).
57
62
58 * The notion of a task has been completely reworked. An `ITask` interface has
63 * The notion of a task has been completely reworked. An `ITask` interface has
59 been created. This interface defines the methods that tasks need to implement.
64 been created. This interface defines the methods that tasks need to implement.
60 These methods are now responsible for things like submitting tasks and processing
65 These methods are now responsible for things like submitting tasks and processing
61 results. There are two basic task types: :class:`IPython.kernel.task.StringTask`
66 results. There are two basic task types: :class:`IPython.kernel.task.StringTask`
62 (this is the old `Task` object, but renamed) and the new
67 (this is the old `Task` object, but renamed) and the new
63 :class:`IPython.kernel.task.MapTask`, which is based on a function.
68 :class:`IPython.kernel.task.MapTask`, which is based on a function.
64 * A new interface, :class:`IPython.kernel.mapper.IMapper` has been defined to
69 * A new interface, :class:`IPython.kernel.mapper.IMapper` has been defined to
65 standardize the idea of a `map` method. This interface has a single
70 standardize the idea of a `map` method. This interface has a single
66 `map` method that has the same syntax as the built-in `map`. We have also defined
71 `map` method that has the same syntax as the built-in `map`. We have also defined
67 a `mapper` factory interface that creates objects that implement
72 a `mapper` factory interface that creates objects that implement
68 :class:`IPython.kernel.mapper.IMapper` for different controllers. Both
73 :class:`IPython.kernel.mapper.IMapper` for different controllers. Both
69 the multiengine and task controller now have mapping capabilties.
74 the multiengine and task controller now have mapping capabilties.
70 * The parallel function capabilities have been reworks. The major changes are that
75 * The parallel function capabilities have been reworks. The major changes are that
71 i) there is now an `@parallel` magic that creates parallel functions, ii)
76 i) there is now an `@parallel` magic that creates parallel functions, ii)
72 the syntax for mulitple variable follows that of `map`, iii) both the
77 the syntax for mulitple variable follows that of `map`, iii) both the
73 multiengine and task controller now have a parallel function implementation.
78 multiengine and task controller now have a parallel function implementation.
74 * All of the parallel computing capabilities from `ipython1-dev` have been merged into
79 * All of the parallel computing capabilities from `ipython1-dev` have been merged into
75 IPython proper. This resulted in the following new subpackages:
80 IPython proper. This resulted in the following new subpackages:
76 :mod:`IPython.kernel`, :mod:`IPython.kernel.core`, :mod:`IPython.config`,
81 :mod:`IPython.kernel`, :mod:`IPython.kernel.core`, :mod:`IPython.config`,
77 :mod:`IPython.tools` and :mod:`IPython.testing`.
82 :mod:`IPython.tools` and :mod:`IPython.testing`.
78 * As part of merging in the `ipython1-dev` stuff, the `setup.py` script and friends
83 * As part of merging in the `ipython1-dev` stuff, the `setup.py` script and friends
79 have been completely refactored. Now we are checking for dependencies using
84 have been completely refactored. Now we are checking for dependencies using
80 the approach that matplotlib uses.
85 the approach that matplotlib uses.
81 * The documentation has been completely reorganized to accept the documentation
86 * The documentation has been completely reorganized to accept the documentation
82 from `ipython1-dev`.
87 from `ipython1-dev`.
83 * We have switched to using Foolscap for all of our network protocols in
88 * We have switched to using Foolscap for all of our network protocols in
84 :mod:`IPython.kernel`. This gives us secure connections that are both encrypted
89 :mod:`IPython.kernel`. This gives us secure connections that are both encrypted
85 and authenticated.
90 and authenticated.
86 * We have a brand new `COPYING.txt` files that describes the IPython license
91 * We have a brand new `COPYING.txt` files that describes the IPython license
87 and copyright. The biggest change is that we are putting "The IPython
92 and copyright. The biggest change is that we are putting "The IPython
88 Development Team" as the copyright holder. We give more details about exactly
93 Development Team" as the copyright holder. We give more details about exactly
89 what this means in this file. All developer should read this and use the new
94 what this means in this file. All developer should read this and use the new
90 banner in all IPython source code files.
95 banner in all IPython source code files.
91 * sh profile: ./foo runs foo as system command, no need to do !./foo anymore
96 * sh profile: ./foo runs foo as system command, no need to do !./foo anymore
92 * String lists now support 'sort(field, nums = True)' method (to easily
97 * String lists now support 'sort(field, nums = True)' method (to easily
93 sort system command output). Try it with 'a = !ls -l ; a.sort(1, nums=1)'
98 sort system command output). Try it with 'a = !ls -l ; a.sort(1, nums=1)'
94 * '%cpaste foo' now assigns the pasted block as string list, instead of string
99 * '%cpaste foo' now assigns the pasted block as string list, instead of string
95 * The ipcluster script now run by default with no security. This is done because
100 * The ipcluster script now run by default with no security. This is done because
96 the main usage of the script is for starting things on localhost. Eventually
101 the main usage of the script is for starting things on localhost. Eventually
97 when ipcluster is able to start things on other hosts, we will put security
102 when ipcluster is able to start things on other hosts, we will put security
98 back.
103 back.
99 * 'cd --foo' searches directory history for string foo, and jumps to that dir.
104 * 'cd --foo' searches directory history for string foo, and jumps to that dir.
100 Last part of dir name is checked first. If no matches for that are found,
105 Last part of dir name is checked first. If no matches for that are found,
101 look at the whole path.
106 look at the whole path.
102
107
103 Bug fixes
108 Bug fixes
104 ---------
109 ---------
105
110
106 * The colors escapes in the multiengine client are now turned off on win32 as they
111 * The colors escapes in the multiengine client are now turned off on win32 as they
107 don't print correctly.
112 don't print correctly.
108 * The :mod:`IPython.kernel.scripts.ipengine` script was exec'ing mpi_import_statement
113 * The :mod:`IPython.kernel.scripts.ipengine` script was exec'ing mpi_import_statement
109 incorrectly, which was leading the engine to crash when mpi was enabled.
114 incorrectly, which was leading the engine to crash when mpi was enabled.
110 * A few subpackages has missing `__init__.py` files.
115 * A few subpackages has missing `__init__.py` files.
111 * The documentation is only created is Sphinx is found. Previously, the `setup.py`
116 * The documentation is only created is Sphinx is found. Previously, the `setup.py`
112 script would fail if it was missing.
117 script would fail if it was missing.
113 * Greedy 'cd' completion has been disabled again (it was enabled in 0.8.4)
118 * Greedy 'cd' completion has been disabled again (it was enabled in 0.8.4)
114
119
115
120
116 Backwards incompatible changes
121 Backwards incompatible changes
117 ------------------------------
122 ------------------------------
118
123
119 * In ipapi, the :func:`make_user_ns` function has been replaced with
124 * In ipapi, the :func:`make_user_ns` function has been replaced with
120 :func:`make_user_namespaces`, to support dict subclasses in namespace
125 :func:`make_user_namespaces`, to support dict subclasses in namespace
121 creation.
126 creation.
122
127
123 * :class:`IPython.kernel.client.Task` has been renamed
128 * :class:`IPython.kernel.client.Task` has been renamed
124 :class:`IPython.kernel.client.StringTask` to make way for new task types.
129 :class:`IPython.kernel.client.StringTask` to make way for new task types.
125 * The keyword argument `style` has been renamed `dist` in `scatter`, `gather`
130 * The keyword argument `style` has been renamed `dist` in `scatter`, `gather`
126 and `map`.
131 and `map`.
127 * Renamed the values that the rename `dist` keyword argument can have from
132 * Renamed the values that the rename `dist` keyword argument can have from
128 `'basic'` to `'b'`.
133 `'basic'` to `'b'`.
129 * IPython has a larger set of dependencies if you want all of its capabilities.
134 * IPython has a larger set of dependencies if you want all of its capabilities.
130 See the `setup.py` script for details.
135 See the `setup.py` script for details.
131 * The constructors for :class:`IPython.kernel.client.MultiEngineClient` and
136 * The constructors for :class:`IPython.kernel.client.MultiEngineClient` and
132 :class:`IPython.kernel.client.TaskClient` no longer take the (ip,port) tuple.
137 :class:`IPython.kernel.client.TaskClient` no longer take the (ip,port) tuple.
133 Instead they take the filename of a file that contains the FURL for that
138 Instead they take the filename of a file that contains the FURL for that
134 client. If the FURL file is in your IPYTHONDIR, it will be found automatically
139 client. If the FURL file is in your IPYTHONDIR, it will be found automatically
135 and the constructor can be left empty.
140 and the constructor can be left empty.
136 * The asynchronous clients in :mod:`IPython.kernel.asyncclient` are now created
141 * The asynchronous clients in :mod:`IPython.kernel.asyncclient` are now created
137 using the factory functions :func:`get_multiengine_client` and
142 using the factory functions :func:`get_multiengine_client` and
138 :func:`get_task_client`. These return a `Deferred` to the actual client.
143 :func:`get_task_client`. These return a `Deferred` to the actual client.
139 * The command line options to `ipcontroller` and `ipengine` have changed to
144 * The command line options to `ipcontroller` and `ipengine` have changed to
140 reflect the new Foolscap network protocol and the FURL files. Please see the
145 reflect the new Foolscap network protocol and the FURL files. Please see the
141 help for these scripts for details.
146 help for these scripts for details.
142 * The configuration files for the kernel have changed because of the Foolscap stuff.
147 * The configuration files for the kernel have changed because of the Foolscap stuff.
143 If you were using custom config files before, you should delete them and regenerate
148 If you were using custom config files before, you should delete them and regenerate
144 new ones.
149 new ones.
145
150
146 Changes merged in from IPython1
151 Changes merged in from IPython1
147 -------------------------------
152 -------------------------------
148
153
149 New features
154 New features
150 ............
155 ............
151
156
152 * Much improved ``setup.py`` and ``setupegg.py`` scripts. Because Twisted
157 * Much improved ``setup.py`` and ``setupegg.py`` scripts. Because Twisted
153 and zope.interface are now easy installable, we can declare them as dependencies
158 and zope.interface are now easy installable, we can declare them as dependencies
154 in our setupegg.py script.
159 in our setupegg.py script.
155 * IPython is now compatible with Twisted 2.5.0 and 8.x.
160 * IPython is now compatible with Twisted 2.5.0 and 8.x.
156 * Added a new example of how to use :mod:`ipython1.kernel.asynclient`.
161 * Added a new example of how to use :mod:`ipython1.kernel.asynclient`.
157 * Initial draft of a process daemon in :mod:`ipython1.daemon`. This has not
162 * Initial draft of a process daemon in :mod:`ipython1.daemon`. This has not
158 been merged into IPython and is still in `ipython1-dev`.
163 been merged into IPython and is still in `ipython1-dev`.
159 * The ``TaskController`` now has methods for getting the queue status.
164 * The ``TaskController`` now has methods for getting the queue status.
160 * The ``TaskResult`` objects not have information about how long the task
165 * The ``TaskResult`` objects not have information about how long the task
161 took to run.
166 took to run.
162 * We are attaching additional attributes to exceptions ``(_ipython_*)`` that
167 * We are attaching additional attributes to exceptions ``(_ipython_*)`` that
163 we use to carry additional info around.
168 we use to carry additional info around.
164 * New top-level module :mod:`asyncclient` that has asynchronous versions (that
169 * New top-level module :mod:`asyncclient` that has asynchronous versions (that
165 return deferreds) of the client classes. This is designed to users who want
170 return deferreds) of the client classes. This is designed to users who want
166 to run their own Twisted reactor
171 to run their own Twisted reactor
167 * All the clients in :mod:`client` are now based on Twisted. This is done by
172 * All the clients in :mod:`client` are now based on Twisted. This is done by
168 running the Twisted reactor in a separate thread and using the
173 running the Twisted reactor in a separate thread and using the
169 :func:`blockingCallFromThread` function that is in recent versions of Twisted.
174 :func:`blockingCallFromThread` function that is in recent versions of Twisted.
170 * Functions can now be pushed/pulled to/from engines using
175 * Functions can now be pushed/pulled to/from engines using
171 :meth:`MultiEngineClient.push_function` and :meth:`MultiEngineClient.pull_function`.
176 :meth:`MultiEngineClient.push_function` and :meth:`MultiEngineClient.pull_function`.
172 * Gather/scatter are now implemented in the client to reduce the work load
177 * Gather/scatter are now implemented in the client to reduce the work load
173 of the controller and improve performance.
178 of the controller and improve performance.
174 * Complete rewrite of the IPython docuementation. All of the documentation
179 * Complete rewrite of the IPython docuementation. All of the documentation
175 from the IPython website has been moved into docs/source as restructured
180 from the IPython website has been moved into docs/source as restructured
176 text documents. PDF and HTML documentation are being generated using
181 text documents. PDF and HTML documentation are being generated using
177 Sphinx.
182 Sphinx.
178 * New developer oriented documentation: development guidelines and roadmap.
183 * New developer oriented documentation: development guidelines and roadmap.
179 * Traditional ``ChangeLog`` has been changed to a more useful ``changes.txt`` file
184 * Traditional ``ChangeLog`` has been changed to a more useful ``changes.txt`` file
180 that is organized by release and is meant to provide something more relevant
185 that is organized by release and is meant to provide something more relevant
181 for users.
186 for users.
182
187
183 Bug fixes
188 Bug fixes
184 .........
189 .........
185
190
186 * Created a proper ``MANIFEST.in`` file to create source distributions.
191 * Created a proper ``MANIFEST.in`` file to create source distributions.
187 * Fixed a bug in the ``MultiEngine`` interface. Previously, multi-engine
192 * Fixed a bug in the ``MultiEngine`` interface. Previously, multi-engine
188 actions were being collected with a :class:`DeferredList` with
193 actions were being collected with a :class:`DeferredList` with
189 ``fireononeerrback=1``. This meant that methods were returning
194 ``fireononeerrback=1``. This meant that methods were returning
190 before all engines had given their results. This was causing extremely odd
195 before all engines had given their results. This was causing extremely odd
191 bugs in certain cases. To fix this problem, we have 1) set
196 bugs in certain cases. To fix this problem, we have 1) set
192 ``fireononeerrback=0`` to make sure all results (or exceptions) are in
197 ``fireononeerrback=0`` to make sure all results (or exceptions) are in
193 before returning and 2) introduced a :exc:`CompositeError` exception
198 before returning and 2) introduced a :exc:`CompositeError` exception
194 that wraps all of the engine exceptions. This is a huge change as it means
199 that wraps all of the engine exceptions. This is a huge change as it means
195 that users will have to catch :exc:`CompositeError` rather than the actual
200 that users will have to catch :exc:`CompositeError` rather than the actual
196 exception.
201 exception.
197
202
198 Backwards incompatible changes
203 Backwards incompatible changes
199 ..............................
204 ..............................
200
205
201 * All names have been renamed to conform to the lowercase_with_underscore
206 * All names have been renamed to conform to the lowercase_with_underscore
202 convention. This will require users to change references to all names like
207 convention. This will require users to change references to all names like
203 ``queueStatus`` to ``queue_status``.
208 ``queueStatus`` to ``queue_status``.
204 * Previously, methods like :meth:`MultiEngineClient.push` and
209 * Previously, methods like :meth:`MultiEngineClient.push` and
205 :meth:`MultiEngineClient.push` used ``*args`` and ``**kwargs``. This was
210 :meth:`MultiEngineClient.push` used ``*args`` and ``**kwargs``. This was
206 becoming a problem as we weren't able to introduce new keyword arguments into
211 becoming a problem as we weren't able to introduce new keyword arguments into
207 the API. Now these methods simple take a dict or sequence. This has also allowed
212 the API. Now these methods simple take a dict or sequence. This has also allowed
208 us to get rid of the ``*All`` methods like :meth:`pushAll` and :meth:`pullAll`.
213 us to get rid of the ``*All`` methods like :meth:`pushAll` and :meth:`pullAll`.
209 These things are now handled with the ``targets`` keyword argument that defaults
214 These things are now handled with the ``targets`` keyword argument that defaults
210 to ``'all'``.
215 to ``'all'``.
211 * The :attr:`MultiEngineClient.magicTargets` has been renamed to
216 * The :attr:`MultiEngineClient.magicTargets` has been renamed to
212 :attr:`MultiEngineClient.targets`.
217 :attr:`MultiEngineClient.targets`.
213 * All methods in the MultiEngine interface now accept the optional keyword argument
218 * All methods in the MultiEngine interface now accept the optional keyword argument
214 ``block``.
219 ``block``.
215 * Renamed :class:`RemoteController` to :class:`MultiEngineClient` and
220 * Renamed :class:`RemoteController` to :class:`MultiEngineClient` and
216 :class:`TaskController` to :class:`TaskClient`.
221 :class:`TaskController` to :class:`TaskClient`.
217 * Renamed the top-level module from :mod:`api` to :mod:`client`.
222 * Renamed the top-level module from :mod:`api` to :mod:`client`.
218 * Most methods in the multiengine interface now raise a :exc:`CompositeError` exception
223 * Most methods in the multiengine interface now raise a :exc:`CompositeError` exception
219 that wraps the user's exceptions, rather than just raising the raw user's exception.
224 that wraps the user's exceptions, rather than just raising the raw user's exception.
220 * Changed the ``setupNS`` and ``resultNames`` in the ``Task`` class to ``push``
225 * Changed the ``setupNS`` and ``resultNames`` in the ``Task`` class to ``push``
221 and ``pull``.
226 and ``pull``.
222
227
223 Release 0.8.4
228 Release 0.8.4
224 =============
229 =============
225
230
226 Someone needs to describe what went into 0.8.4.
231 Someone needs to describe what went into 0.8.4.
227
232
228 Release 0.8.2
233 Release 0.8.2
229 =============
234 =============
230
235
231 * %pushd/%popd behave differently; now "pushd /foo" pushes CURRENT directory
236 * %pushd/%popd behave differently; now "pushd /foo" pushes CURRENT directory
232 and jumps to /foo. The current behaviour is closer to the documented
237 and jumps to /foo. The current behaviour is closer to the documented
233 behaviour, and should not trip anyone.
238 behaviour, and should not trip anyone.
234
239
235 Release 0.8.3
240 Release 0.8.3
236 =============
241 =============
237
242
238 * pydb is now disabled by default (due to %run -d problems). You can enable
243 * pydb is now disabled by default (due to %run -d problems). You can enable
239 it by passing -pydb command line argument to IPython. Note that setting
244 it by passing -pydb command line argument to IPython. Note that setting
240 it in config file won't work.
245 it in config file won't work.
241
246
242 Older releases
247 Older releases
243 ==============
248 ==============
244
249
245 Changes in earlier releases of IPython are described in the older file ``ChangeLog``.
250 Changes in earlier releases of IPython are described in the older file ``ChangeLog``.
246 Please refer to this document for details.
251 Please refer to this document for details.
247
252
@@ -1,180 +1,180 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 #
2 #
3 # IPython documentation build configuration file, created by
3 # IPython documentation build configuration file, created by
4 # sphinx-quickstart on Thu May 8 16:45:02 2008.
4 # sphinx-quickstart on Thu May 8 16:45:02 2008.
5
5
6 # NOTE: This file has been edited manually from the auto-generated one from
6 # NOTE: This file has been edited manually from the auto-generated one from
7 # sphinx. Do NOT delete and re-generate. If any changes from sphinx are
7 # sphinx. Do NOT delete and re-generate. If any changes from sphinx are
8 # needed, generate a scratch one and merge by hand any new fields needed.
8 # needed, generate a scratch one and merge by hand any new fields needed.
9
9
10 #
10 #
11 # This file is execfile()d with the current directory set to its containing dir.
11 # This file is execfile()d with the current directory set to its containing dir.
12 #
12 #
13 # The contents of this file are pickled, so don't put values in the namespace
13 # The contents of this file are pickled, so don't put values in the namespace
14 # that aren't pickleable (module imports are okay, they're removed automatically).
14 # that aren't pickleable (module imports are okay, they're removed automatically).
15 #
15 #
16 # All configuration values have a default value; values that are commented out
16 # All configuration values have a default value; values that are commented out
17 # serve to show the default value.
17 # serve to show the default value.
18
18
19 import sys, os
19 import sys, os
20
20
21 # If your extensions are in another directory, add it here. If the directory
21 # If your extensions are in another directory, add it here. If the directory
22 # is relative to the documentation root, use os.path.abspath to make it
22 # is relative to the documentation root, use os.path.abspath to make it
23 # absolute, like shown here.
23 # absolute, like shown here.
24 #sys.path.append(os.path.abspath('some/directory'))
24 #sys.path.append(os.path.abspath('some/directory'))
25
25
26 # We load the ipython release info into a dict by explicit execution
26 # We load the ipython release info into a dict by explicit execution
27 iprelease = {}
27 iprelease = {}
28 execfile('../../IPython/Release.py',iprelease)
28 execfile('../../IPython/Release.py',iprelease)
29
29
30 # General configuration
30 # General configuration
31 # ---------------------
31 # ---------------------
32
32
33 # Add any Sphinx extension module names here, as strings. They can be extensions
33 # Add any Sphinx extension module names here, as strings. They can be extensions
34 # coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
34 # coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
35 #extensions = []
35 #extensions = []
36
36
37 # Add any paths that contain templates here, relative to this directory.
37 # Add any paths that contain templates here, relative to this directory.
38 templates_path = ['_templates']
38 templates_path = ['_templates']
39
39
40 # The suffix of source filenames.
40 # The suffix of source filenames.
41 source_suffix = '.txt'
41 source_suffix = '.txt'
42
42
43 # The master toctree document.
43 # The master toctree document.
44 master_doc = 'index'
44 master_doc = 'index'
45
45
46 # General substitutions.
46 # General substitutions.
47 project = 'IPython'
47 project = 'IPython'
48 copyright = '2008, The IPython Development Team'
48 copyright = '2008, The IPython Development Team'
49
49
50 # The default replacements for |version| and |release|, also used in various
50 # The default replacements for |version| and |release|, also used in various
51 # other places throughout the built documents.
51 # other places throughout the built documents.
52 #
52 #
53 # The full version, including alpha/beta/rc tags.
53 # The full version, including alpha/beta/rc tags.
54 release = iprelease['version']
54 release = iprelease['version']
55 # The short X.Y version.
55 # The short X.Y version.
56 version = '.'.join(release.split('.',2)[:2])
56 version = '.'.join(release.split('.',2)[:2])
57
57
58
58
59 # There are two options for replacing |today|: either, you set today to some
59 # There are two options for replacing |today|: either, you set today to some
60 # non-false value, then it is used:
60 # non-false value, then it is used:
61 #today = ''
61 #today = ''
62 # Else, today_fmt is used as the format for a strftime call.
62 # Else, today_fmt is used as the format for a strftime call.
63 today_fmt = '%B %d, %Y'
63 today_fmt = '%B %d, %Y'
64
64
65 # List of documents that shouldn't be included in the build.
65 # List of documents that shouldn't be included in the build.
66 #unused_docs = []
66 #unused_docs = []
67
67
68 # List of directories, relative to source directories, that shouldn't be searched
68 # List of directories, relative to source directories, that shouldn't be searched
69 # for source files.
69 # for source files.
70 #exclude_dirs = []
70 #exclude_dirs = []
71
71
72 # If true, '()' will be appended to :func: etc. cross-reference text.
72 # If true, '()' will be appended to :func: etc. cross-reference text.
73 #add_function_parentheses = True
73 #add_function_parentheses = True
74
74
75 # If true, the current module name will be prepended to all description
75 # If true, the current module name will be prepended to all description
76 # unit titles (such as .. function::).
76 # unit titles (such as .. function::).
77 #add_module_names = True
77 #add_module_names = True
78
78
79 # If true, sectionauthor and moduleauthor directives will be shown in the
79 # If true, sectionauthor and moduleauthor directives will be shown in the
80 # output. They are ignored by default.
80 # output. They are ignored by default.
81 #show_authors = False
81 #show_authors = False
82
82
83 # The name of the Pygments (syntax highlighting) style to use.
83 # The name of the Pygments (syntax highlighting) style to use.
84 pygments_style = 'sphinx'
84 pygments_style = 'sphinx'
85
85
86
86
87 # Options for HTML output
87 # Options for HTML output
88 # -----------------------
88 # -----------------------
89
89
90 # The style sheet to use for HTML and HTML Help pages. A file of that name
90 # The style sheet to use for HTML and HTML Help pages. A file of that name
91 # must exist either in Sphinx' static/ path, or in one of the custom paths
91 # must exist either in Sphinx' static/ path, or in one of the custom paths
92 # given in html_static_path.
92 # given in html_static_path.
93 html_style = 'default.css'
93 html_style = 'default.css'
94
94
95 # The name for this set of Sphinx documents. If None, it defaults to
95 # The name for this set of Sphinx documents. If None, it defaults to
96 # "<project> v<release> documentation".
96 # "<project> v<release> documentation".
97 #html_title = None
97 #html_title = None
98
98
99 # The name of an image file (within the static path) to place at the top of
99 # The name of an image file (within the static path) to place at the top of
100 # the sidebar.
100 # the sidebar.
101 #html_logo = None
101 #html_logo = None
102
102
103 # Add any paths that contain custom static files (such as style sheets) here,
103 # Add any paths that contain custom static files (such as style sheets) here,
104 # relative to this directory. They are copied after the builtin static files,
104 # relative to this directory. They are copied after the builtin static files,
105 # so a file named "default.css" will overwrite the builtin "default.css".
105 # so a file named "default.css" will overwrite the builtin "default.css".
106 html_static_path = ['_static']
106 html_static_path = ['_static']
107
107
108 # If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
108 # If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
109 # using the given strftime format.
109 # using the given strftime format.
110 html_last_updated_fmt = '%b %d, %Y'
110 html_last_updated_fmt = '%b %d, %Y'
111
111
112 # If true, SmartyPants will be used to convert quotes and dashes to
112 # If true, SmartyPants will be used to convert quotes and dashes to
113 # typographically correct entities.
113 # typographically correct entities.
114 #html_use_smartypants = True
114 #html_use_smartypants = True
115
115
116 # Custom sidebar templates, maps document names to template names.
116 # Custom sidebar templates, maps document names to template names.
117 #html_sidebars = {}
117 #html_sidebars = {}
118
118
119 # Additional templates that should be rendered to pages, maps page names to
119 # Additional templates that should be rendered to pages, maps page names to
120 # template names.
120 # template names.
121 #html_additional_pages = {}
121 #html_additional_pages = {}
122
122
123 # If false, no module index is generated.
123 # If false, no module index is generated.
124 #html_use_modindex = True
124 #html_use_modindex = True
125
125
126 # If true, the reST sources are included in the HTML build as _sources/<name>.
126 # If true, the reST sources are included in the HTML build as _sources/<name>.
127 #html_copy_source = True
127 #html_copy_source = True
128
128
129 # If true, an OpenSearch description file will be output, and all pages will
129 # If true, an OpenSearch description file will be output, and all pages will
130 # contain a <link> tag referring to it. The value of this option must be the
130 # contain a <link> tag referring to it. The value of this option must be the
131 # base URL from which the finished HTML is served.
131 # base URL from which the finished HTML is served.
132 #html_use_opensearch = ''
132 #html_use_opensearch = ''
133
133
134 # If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
134 # If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
135 #html_file_suffix = ''
135 #html_file_suffix = ''
136
136
137 # Output file base name for HTML help builder.
137 # Output file base name for HTML help builder.
138 htmlhelp_basename = 'IPythondoc'
138 htmlhelp_basename = 'IPythondoc'
139
139
140
140
141 # Options for LaTeX output
141 # Options for LaTeX output
142 # ------------------------
142 # ------------------------
143
143
144 # The paper size ('letter' or 'a4').
144 # The paper size ('letter' or 'a4').
145 latex_paper_size = 'letter'
145 latex_paper_size = 'letter'
146
146
147 # The font size ('10pt', '11pt' or '12pt').
147 # The font size ('10pt', '11pt' or '12pt').
148 latex_font_size = '11pt'
148 latex_font_size = '11pt'
149
149
150 # Grouping the document tree into LaTeX files. List of tuples
150 # Grouping the document tree into LaTeX files. List of tuples
151 # (source start file, target name, title, author, document class [howto/manual]).
151 # (source start file, target name, title, author, document class [howto/manual]).
152
152
153 latex_documents = [ ('index', 'IPython.tex', 'IPython Documentation',
153 latex_documents = [ ('index', 'ipython.tex', 'IPython Documentation',
154 ur"""Brian Granger, Fernando PΓ©rez and Ville Vainio\\
154 ur"""Brian Granger, Fernando PΓ©rez and Ville Vainio\\
155 \ \\
155 \ \\
156 With contributions from:\\
156 With contributions from:\\
157 Benjamin Ragan-Kelley.""",
157 Benjamin Ragan-Kelley and Barry Wark.""",
158 'manual'),
158 'manual'),
159 ]
159 ]
160
160
161 # The name of an image file (relative to this directory) to place at the top of
161 # The name of an image file (relative to this directory) to place at the top of
162 # the title page.
162 # the title page.
163 #latex_logo = None
163 #latex_logo = None
164
164
165 # For "manual" documents, if this is true, then toplevel headings are parts,
165 # For "manual" documents, if this is true, then toplevel headings are parts,
166 # not chapters.
166 # not chapters.
167 #latex_use_parts = False
167 #latex_use_parts = False
168
168
169 # Additional stuff for the LaTeX preamble.
169 # Additional stuff for the LaTeX preamble.
170 #latex_preamble = ''
170 #latex_preamble = ''
171
171
172 # Documents to append as an appendix to all manuals.
172 # Documents to append as an appendix to all manuals.
173 #latex_appendices = []
173 #latex_appendices = []
174
174
175 # If false, no module index is generated.
175 # If false, no module index is generated.
176 #latex_use_modindex = True
176 #latex_use_modindex = True
177
177
178
178
179 # Cleanup: delete release info to avoid pickling errors from sphinx
179 # Cleanup: delete release info to avoid pickling errors from sphinx
180 del iprelease
180 del iprelease
@@ -1,178 +1,189 b''
1 #!/usr/bin/env python
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
2 # -*- coding: utf-8 -*-
3 """Setup script for IPython.
3 """Setup script for IPython.
4
4
5 Under Posix environments it works like a typical setup.py script.
5 Under Posix environments it works like a typical setup.py script.
6 Under Windows, the command sdist is not supported, since IPython
6 Under Windows, the command sdist is not supported, since IPython
7 requires utilities which are not available under Windows."""
7 requires utilities which are not available under Windows."""
8
8
9 #-------------------------------------------------------------------------------
9 #-------------------------------------------------------------------------------
10 # Copyright (C) 2008 The IPython Development Team
10 # Copyright (C) 2008 The IPython Development Team
11 #
11 #
12 # Distributed under the terms of the BSD License. The full license is in
12 # Distributed under the terms of the BSD License. The full license is in
13 # the file COPYING, distributed as part of this software.
13 # the file COPYING, distributed as part of this software.
14 #-------------------------------------------------------------------------------
14 #-------------------------------------------------------------------------------
15
15
16 #-------------------------------------------------------------------------------
16 #-------------------------------------------------------------------------------
17 # Imports
17 # Imports
18 #-------------------------------------------------------------------------------
18 #-------------------------------------------------------------------------------
19
19
20 # Stdlib imports
20 # Stdlib imports
21 import os
21 import os
22 import sys
22 import sys
23
23
24 from glob import glob
24 from glob import glob
25
25
26 # BEFORE importing distutils, remove MANIFEST. distutils doesn't properly
26 # BEFORE importing distutils, remove MANIFEST. distutils doesn't properly
27 # update it when the contents of directories change.
27 # update it when the contents of directories change.
28 if os.path.exists('MANIFEST'): os.remove('MANIFEST')
28 if os.path.exists('MANIFEST'): os.remove('MANIFEST')
29
29
30 from distutils.core import setup
30 from distutils.core import setup
31
31
32 # Local imports
32 # Local imports
33 from IPython.genutils import target_update
33 from IPython.genutils import target_update
34
34
35 from setupbase import (
35 from setupbase import (
36 setup_args,
36 setup_args,
37 find_packages,
37 find_packages,
38 find_package_data,
38 find_package_data,
39 find_scripts,
39 find_scripts,
40 find_data_files,
40 find_data_files,
41 check_for_dependencies
41 check_for_dependencies
42 )
42 )
43
43
44 isfile = os.path.isfile
44 isfile = os.path.isfile
45
45
46 #-------------------------------------------------------------------------------
46 #-------------------------------------------------------------------------------
47 # Handle OS specific things
47 # Handle OS specific things
48 #-------------------------------------------------------------------------------
48 #-------------------------------------------------------------------------------
49
49
50 if os.name == 'posix':
50 if os.name == 'posix':
51 os_name = 'posix'
51 os_name = 'posix'
52 elif os.name in ['nt','dos']:
52 elif os.name in ['nt','dos']:
53 os_name = 'windows'
53 os_name = 'windows'
54 else:
54 else:
55 print 'Unsupported operating system:',os.name
55 print 'Unsupported operating system:',os.name
56 sys.exit(1)
56 sys.exit(1)
57
57
58 # Under Windows, 'sdist' has not been supported. Now that the docs build with
58 # Under Windows, 'sdist' has not been supported. Now that the docs build with
59 # Sphinx it might work, but let's not turn it on until someone confirms that it
59 # Sphinx it might work, but let's not turn it on until someone confirms that it
60 # actually works.
60 # actually works.
61 if os_name == 'windows' and 'sdist' in sys.argv:
61 if os_name == 'windows' and 'sdist' in sys.argv:
62 print 'The sdist command is not available under Windows. Exiting.'
62 print 'The sdist command is not available under Windows. Exiting.'
63 sys.exit(1)
63 sys.exit(1)
64
64
65 #-------------------------------------------------------------------------------
65 #-------------------------------------------------------------------------------
66 # Things related to the IPython documentation
66 # Things related to the IPython documentation
67 #-------------------------------------------------------------------------------
67 #-------------------------------------------------------------------------------
68
68
69 # update the manuals when building a source dist
69 # update the manuals when building a source dist
70 if len(sys.argv) >= 2 and sys.argv[1] in ('sdist','bdist_rpm'):
70 if len(sys.argv) >= 2 and sys.argv[1] in ('sdist','bdist_rpm'):
71 import textwrap
71 import textwrap
72
72
73 # List of things to be updated. Each entry is a triplet of args for
73 # List of things to be updated. Each entry is a triplet of args for
74 # target_update()
74 # target_update()
75 to_update = [
75 to_update = [
76 # FIXME - Disabled for now: we need to redo an automatic way
76 # FIXME - Disabled for now: we need to redo an automatic way
77 # of generating the magic info inside the rst.
77 # of generating the magic info inside the rst.
78 #('docs/magic.tex',
78 #('docs/magic.tex',
79 #['IPython/Magic.py'],
79 #['IPython/Magic.py'],
80 #"cd doc && ./update_magic.sh" ),
80 #"cd doc && ./update_magic.sh" ),
81
81
82 ('docs/man/ipython.1.gz',
82 ('docs/man/ipython.1.gz',
83 ['docs/man/ipython.1'],
83 ['docs/man/ipython.1'],
84 "cd docs/man && gzip -9c ipython.1 > ipython.1.gz"),
84 "cd docs/man && gzip -9c ipython.1 > ipython.1.gz"),
85
85
86 ('docs/man/pycolor.1.gz',
86 ('docs/man/pycolor.1.gz',
87 ['docs/man/pycolor.1'],
87 ['docs/man/pycolor.1'],
88 "cd docs/man && gzip -9c pycolor.1 > pycolor.1.gz"),
88 "cd docs/man && gzip -9c pycolor.1 > pycolor.1.gz"),
89 ]
89 ]
90
90
91 # Only build the docs is sphinx is present
91 # Only build the docs if sphinx is present
92 try:
92 try:
93 import sphinx
93 import sphinx
94 except ImportError:
94 except ImportError:
95 pass
95 pass
96 else:
96 else:
97 pass
97 # The Makefile calls the do_sphinx scripts to build html and pdf, so
98 # BEG: This is disabled as I am not sure what to depend on.
98 # just one target is enough to cover all manual generation
99 # I actually don't think we should be automatically building
99
100 # the docs for people.
100 # First, compute all the dependencies that can force us to rebuild the
101 # The do_sphinx scripts builds html and pdf, so just one
101 # docs. Start with the main release file that contains metadata
102 # target is enough to cover all manual generation
102 docdeps = ['IPython/Release.py']
103 # to_update.append(
103 # Inculde all the reST sources
104 # ('docs/manual/ipython.pdf',
104 pjoin = os.path.join
105 # ['IPython/Release.py','docs/source/ipython.rst'],
105 for dirpath,dirnames,filenames in os.walk('docs/source'):
106 # "cd docs && python do_sphinx.py")
106 if dirpath in ['_static','_templates']:
107 # )
107 continue
108 docdeps += [ pjoin(dirpath,f) for f in filenames
109 if f.endswith('.txt') ]
110 # and the examples
111 for dirpath,dirnames,filenames in os.walk('docs/example'):
112 docdeps += [ pjoin(dirpath,f) for f in filenames
113 if not f.endswith('~') ]
114 # then, make them all dependencies for the main PDF (the html will get
115 # auto-generated as well).
116 to_update.append(
117 ('docs/dist/ipython.pdf',
118 docdeps,
119 "cd docs && make dist")
120 )
108
121
109 [ target_update(*t) for t in to_update ]
122 [ target_update(*t) for t in to_update ]
110
123
111 # Build the docs
112 os.system('cd docs && make dist')
113
124
114 #---------------------------------------------------------------------------
125 #---------------------------------------------------------------------------
115 # Find all the packages, package data, scripts and data_files
126 # Find all the packages, package data, scripts and data_files
116 #---------------------------------------------------------------------------
127 #---------------------------------------------------------------------------
117
128
118 packages = find_packages()
129 packages = find_packages()
119 package_data = find_package_data()
130 package_data = find_package_data()
120 scripts = find_scripts()
131 scripts = find_scripts()
121 data_files = find_data_files()
132 data_files = find_data_files()
122
133
123 #---------------------------------------------------------------------------
134 #---------------------------------------------------------------------------
124 # Handle dependencies and setuptools specific things
135 # Handle dependencies and setuptools specific things
125 #---------------------------------------------------------------------------
136 #---------------------------------------------------------------------------
126
137
127 # This dict is used for passing extra arguments that are setuptools
138 # This dict is used for passing extra arguments that are setuptools
128 # specific to setup
139 # specific to setup
129 setuptools_extra_args = {}
140 setuptools_extra_args = {}
130
141
131 if 'setuptools' in sys.modules:
142 if 'setuptools' in sys.modules:
132 setuptools_extra_args['zip_safe'] = False
143 setuptools_extra_args['zip_safe'] = False
133 setuptools_extra_args['entry_points'] = {
144 setuptools_extra_args['entry_points'] = {
134 'console_scripts': [
145 'console_scripts': [
135 'ipython = IPython.ipapi:launch_new_instance',
146 'ipython = IPython.ipapi:launch_new_instance',
136 'pycolor = IPython.PyColorize:main',
147 'pycolor = IPython.PyColorize:main',
137 'ipcontroller = IPython.kernel.scripts.ipcontroller:main',
148 'ipcontroller = IPython.kernel.scripts.ipcontroller:main',
138 'ipengine = IPython.kernel.scripts.ipengine:main',
149 'ipengine = IPython.kernel.scripts.ipengine:main',
139 'ipcluster = IPython.kernel.scripts.ipcluster:main',
150 'ipcluster = IPython.kernel.scripts.ipcluster:main',
140 'ipythonx = IPython.frontend.wx.ipythonx:main',
151 'ipythonx = IPython.frontend.wx.ipythonx:main',
141 'iptest = IPython.testing.iptest:main',
152 'iptest = IPython.testing.iptest:main',
142 ]
153 ]
143 }
154 }
144 setup_args['extras_require'] = dict(
155 setup_args['extras_require'] = dict(
145 kernel = [
156 kernel = [
146 'zope.interface>=3.4.1',
157 'zope.interface>=3.4.1',
147 'Twisted>=8.0.1',
158 'Twisted>=8.0.1',
148 'foolscap>=0.2.6'
159 'foolscap>=0.2.6'
149 ],
160 ],
150 doc='Sphinx>=0.3',
161 doc='Sphinx>=0.3',
151 test='nose>=0.10.1',
162 test='nose>=0.10.1',
152 security='pyOpenSSL>=0.6'
163 security='pyOpenSSL>=0.6'
153 )
164 )
154 # Allow setuptools to handle the scripts
165 # Allow setuptools to handle the scripts
155 scripts = []
166 scripts = []
156 else:
167 else:
157 # package_data of setuptools was introduced to distutils in 2.4
168 # package_data of setuptools was introduced to distutils in 2.4
158 cfgfiles = filter(isfile, glob('IPython/UserConfig/*'))
169 cfgfiles = filter(isfile, glob('IPython/UserConfig/*'))
159 if sys.version_info < (2,4):
170 if sys.version_info < (2,4):
160 data_files.append(('lib', 'IPython/UserConfig', cfgfiles))
171 data_files.append(('lib', 'IPython/UserConfig', cfgfiles))
161 # If we are running without setuptools, call this function which will
172 # If we are running without setuptools, call this function which will
162 # check for dependencies an inform the user what is needed. This is
173 # check for dependencies an inform the user what is needed. This is
163 # just to make life easy for users.
174 # just to make life easy for users.
164 check_for_dependencies()
175 check_for_dependencies()
165
176
166
177
167 #---------------------------------------------------------------------------
178 #---------------------------------------------------------------------------
168 # Do the actual setup now
179 # Do the actual setup now
169 #---------------------------------------------------------------------------
180 #---------------------------------------------------------------------------
170
181
171 setup_args['packages'] = packages
182 setup_args['packages'] = packages
172 setup_args['package_data'] = package_data
183 setup_args['package_data'] = package_data
173 setup_args['scripts'] = scripts
184 setup_args['scripts'] = scripts
174 setup_args['data_files'] = data_files
185 setup_args['data_files'] = data_files
175 setup_args.update(setuptools_extra_args)
186 setup_args.update(setuptools_extra_args)
176
187
177 if __name__ == '__main__':
188 if __name__ == '__main__':
178 setup(**setup_args)
189 setup(**setup_args)
@@ -1,101 +1,60 b''
1 #!/bin/sh
1 #!/bin/sh
2 # IPython release script
2 # IPython release script
3
3
4 PYVER=`python -V 2>&1 | awk '{print $2}' | awk -F '.' '{print $1$2}' `
4 PYVER=`python -V 2>&1 | awk '{print $2}' | awk -F '.' '{print $1$2}' `
5 version=`ipython -Version`
5 version=`ipython -Version`
6 ipdir=~/ipython/ipython
6 ipdir=~/ipython/ipython
7 ipbackupdir=~/ipython/backup
7 ipbackupdir=~/ipython/backup
8
8
9 echo
9 echo
10 echo "Releasing IPython version $version"
10 echo "Releasing IPython version $version"
11 echo "=================================="
11 echo "=================================="
12
12
13 echo "Marking ChangeLog with release information and making NEWS file..."
13 echo "Marking ChangeLog with release information and making NEWS file..."
14
14
15 # Stamp changelog and save a copy of the status at each version, in case later
16 # we want the NEWS file to start from a point before the very last release (if
17 # very small interim releases have no significant changes).
18
19 cd $ipdir/doc
20 cp ChangeLog ChangeLog.old
21 cp ChangeLog ChangeLog.$version
22 daystamp=`date +%Y-%m-%d`
23 echo $daystamp " ***" Released version $version > ChangeLog
24 echo >> ChangeLog
25 cat ChangeLog.old >> ChangeLog
26 rm ChangeLog.old
27
28 # Build NEWS file
29 echo "Changes between the last two releases (major or minor)" > NEWS
30 echo "Note that this is an auto-generated diff of the ChangeLogs" >> NEWS
31 echo >> NEWS
32 diff ChangeLog.previous ChangeLog | grep -v '^0a' | sed 's/^> //g' >> NEWS
33 cp ChangeLog ChangeLog.previous
34
35 # Clean up build/dist directories
15 # Clean up build/dist directories
36 rm -rf $ipdir/build/*
16 rm -rf $ipdir/build/*
37 rm -rf $ipdir/dist/*
17 rm -rf $ipdir/dist/*
38
18
39 # Perform local backup
19 # Perform local backup
40 cd $ipdir/tools
20 cd $ipdir/tools
41 ./make_tarball.py
21 ./make_tarball.py
42 mv ipython-*.tgz $ipbackupdir
22 mv ipython-*.tgz $ipbackupdir
43
23
44 # Build source and binary distros
24 # Build source and binary distros
45 cd $ipdir
25 cd $ipdir
46 ./setup.py sdist --formats=gztar
26 ./setup.py sdist --formats=gztar
47
27
48 # Build version-specific RPMs, where we must use the --python option to ensure
28 # Build version-specific RPMs, where we must use the --python option to ensure
49 # that the resulting RPM is really built with the requested python version (so
29 # that the resulting RPM is really built with the requested python version (so
50 # things go to lib/python2.X/...)
30 # things go to lib/python2.X/...)
51 python2.4 ./setup.py bdist_rpm --binary-only --release=py24 --python=/usr/bin/python2.4
31 python2.4 ./setup.py bdist_rpm --binary-only --release=py24 --python=/usr/bin/python2.4
52 python2.5 ./setup.py bdist_rpm --binary-only --release=py25 --python=/usr/bin/python2.5
32 python2.5 ./setup.py bdist_rpm --binary-only --release=py25 --python=/usr/bin/python2.5
53
33
54 # Build eggs
34 # Build eggs
55 python2.4 ./setup_bdist_egg.py
35 python2.4 ./setup_bdist_egg.py
56 python2.5 ./setup_bdist_egg.py
36 python2.5 ./setup_bdist_egg.py
57
37
58 # Call the windows build separately, so that the extra Windows scripts don't
38 # Call the windows build separately, so that the extra Windows scripts don't
59 # get pulled into Unix builds (setup.py has code which checks for
39 # get pulled into Unix builds (setup.py has code which checks for
60 # bdist_wininst)
40 # bdist_wininst)
61 ./setup.py bdist_wininst --install-script=ipython_win_post_install.py
41 ./setup.py bdist_wininst --install-script=ipython_win_post_install.py
62
42
63 # Change name so retarded Vista runs the installer correctly
43 # Change name so retarded Vista runs the installer correctly
64 rename 's/win32/win32-setup/' $ipdir/dist/*.exe
44 rename 's/win32/win32-setup/' $ipdir/dist/*.exe
65
45
66 # Register with the Python Package Index (PyPI)
46 # Register with the Python Package Index (PyPI)
67 echo "Registering with PyPI..."
47 echo "Registering with PyPI..."
68 cd $ipdir
48 cd $ipdir
69 ./setup.py register
49 ./setup.py register
70
50
71 # Upload all files
51 # Upload all files
72 cd $ipdir/dist
52 cd $ipdir/dist
73 echo "Uploading distribution files..."
53 echo "Uploading distribution files..."
74 scp * ipython@ipython.scipy.org:www/dist/
54 scp * ipython@ipython.scipy.org:www/dist/
75
55
76 echo "Uploading backup files..."
56 echo "Uploading backup files..."
77 cd $ipbackupdir
57 cd $ipbackupdir
78 scp `ls -1tr *tgz | tail -1` ipython@ipython.scipy.org:www/backup/
58 scp `ls -1tr *tgz | tail -1` ipython@ipython.scipy.org:www/backup/
79
59
80 echo "Updating webpage..."
81 cd $ipdir/doc
82 www=~/ipython/homepage
83 cp ChangeLog NEWS $www
84 rm -rf $www/doc/*
85 cp -r manual/ $www/doc
86 cd $www
87 ./update
88
89 # Alert package maintainers
90 #echo "Alerting package maintainers..."
91 #maintainers='fernando.perez@berkeley.edu ariciputi@users.sourceforge.net jack@xiph.org tretkowski@inittab.de dryice@hotpop.com willmaier@ml1.net'
92 # maintainers='fernando.perez@berkeley.edu'
93
94 # for email in $maintainers
95 # do
96 # echo "Emailing $email..."
97 # mail -s "[Package maintainer notice] A new IPython is out. Version: $version" \
98 # $email < NEWS
99 # done
100
101 echo "Done!"
60 echo "Done!"
General Comments 0
You need to be logged in to leave comments. Login now