##// END OF EJS Templates
Move cleanup to main setup.py, where it belongs....
Fernando Perez -
Show More
@@ -1,121 +1,121 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 #*****************************************************************************
4 #*****************************************************************************
5 # Copyright (C) 2008-2009 The IPython Development Team
5 # Copyright (C) 2008-2009 The IPython Development Team
6 # Copyright (C) 2001-2008 Fernando Perez <fperez@colorado.edu>
6 # Copyright (C) 2001-2008 Fernando Perez <fperez@colorado.edu>
7 # Copyright (c) 2001 Janko Hauser <jhauser@zscout.de> and Nathaniel Gray
7 # Copyright (c) 2001 Janko Hauser <jhauser@zscout.de> and Nathaniel Gray
8 # <n8gray@caltech.edu>
8 # <n8gray@caltech.edu>
9 #
9 #
10 # Distributed under the terms of the BSD License. The full license is in
10 # Distributed under the terms of the BSD License. The full license is in
11 # the file COPYING, distributed as part of this software.
11 # the file COPYING, distributed as part of this software.
12 #*****************************************************************************
12 #*****************************************************************************
13
13
14 # Name of the package for release purposes. This is the name which labels
14 # Name of the package for release purposes. This is the name which labels
15 # the tarballs and RPMs made by distutils, so it's best to lowercase it.
15 # the tarballs and RPMs made by distutils, so it's best to lowercase it.
16 name = 'ipython'
16 name = 'ipython'
17
17
18 # For versions with substrings (like 0.6.16.svn), use an extra . to separate
18 # For versions with substrings (like 0.6.16.svn), use an extra . to separate
19 # the new substring. We have to avoid using either dashes or underscores,
19 # the new substring. We have to avoid using either dashes or underscores,
20 # because bdist_rpm does not accept dashes (an RPM) convention, and
20 # because bdist_rpm does not accept dashes (an RPM) convention, and
21 # bdist_deb does not accept underscores (a Debian convention).
21 # bdist_deb does not accept underscores (a Debian convention).
22
22
23 development = True # change this to False to do a release
23 development = True # change this to False to do a release
24 version_base = '0.11'
24 version_base = '0.11'
25 branch = 'ipython'
25 branch = 'ipython'
26 revision = '1312'
26 revision = '1313'
27
27
28 if development:
28 if development:
29 if branch == 'ipython':
29 if branch == 'ipython':
30 version = '%s.bzr.r%s' % (version_base, revision)
30 version = '%s.bzr.r%s' % (version_base, revision)
31 else:
31 else:
32 version = '%s.bzr.r%s.%s' % (version_base, revision, branch)
32 version = '%s.bzr.r%s.%s' % (version_base, revision, branch)
33 else:
33 else:
34 version = version_base
34 version = version_base
35
35
36
36
37 description = "An interactive computing environment for Python"
37 description = "An interactive computing environment for Python"
38
38
39 long_description = \
39 long_description = \
40 """
40 """
41 The goal of IPython is to create a comprehensive environment for
41 The goal of IPython is to create a comprehensive environment for
42 interactive and exploratory computing. To support this goal, IPython
42 interactive and exploratory computing. To support this goal, IPython
43 has two main components:
43 has two main components:
44
44
45 * An enhanced interactive Python shell.
45 * An enhanced interactive Python shell.
46
46
47 * An architecture for interactive parallel computing.
47 * An architecture for interactive parallel computing.
48
48
49 The enhanced interactive Python shell has the following main features:
49 The enhanced interactive Python shell has the following main features:
50
50
51 * Comprehensive object introspection.
51 * Comprehensive object introspection.
52
52
53 * Input history, persistent across sessions.
53 * Input history, persistent across sessions.
54
54
55 * Caching of output results during a session with automatically generated
55 * Caching of output results during a session with automatically generated
56 references.
56 references.
57
57
58 * Readline based name completion.
58 * Readline based name completion.
59
59
60 * Extensible system of 'magic' commands for controlling the environment and
60 * Extensible system of 'magic' commands for controlling the environment and
61 performing many tasks related either to IPython or the operating system.
61 performing many tasks related either to IPython or the operating system.
62
62
63 * Configuration system with easy switching between different setups (simpler
63 * Configuration system with easy switching between different setups (simpler
64 than changing $PYTHONSTARTUP environment variables every time).
64 than changing $PYTHONSTARTUP environment variables every time).
65
65
66 * Session logging and reloading.
66 * Session logging and reloading.
67
67
68 * Extensible syntax processing for special purpose situations.
68 * Extensible syntax processing for special purpose situations.
69
69
70 * Access to the system shell with user-extensible alias system.
70 * Access to the system shell with user-extensible alias system.
71
71
72 * Easily embeddable in other Python programs and wxPython GUIs.
72 * Easily embeddable in other Python programs and wxPython GUIs.
73
73
74 * Integrated access to the pdb debugger and the Python profiler.
74 * Integrated access to the pdb debugger and the Python profiler.
75
75
76 The parallel computing architecture has the following main features:
76 The parallel computing architecture has the following main features:
77
77
78 * Quickly parallelize Python code from an interactive Python/IPython session.
78 * Quickly parallelize Python code from an interactive Python/IPython session.
79
79
80 * A flexible and dynamic process model that be deployed on anything from
80 * A flexible and dynamic process model that be deployed on anything from
81 multicore workstations to supercomputers.
81 multicore workstations to supercomputers.
82
82
83 * An architecture that supports many different styles of parallelism, from
83 * An architecture that supports many different styles of parallelism, from
84 message passing to task farming.
84 message passing to task farming.
85
85
86 * Both blocking and fully asynchronous interfaces.
86 * Both blocking and fully asynchronous interfaces.
87
87
88 * High level APIs that enable many things to be parallelized in a few lines
88 * High level APIs that enable many things to be parallelized in a few lines
89 of code.
89 of code.
90
90
91 * Share live parallel jobs with other users securely.
91 * Share live parallel jobs with other users securely.
92
92
93 * Dynamically load balanced task farming system.
93 * Dynamically load balanced task farming system.
94
94
95 * Robust error handling in parallel code.
95 * Robust error handling in parallel code.
96
96
97 The latest development version is always available from IPython's `Launchpad
97 The latest development version is always available from IPython's `Launchpad
98 site <http://launchpad.net/ipython>`_.
98 site <http://launchpad.net/ipython>`_.
99 """
99 """
100
100
101 license = 'BSD'
101 license = 'BSD'
102
102
103 authors = {'Fernando' : ('Fernando Perez','fperez.net@gmail.com'),
103 authors = {'Fernando' : ('Fernando Perez','fperez.net@gmail.com'),
104 'Janko' : ('Janko Hauser','jhauser@zscout.de'),
104 'Janko' : ('Janko Hauser','jhauser@zscout.de'),
105 'Nathan' : ('Nathaniel Gray','n8gray@caltech.edu'),
105 'Nathan' : ('Nathaniel Gray','n8gray@caltech.edu'),
106 'Ville' : ('Ville Vainio','vivainio@gmail.com'),
106 'Ville' : ('Ville Vainio','vivainio@gmail.com'),
107 'Brian' : ('Brian E Granger', 'ellisonbg@gmail.com'),
107 'Brian' : ('Brian E Granger', 'ellisonbg@gmail.com'),
108 'Min' : ('Min Ragan-Kelley', 'benjaminrk@gmail.com')
108 'Min' : ('Min Ragan-Kelley', 'benjaminrk@gmail.com')
109 }
109 }
110
110
111 author = 'The IPython Development Team'
111 author = 'The IPython Development Team'
112
112
113 author_email = 'ipython-dev@scipy.org'
113 author_email = 'ipython-dev@scipy.org'
114
114
115 url = 'http://ipython.scipy.org'
115 url = 'http://ipython.scipy.org'
116
116
117 download_url = 'http://ipython.scipy.org/dist'
117 download_url = 'http://ipython.scipy.org/dist'
118
118
119 platforms = ['Linux','Mac OSX','Windows XP/2000/NT','Windows 95/98/ME']
119 platforms = ['Linux','Mac OSX','Windows XP/2000/NT','Windows 95/98/ME']
120
120
121 keywords = ['Interactive','Interpreter','Shell','Parallel','Distributed']
121 keywords = ['Interactive','Interpreter','Shell','Parallel','Distributed']
@@ -1,218 +1,234 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 shutil
22 import sys
23 import sys
23
24
24 from glob import glob
25 from glob import glob
25
26
26 # BEFORE importing distutils, remove MANIFEST. distutils doesn't properly
27 # BEFORE importing distutils, remove MANIFEST. distutils doesn't properly
27 # update it when the contents of directories change.
28 # update it when the contents of directories change.
28 if os.path.exists('MANIFEST'): os.remove('MANIFEST')
29 if os.path.exists('MANIFEST'): os.remove('MANIFEST')
29
30
30 from distutils.core import setup
31 from distutils.core import setup
31
32
32 from IPython.utils.genutils import target_update
33 from IPython.utils.genutils import target_update
33
34
34 from setupbase import (
35 from setupbase import (
35 setup_args,
36 setup_args,
36 find_packages,
37 find_packages,
37 find_package_data,
38 find_package_data,
38 find_scripts,
39 find_scripts,
39 find_data_files,
40 find_data_files,
40 check_for_dependencies
41 check_for_dependencies
41 )
42 )
42
43
43 isfile = os.path.isfile
44 isfile = os.path.isfile
44 pjoin = os.path.join
45 pjoin = os.path.join
45
46
47 #-----------------------------------------------------------------------------
48 # Function definitions
49 #-----------------------------------------------------------------------------
50
51 def cleanup():
52 """Clean up the junk left around by the build process"""
53 if "develop" not in sys.argv:
54 try:
55 shutil.rmtree('ipython.egg-info')
56 except:
57 try:
58 os.unlink('ipython.egg-info')
59 except:
60 pass
61
46 #-------------------------------------------------------------------------------
62 #-------------------------------------------------------------------------------
47 # Handle OS specific things
63 # Handle OS specific things
48 #-------------------------------------------------------------------------------
64 #-------------------------------------------------------------------------------
49
65
50 if os.name == 'posix':
66 if os.name == 'posix':
51 os_name = 'posix'
67 os_name = 'posix'
52 elif os.name in ['nt','dos']:
68 elif os.name in ['nt','dos']:
53 os_name = 'windows'
69 os_name = 'windows'
54 else:
70 else:
55 print 'Unsupported operating system:',os.name
71 print 'Unsupported operating system:',os.name
56 sys.exit(1)
72 sys.exit(1)
57
73
58 # Under Windows, 'sdist' has not been supported. Now that the docs build with
74 # 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
75 # Sphinx it might work, but let's not turn it on until someone confirms that it
60 # actually works.
76 # actually works.
61 if os_name == 'windows' and 'sdist' in sys.argv:
77 if os_name == 'windows' and 'sdist' in sys.argv:
62 print 'The sdist command is not available under Windows. Exiting.'
78 print 'The sdist command is not available under Windows. Exiting.'
63 sys.exit(1)
79 sys.exit(1)
64
80
65 #-------------------------------------------------------------------------------
81 #-------------------------------------------------------------------------------
66 # Things related to the IPython documentation
82 # Things related to the IPython documentation
67 #-------------------------------------------------------------------------------
83 #-------------------------------------------------------------------------------
68
84
69 # update the manuals when building a source dist
85 # update the manuals when building a source dist
70 if len(sys.argv) >= 2 and sys.argv[1] in ('sdist','bdist_rpm'):
86 if len(sys.argv) >= 2 and sys.argv[1] in ('sdist','bdist_rpm'):
71 import textwrap
87 import textwrap
72
88
73 # List of things to be updated. Each entry is a triplet of args for
89 # List of things to be updated. Each entry is a triplet of args for
74 # target_update()
90 # target_update()
75 to_update = [
91 to_update = [
76 # FIXME - Disabled for now: we need to redo an automatic way
92 # FIXME - Disabled for now: we need to redo an automatic way
77 # of generating the magic info inside the rst.
93 # of generating the magic info inside the rst.
78 #('docs/magic.tex',
94 #('docs/magic.tex',
79 #['IPython/Magic.py'],
95 #['IPython/Magic.py'],
80 #"cd doc && ./update_magic.sh" ),
96 #"cd doc && ./update_magic.sh" ),
81
97
82 ('docs/man/ipcluster.1.gz',
98 ('docs/man/ipcluster.1.gz',
83 ['docs/man/ipcluster.1'],
99 ['docs/man/ipcluster.1'],
84 'cd docs/man && gzip -9c ipcluster.1 > ipcluster.1.gz'),
100 'cd docs/man && gzip -9c ipcluster.1 > ipcluster.1.gz'),
85
101
86 ('docs/man/ipcontroller.1.gz',
102 ('docs/man/ipcontroller.1.gz',
87 ['docs/man/ipcontroller.1'],
103 ['docs/man/ipcontroller.1'],
88 'cd docs/man && gzip -9c ipcontroller.1 > ipcontroller.1.gz'),
104 'cd docs/man && gzip -9c ipcontroller.1 > ipcontroller.1.gz'),
89
105
90 ('docs/man/ipengine.1.gz',
106 ('docs/man/ipengine.1.gz',
91 ['docs/man/ipengine.1'],
107 ['docs/man/ipengine.1'],
92 'cd docs/man && gzip -9c ipengine.1 > ipengine.1.gz'),
108 'cd docs/man && gzip -9c ipengine.1 > ipengine.1.gz'),
93
109
94 ('docs/man/ipython.1.gz',
110 ('docs/man/ipython.1.gz',
95 ['docs/man/ipython.1'],
111 ['docs/man/ipython.1'],
96 'cd docs/man && gzip -9c ipython.1 > ipython.1.gz'),
112 'cd docs/man && gzip -9c ipython.1 > ipython.1.gz'),
97
113
98 ('docs/man/ipython-wx.1.gz',
114 ('docs/man/ipython-wx.1.gz',
99 ['docs/man/ipython-wx.1'],
115 ['docs/man/ipython-wx.1'],
100 'cd docs/man && gzip -9c ipython-wx.1 > ipython-wx.1.gz'),
116 'cd docs/man && gzip -9c ipython-wx.1 > ipython-wx.1.gz'),
101
117
102 ('docs/man/ipythonx.1.gz',
118 ('docs/man/ipythonx.1.gz',
103 ['docs/man/ipythonx.1'],
119 ['docs/man/ipythonx.1'],
104 'cd docs/man && gzip -9c ipythonx.1 > ipythonx.1.gz'),
120 'cd docs/man && gzip -9c ipythonx.1 > ipythonx.1.gz'),
105
121
106 ('docs/man/irunner.1.gz',
122 ('docs/man/irunner.1.gz',
107 ['docs/man/irunner.1'],
123 ['docs/man/irunner.1'],
108 'cd docs/man && gzip -9c irunner.1 > irunner.1.gz'),
124 'cd docs/man && gzip -9c irunner.1 > irunner.1.gz'),
109
125
110 ('docs/man/pycolor.1.gz',
126 ('docs/man/pycolor.1.gz',
111 ['docs/man/pycolor.1'],
127 ['docs/man/pycolor.1'],
112 'cd docs/man && gzip -9c pycolor.1 > pycolor.1.gz'),
128 'cd docs/man && gzip -9c pycolor.1 > pycolor.1.gz'),
113 ]
129 ]
114
130
115 # Only build the docs if sphinx is present
131 # Only build the docs if sphinx is present
116 try:
132 try:
117 import sphinx
133 import sphinx
118 except ImportError:
134 except ImportError:
119 pass
135 pass
120 else:
136 else:
121 # The Makefile calls the do_sphinx scripts to build html and pdf, so
137 # The Makefile calls the do_sphinx scripts to build html and pdf, so
122 # just one target is enough to cover all manual generation
138 # just one target is enough to cover all manual generation
123
139
124 # First, compute all the dependencies that can force us to rebuild the
140 # First, compute all the dependencies that can force us to rebuild the
125 # docs. Start with the main release file that contains metadata
141 # docs. Start with the main release file that contains metadata
126 docdeps = ['IPython/core/release.py']
142 docdeps = ['IPython/core/release.py']
127 # Inculde all the reST sources
143 # Inculde all the reST sources
128 pjoin = os.path.join
144 pjoin = os.path.join
129 for dirpath,dirnames,filenames in os.walk('docs/source'):
145 for dirpath,dirnames,filenames in os.walk('docs/source'):
130 if dirpath in ['_static','_templates']:
146 if dirpath in ['_static','_templates']:
131 continue
147 continue
132 docdeps += [ pjoin(dirpath,f) for f in filenames
148 docdeps += [ pjoin(dirpath,f) for f in filenames
133 if f.endswith('.txt') ]
149 if f.endswith('.txt') ]
134 # and the examples
150 # and the examples
135 for dirpath,dirnames,filenames in os.walk('docs/example'):
151 for dirpath,dirnames,filenames in os.walk('docs/example'):
136 docdeps += [ pjoin(dirpath,f) for f in filenames
152 docdeps += [ pjoin(dirpath,f) for f in filenames
137 if not f.endswith('~') ]
153 if not f.endswith('~') ]
138 # then, make them all dependencies for the main PDF (the html will get
154 # then, make them all dependencies for the main PDF (the html will get
139 # auto-generated as well).
155 # auto-generated as well).
140 to_update.append(
156 to_update.append(
141 ('docs/dist/ipython.pdf',
157 ('docs/dist/ipython.pdf',
142 docdeps,
158 docdeps,
143 "cd docs && make dist")
159 "cd docs && make dist")
144 )
160 )
145
161
146 [ target_update(*t) for t in to_update ]
162 [ target_update(*t) for t in to_update ]
147
148
163
149 #---------------------------------------------------------------------------
164 #---------------------------------------------------------------------------
150 # Find all the packages, package data, scripts and data_files
165 # Find all the packages, package data, scripts and data_files
151 #---------------------------------------------------------------------------
166 #---------------------------------------------------------------------------
152
167
153 packages = find_packages()
168 packages = find_packages()
154 package_data = find_package_data()
169 package_data = find_package_data()
155 scripts = find_scripts()
170 scripts = find_scripts()
156 data_files = find_data_files()
171 data_files = find_data_files()
157
172
158 #---------------------------------------------------------------------------
173 #---------------------------------------------------------------------------
159 # Handle dependencies and setuptools specific things
174 # Handle dependencies and setuptools specific things
160 #---------------------------------------------------------------------------
175 #---------------------------------------------------------------------------
161
176
162 # For some commands, use setuptools. Note that we do NOT list install here!
177 # For some commands, use setuptools. Note that we do NOT list install here!
163 # If you want a setuptools-enhanced install, just run 'setupegg.py install'
178 # If you want a setuptools-enhanced install, just run 'setupegg.py install'
164 if len(set(('develop', 'sdist', 'release', 'bdist_egg', 'bdist_rpm',
179 if len(set(('develop', 'sdist', 'release', 'bdist_egg', 'bdist_rpm',
165 'bdist', 'bdist_dumb', 'bdist_wininst', 'install_egg_info',
180 'bdist', 'bdist_dumb', 'bdist_wininst', 'install_egg_info',
166 'build_sphinx', 'egg_info', 'easy_install', 'upload',
181 'build_sphinx', 'egg_info', 'easy_install', 'upload',
167 )).intersection(sys.argv)) > 0:
182 )).intersection(sys.argv)) > 0:
168 import setuptools
183 import setuptools
169
184
170 # This dict is used for passing extra arguments that are setuptools
185 # This dict is used for passing extra arguments that are setuptools
171 # specific to setup
186 # specific to setup
172 setuptools_extra_args = {}
187 setuptools_extra_args = {}
173
188
174 if 'setuptools' in sys.modules:
189 if 'setuptools' in sys.modules:
175 setuptools_extra_args['zip_safe'] = False
190 setuptools_extra_args['zip_safe'] = False
176 setuptools_extra_args['entry_points'] = {
191 setuptools_extra_args['entry_points'] = {
177 'console_scripts': [
192 'console_scripts': [
178 'ipython = IPython.core.ipapp:launch_new_instance',
193 'ipython = IPython.core.ipapp:launch_new_instance',
179 'pycolor = IPython.utils.PyColorize:main',
194 'pycolor = IPython.utils.PyColorize:main',
180 'ipcontroller = IPython.kernel.ipcontrollerapp:launch_new_instance',
195 'ipcontroller = IPython.kernel.ipcontrollerapp:launch_new_instance',
181 'ipengine = IPython.kernel.ipengineapp:launch_new_instance',
196 'ipengine = IPython.kernel.ipengineapp:launch_new_instance',
182 'ipcluster = IPython.kernel.ipclusterapp:launch_new_instance',
197 'ipcluster = IPython.kernel.ipclusterapp:launch_new_instance',
183 'ipythonx = IPython.frontend.wx.ipythonx:main',
198 'ipythonx = IPython.frontend.wx.ipythonx:main',
184 'iptest = IPython.testing.iptest:main',
199 'iptest = IPython.testing.iptest:main',
185 'irunner = IPython.lib.irunner:main'
200 'irunner = IPython.lib.irunner:main'
186 ]
201 ]
187 }
202 }
188 setup_args['extras_require'] = dict(
203 setup_args['extras_require'] = dict(
189 kernel = [
204 kernel = [
190 'zope.interface>=3.4.1',
205 'zope.interface>=3.4.1',
191 'Twisted>=8.0.1',
206 'Twisted>=8.0.1',
192 'foolscap>=0.2.6'
207 'foolscap>=0.2.6'
193 ],
208 ],
194 doc='Sphinx>=0.3',
209 doc='Sphinx>=0.3',
195 test='nose>=0.10.1',
210 test='nose>=0.10.1',
196 security='pyOpenSSL>=0.6'
211 security='pyOpenSSL>=0.6'
197 )
212 )
198 # Allow setuptools to handle the scripts
213 # Allow setuptools to handle the scripts
199 scripts = []
214 scripts = []
200 else:
215 else:
201 # If we are running without setuptools, call this function which will
216 # If we are running without setuptools, call this function which will
202 # check for dependencies an inform the user what is needed. This is
217 # check for dependencies an inform the user what is needed. This is
203 # just to make life easy for users.
218 # just to make life easy for users.
204 check_for_dependencies()
219 check_for_dependencies()
205
220
206
207 #---------------------------------------------------------------------------
221 #---------------------------------------------------------------------------
208 # Do the actual setup now
222 # Do the actual setup now
209 #---------------------------------------------------------------------------
223 #---------------------------------------------------------------------------
210
224
211 setup_args['packages'] = packages
225 setup_args['packages'] = packages
212 setup_args['package_data'] = package_data
226 setup_args['package_data'] = package_data
213 setup_args['scripts'] = scripts
227 setup_args['scripts'] = scripts
214 setup_args['data_files'] = data_files
228 setup_args['data_files'] = data_files
215 setup_args.update(setuptools_extra_args)
229 setup_args.update(setuptools_extra_args)
216
230
231
217 if __name__ == '__main__':
232 if __name__ == '__main__':
218 setup(**setup_args)
233 setup(**setup_args)
234 cleanup()
@@ -1,20 +1,6 b''
1 #!/usr/bin/env python
1 #!/usr/bin/env python
2 """Wrapper to run setup.py using setuptools."""
2 """Wrapper to run setup.py using setuptools."""
3
3
4 import os
4 # Import setuptools and call the actual setup
5 import shutil
6 import sys
7
8 # now, import setuptools and call the actual setup
9 import setuptools
5 import setuptools
10 execfile('setup.py')
6 execfile('setup.py')
11
12 # clean up the junk left around by setuptools
13 if "develop" not in sys.argv:
14 try:
15 shutil.rmtree('ipython.egg-info')
16 except:
17 try:
18 os.unlink('ipython.egg-info')
19 except:
20 pass
General Comments 0
You need to be logged in to leave comments. Login now