##// END OF EJS Templates
update version-check message in setup.py and IPython.__init__...
MinRK -
Show More
@@ -1,145 +1,145 b''
1 1 # encoding: utf-8
2 2 """
3 3 IPython: tools for interactive and parallel computing in Python.
4 4
5 5 http://ipython.org
6 6 """
7 7 #-----------------------------------------------------------------------------
8 8 # Copyright (c) 2008-2011, IPython Development Team.
9 9 # Copyright (c) 2001-2007, Fernando Perez <fernando.perez@colorado.edu>
10 10 # Copyright (c) 2001, Janko Hauser <jhauser@zscout.de>
11 11 # Copyright (c) 2001, Nathaniel Gray <n8gray@caltech.edu>
12 12 #
13 13 # Distributed under the terms of the Modified BSD License.
14 14 #
15 15 # The full license is in the file COPYING.txt, distributed with this software.
16 16 #-----------------------------------------------------------------------------
17 17
18 18 #-----------------------------------------------------------------------------
19 19 # Imports
20 20 #-----------------------------------------------------------------------------
21 21 from __future__ import absolute_import
22 22
23 23 import os
24 24 import sys
25 25
26 26 #-----------------------------------------------------------------------------
27 27 # Setup everything
28 28 #-----------------------------------------------------------------------------
29 29
30 30 # Don't forget to also update setup.py when this changes!
31 if sys.version[0:3] < '2.6':
32 raise ImportError('Python Version 2.6 or above is required for IPython.')
31 if sys.version_info[:2] < (2,7):
32 raise ImportError('IPython requires Python Version 2.7 or above.')
33 33
34 34 # Make it easy to import extensions - they are always directly on pythonpath.
35 35 # Therefore, non-IPython modules can be added to extensions directory.
36 36 # This should probably be in ipapp.py.
37 37 sys.path.append(os.path.join(os.path.dirname(__file__), "extensions"))
38 38
39 39 #-----------------------------------------------------------------------------
40 40 # Setup the top level names
41 41 #-----------------------------------------------------------------------------
42 42
43 43 from .config.loader import Config
44 44 from .core.getipython import get_ipython
45 45 from .core import release
46 46 from .core.application import Application
47 47 from .terminal.embed import embed
48 48
49 49 from .core.error import TryNext
50 50 from .core.interactiveshell import InteractiveShell
51 51 from .testing import test
52 52 from .utils.sysinfo import sys_info
53 53 from .utils.frame import extract_module_locals
54 54
55 55 # Release data
56 56 __author__ = '%s <%s>' % (release.author, release.author_email)
57 57 __license__ = release.license
58 58 __version__ = release.version
59 59 version_info = release.version_info
60 60
61 61 def embed_kernel(module=None, local_ns=None, **kwargs):
62 62 """Embed and start an IPython kernel in a given scope.
63 63
64 64 If you don't want the kernel to initialize the namespace
65 65 from the scope of the surrounding function,
66 66 and/or you want to load full IPython configuration,
67 67 you probably want `IPython.start_kernel()` instead.
68 68
69 69 Parameters
70 70 ----------
71 71 module : ModuleType, optional
72 72 The module to load into IPython globals (default: caller)
73 73 local_ns : dict, optional
74 74 The namespace to load into IPython user namespace (default: caller)
75 75
76 76 kwargs : various, optional
77 77 Further keyword args are relayed to the IPKernelApp constructor,
78 78 allowing configuration of the Kernel. Will only have an effect
79 79 on the first embed_kernel call for a given process.
80 80 """
81 81
82 82 (caller_module, caller_locals) = extract_module_locals(1)
83 83 if module is None:
84 84 module = caller_module
85 85 if local_ns is None:
86 86 local_ns = caller_locals
87 87
88 88 # Only import .zmq when we really need it
89 89 from IPython.kernel.zmq.embed import embed_kernel as real_embed_kernel
90 90 real_embed_kernel(module=module, local_ns=local_ns, **kwargs)
91 91
92 92 def start_ipython(argv=None, **kwargs):
93 93 """Launch a normal IPython instance (as opposed to embedded)
94 94
95 95 `IPython.embed()` puts a shell in a particular calling scope,
96 96 such as a function or method for debugging purposes,
97 97 which is often not desirable.
98 98
99 99 `start_ipython()` does full, regular IPython initialization,
100 100 including loading startup files, configuration, etc.
101 101 much of which is skipped by `embed()`.
102 102
103 103 This is a public API method, and will survive implementation changes.
104 104
105 105 Parameters
106 106 ----------
107 107
108 108 argv : list or None, optional
109 109 If unspecified or None, IPython will parse command-line options from sys.argv.
110 110 To prevent any command-line parsing, pass an empty list: `argv=[]`.
111 111 user_ns : dict, optional
112 112 specify this dictionary to initialize the IPython user namespace with particular values.
113 113 kwargs : various, optional
114 114 Any other kwargs will be passed to the Application constructor,
115 115 such as `config`.
116 116 """
117 117 from IPython.terminal.ipapp import launch_new_instance
118 118 return launch_new_instance(argv=argv, **kwargs)
119 119
120 120 def start_kernel(argv=None, **kwargs):
121 121 """Launch a normal IPython kernel instance (as opposed to embedded)
122 122
123 123 `IPython.embed_kernel()` puts a shell in a particular calling scope,
124 124 such as a function or method for debugging purposes,
125 125 which is often not desirable.
126 126
127 127 `start_kernel()` does full, regular IPython initialization,
128 128 including loading startup files, configuration, etc.
129 129 much of which is skipped by `embed()`.
130 130
131 131 Parameters
132 132 ----------
133 133
134 134 argv : list or None, optional
135 135 If unspecified or None, IPython will parse command-line options from sys.argv.
136 136 To prevent any command-line parsing, pass an empty list: `argv=[]`.
137 137 user_ns : dict, optional
138 138 specify this dictionary to initialize the IPython user namespace with particular values.
139 139 kwargs : various, optional
140 140 Any other kwargs will be passed to the Application constructor,
141 141 such as `config`.
142 142 """
143 143 from IPython.kernel.zmq.kernelapp import launch_new_instance
144 144 return launch_new_instance(argv=argv, **kwargs)
145 145 No newline at end of file
@@ -1,356 +1,354 b''
1 1 #!/usr/bin/env python
2 2 # -*- coding: utf-8 -*-
3 3 """Setup script for IPython.
4 4
5 5 Under Posix environments it works like a typical setup.py script.
6 6 Under Windows, the command sdist is not supported, since IPython
7 7 requires utilities which are not available under Windows."""
8 8
9 9 #-----------------------------------------------------------------------------
10 10 # Copyright (c) 2008-2011, IPython Development Team.
11 11 # Copyright (c) 2001-2007, Fernando Perez <fernando.perez@colorado.edu>
12 12 # Copyright (c) 2001, Janko Hauser <jhauser@zscout.de>
13 13 # Copyright (c) 2001, Nathaniel Gray <n8gray@caltech.edu>
14 14 #
15 15 # Distributed under the terms of the Modified BSD License.
16 16 #
17 17 # The full license is in the file COPYING.txt, distributed with this software.
18 18 #-----------------------------------------------------------------------------
19 19
20 20 #-----------------------------------------------------------------------------
21 21 # Minimal Python version sanity check
22 22 #-----------------------------------------------------------------------------
23 23 from __future__ import print_function
24 24
25 25 import sys
26 26
27 27 # This check is also made in IPython/__init__, don't forget to update both when
28 28 # changing Python version requirements.
29 #~ if sys.version[0:3] < '2.6':
30 #~ error = """\
31 #~ ERROR: 'IPython requires Python Version 2.6 or above.'
32 #~ Exiting."""
33 #~ print >> sys.stderr, error
34 #~ sys.exit(1)
29 if sys.version_info[:2] < (2,7):
30 error = "ERROR: IPython requires Python Version 2.7 or above."
31 print(error, file=sys.stderr)
32 sys.exit(1)
35 33
36 34 PY3 = (sys.version_info[0] >= 3)
37 35
38 36 # At least we're on the python version we need, move on.
39 37
40 38 #-------------------------------------------------------------------------------
41 39 # Imports
42 40 #-------------------------------------------------------------------------------
43 41
44 42 # Stdlib imports
45 43 import os
46 44 import shutil
47 45
48 46 from glob import glob
49 47
50 48 # BEFORE importing distutils, remove MANIFEST. distutils doesn't properly
51 49 # update it when the contents of directories change.
52 50 if os.path.exists('MANIFEST'): os.remove('MANIFEST')
53 51
54 52 from distutils.core import setup
55 53
56 54 # On Python 3, we need distribute (new setuptools) to do the 2to3 conversion
57 55 if PY3:
58 56 import setuptools
59 57
60 58 # Our own imports
61 59 from setupbase import target_update
62 60
63 61 from setupbase import (
64 62 setup_args,
65 63 find_packages,
66 64 find_package_data,
67 65 find_scripts,
68 66 find_data_files,
69 67 check_for_dependencies,
70 68 git_prebuild,
71 69 check_submodule_status,
72 70 update_submodules,
73 71 require_submodules,
74 72 UpdateSubmodules,
75 73 )
76 74 from setupext import setupext
77 75
78 76 isfile = os.path.isfile
79 77 pjoin = os.path.join
80 78
81 79 #-----------------------------------------------------------------------------
82 80 # Function definitions
83 81 #-----------------------------------------------------------------------------
84 82
85 83 def cleanup():
86 84 """Clean up the junk left around by the build process"""
87 85 if "develop" not in sys.argv and "egg_info" not in sys.argv:
88 86 try:
89 87 shutil.rmtree('ipython.egg-info')
90 88 except:
91 89 try:
92 90 os.unlink('ipython.egg-info')
93 91 except:
94 92 pass
95 93
96 94 #-------------------------------------------------------------------------------
97 95 # Handle OS specific things
98 96 #-------------------------------------------------------------------------------
99 97
100 98 if os.name in ('nt','dos'):
101 99 os_name = 'windows'
102 100 else:
103 101 os_name = os.name
104 102
105 103 # Under Windows, 'sdist' has not been supported. Now that the docs build with
106 104 # Sphinx it might work, but let's not turn it on until someone confirms that it
107 105 # actually works.
108 106 if os_name == 'windows' and 'sdist' in sys.argv:
109 107 print('The sdist command is not available under Windows. Exiting.')
110 108 sys.exit(1)
111 109
112 110 #-------------------------------------------------------------------------------
113 111 # Make sure we aren't trying to run without submodules
114 112 #-------------------------------------------------------------------------------
115 113 here = os.path.abspath(os.path.dirname(__file__))
116 114
117 115 def require_clean_submodules():
118 116 """Check on git submodules before distutils can do anything
119 117
120 118 Since distutils cannot be trusted to update the tree
121 119 after everything has been set in motion,
122 120 this is not a distutils command.
123 121 """
124 122 # PACKAGERS: Add a return here to skip checks for git submodules
125 123
126 124 # don't do anything if nothing is actually supposed to happen
127 125 for do_nothing in ('-h', '--help', '--help-commands', 'clean', 'submodule'):
128 126 if do_nothing in sys.argv:
129 127 return
130 128
131 129 status = check_submodule_status(here)
132 130
133 131 if status == "missing":
134 132 print("checking out submodules for the first time")
135 133 update_submodules(here)
136 134 elif status == "unclean":
137 135 print('\n'.join([
138 136 "Cannot build / install IPython with unclean submodules",
139 137 "Please update submodules with",
140 138 " python setup.py submodule",
141 139 "or",
142 140 " git submodule update",
143 141 "or commit any submodule changes you have made."
144 142 ]))
145 143 sys.exit(1)
146 144
147 145 require_clean_submodules()
148 146
149 147 #-------------------------------------------------------------------------------
150 148 # Things related to the IPython documentation
151 149 #-------------------------------------------------------------------------------
152 150
153 151 # update the manuals when building a source dist
154 152 if len(sys.argv) >= 2 and sys.argv[1] in ('sdist','bdist_rpm'):
155 153 import textwrap
156 154
157 155 # List of things to be updated. Each entry is a triplet of args for
158 156 # target_update()
159 157 to_update = [
160 158 # FIXME - Disabled for now: we need to redo an automatic way
161 159 # of generating the magic info inside the rst.
162 160 #('docs/magic.tex',
163 161 #['IPython/Magic.py'],
164 162 #"cd doc && ./update_magic.sh" ),
165 163
166 164 ('docs/man/ipcluster.1.gz',
167 165 ['docs/man/ipcluster.1'],
168 166 'cd docs/man && gzip -9c ipcluster.1 > ipcluster.1.gz'),
169 167
170 168 ('docs/man/ipcontroller.1.gz',
171 169 ['docs/man/ipcontroller.1'],
172 170 'cd docs/man && gzip -9c ipcontroller.1 > ipcontroller.1.gz'),
173 171
174 172 ('docs/man/ipengine.1.gz',
175 173 ['docs/man/ipengine.1'],
176 174 'cd docs/man && gzip -9c ipengine.1 > ipengine.1.gz'),
177 175
178 176 ('docs/man/iplogger.1.gz',
179 177 ['docs/man/iplogger.1'],
180 178 'cd docs/man && gzip -9c iplogger.1 > iplogger.1.gz'),
181 179
182 180 ('docs/man/ipython.1.gz',
183 181 ['docs/man/ipython.1'],
184 182 'cd docs/man && gzip -9c ipython.1 > ipython.1.gz'),
185 183
186 184 ('docs/man/irunner.1.gz',
187 185 ['docs/man/irunner.1'],
188 186 'cd docs/man && gzip -9c irunner.1 > irunner.1.gz'),
189 187
190 188 ('docs/man/pycolor.1.gz',
191 189 ['docs/man/pycolor.1'],
192 190 'cd docs/man && gzip -9c pycolor.1 > pycolor.1.gz'),
193 191 ]
194 192
195 193
196 194 [ target_update(*t) for t in to_update ]
197 195
198 196 #---------------------------------------------------------------------------
199 197 # Find all the packages, package data, and data_files
200 198 #---------------------------------------------------------------------------
201 199
202 200 packages = find_packages()
203 201 package_data = find_package_data()
204 202 data_files = find_data_files()
205 203
206 204 setup_args['packages'] = packages
207 205 setup_args['package_data'] = package_data
208 206 setup_args['data_files'] = data_files
209 207
210 208 #---------------------------------------------------------------------------
211 209 # custom distutils commands
212 210 #---------------------------------------------------------------------------
213 211 # imports here, so they are after setuptools import if there was one
214 212 from distutils.command.sdist import sdist
215 213 from distutils.command.upload import upload
216 214
217 215 class UploadWindowsInstallers(upload):
218 216
219 217 description = "Upload Windows installers to PyPI (only used from tools/release_windows.py)"
220 218 user_options = upload.user_options + [
221 219 ('files=', 'f', 'exe file (or glob) to upload')
222 220 ]
223 221 def initialize_options(self):
224 222 upload.initialize_options(self)
225 223 meta = self.distribution.metadata
226 224 base = '{name}-{version}'.format(
227 225 name=meta.get_name(),
228 226 version=meta.get_version()
229 227 )
230 228 self.files = os.path.join('dist', '%s.*.exe' % base)
231 229
232 230 def run(self):
233 231 for dist_file in glob(self.files):
234 232 self.upload_file('bdist_wininst', 'any', dist_file)
235 233
236 234 setup_args['cmdclass'] = {
237 235 'build_py': git_prebuild('IPython'),
238 236 'sdist' : git_prebuild('IPython', sdist),
239 237 'upload_wininst' : UploadWindowsInstallers,
240 238 'submodule' : UpdateSubmodules,
241 239 }
242 240
243 241 #---------------------------------------------------------------------------
244 242 # Handle scripts, dependencies, and setuptools specific things
245 243 #---------------------------------------------------------------------------
246 244
247 245 # For some commands, use setuptools. Note that we do NOT list install here!
248 246 # If you want a setuptools-enhanced install, just run 'setupegg.py install'
249 247 needs_setuptools = set(('develop', 'release', 'bdist_egg', 'bdist_rpm',
250 248 'bdist', 'bdist_dumb', 'bdist_wininst', 'install_egg_info',
251 249 'egg_info', 'easy_install', 'upload',
252 250 ))
253 251 if sys.platform == 'win32':
254 252 # Depend on setuptools for install on *Windows only*
255 253 # If we get script-installation working without setuptools,
256 254 # then we can back off, but until then use it.
257 255 # See Issue #369 on GitHub for more
258 256 needs_setuptools.add('install')
259 257
260 258 if len(needs_setuptools.intersection(sys.argv)) > 0:
261 259 import setuptools
262 260
263 261 # This dict is used for passing extra arguments that are setuptools
264 262 # specific to setup
265 263 setuptools_extra_args = {}
266 264
267 265 if 'setuptools' in sys.modules:
268 266 # setup.py develop should check for submodules
269 267 from setuptools.command.develop import develop
270 268 setup_args['cmdclass']['develop'] = require_submodules(develop)
271 269
272 270 setuptools_extra_args['zip_safe'] = False
273 271 setuptools_extra_args['entry_points'] = find_scripts(True)
274 272 setup_args['extras_require'] = dict(
275 273 parallel = 'pyzmq>=2.1.11',
276 274 qtconsole = ['pyzmq>=2.1.11', 'pygments'],
277 275 zmq = 'pyzmq>=2.1.11',
278 276 doc = 'Sphinx>=0.3',
279 277 test = 'nose>=0.10.1',
280 278 notebook = ['tornado>=2.0', 'pyzmq>=2.1.11', 'jinja2'],
281 279 nbconvert = ['pygments', 'jinja2', 'Sphinx>=0.3']
282 280 )
283 281 everything = set()
284 282 for deps in setup_args['extras_require'].values():
285 283 if not isinstance(deps, list):
286 284 deps = [deps]
287 285 for dep in deps:
288 286 everything.add(dep)
289 287 setup_args['extras_require']['all'] = everything
290 288
291 289 requires = setup_args.setdefault('install_requires', [])
292 290 setupext.display_status = False
293 291 if not setupext.check_for_readline():
294 292 if sys.platform == 'darwin':
295 293 requires.append('readline')
296 294 elif sys.platform.startswith('win'):
297 295 # Pyreadline 64 bit windows issue solved in versions >=1.7.1
298 296 # Also solves issues with some older versions of pyreadline that
299 297 # satisfy the unconstrained depdendency.
300 298 requires.append('pyreadline>=1.7.1')
301 299 else:
302 300 pass
303 301 # do we want to install readline here?
304 302
305 303 # Script to be run by the windows binary installer after the default setup
306 304 # routine, to add shortcuts and similar windows-only things. Windows
307 305 # post-install scripts MUST reside in the scripts/ dir, otherwise distutils
308 306 # doesn't find them.
309 307 if 'bdist_wininst' in sys.argv:
310 308 if len(sys.argv) > 2 and \
311 309 ('sdist' in sys.argv or 'bdist_rpm' in sys.argv):
312 310 print >> sys.stderr, "ERROR: bdist_wininst must be run alone. Exiting."
313 311 sys.exit(1)
314 312 setup_args['data_files'].append(
315 313 ['Scripts', ('scripts/ipython.ico', 'scripts/ipython_nb.ico')])
316 314 setup_args['scripts'] = [pjoin('scripts','ipython_win_post_install.py')]
317 315 setup_args['options'] = {"bdist_wininst":
318 316 {"install_script":
319 317 "ipython_win_post_install.py"}}
320 318
321 319 if PY3:
322 320 setuptools_extra_args['use_2to3'] = True
323 321 # we try to make a 2.6, 2.7, and 3.1 to 3.3 python compatible code
324 322 # so we explicitly disable some 2to3 fixes to be sure we aren't forgetting
325 323 # anything.
326 324 setuptools_extra_args['use_2to3_exclude_fixers'] = [
327 325 'lib2to3.fixes.fix_apply',
328 326 'lib2to3.fixes.fix_except',
329 327 'lib2to3.fixes.fix_has_key',
330 328 'lib2to3.fixes.fix_next',
331 329 'lib2to3.fixes.fix_repr',
332 330 'lib2to3.fixes.fix_tuple_params',
333 331 ]
334 332 from setuptools.command.build_py import build_py
335 333 setup_args['cmdclass'] = {'build_py': git_prebuild('IPython', build_cmd=build_py)}
336 334 setuptools_extra_args['entry_points'] = find_scripts(True, suffix='3')
337 335 setuptools._dont_write_bytecode = True
338 336 else:
339 337 # If we are running without setuptools, call this function which will
340 338 # check for dependencies an inform the user what is needed. This is
341 339 # just to make life easy for users.
342 340 check_for_dependencies()
343 341 setup_args['scripts'] = find_scripts(False)
344 342
345 343 #---------------------------------------------------------------------------
346 344 # Do the actual setup now
347 345 #---------------------------------------------------------------------------
348 346
349 347 setup_args.update(setuptools_extra_args)
350 348
351 349 def main():
352 350 setup(**setup_args)
353 351 cleanup()
354 352
355 353 if __name__ == '__main__':
356 354 main()
General Comments 0
You need to be logged in to leave comments. Login now