##// END OF EJS Templates
Code style cleanups
Thomas Kluyver -
Show More
@@ -1,286 +1,278 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.rst, distributed with this software.
18 18 #-----------------------------------------------------------------------------
19 19
20 20 from __future__ import print_function
21 21
22 import os
22 23 import sys
23 24
24 25 # **Python version check**
25 26 #
26 27 # This check is also made in IPython/__init__, don't forget to update both when
27 28 # changing Python version requirements.
28 if sys.version_info < (3,3):
29 if sys.version_info < (3, 3):
29 30 pip_message = 'This may be due to an out of date pip. Make sure you have pip >= 9.0.1.'
30 31 try:
31 32 import pip
32 33 pip_version = tuple([int(x) for x in pip.__version__.split('.')[:3]])
33 34 if pip_version < (9, 0, 1) :
34 35 pip_message = 'Your pip version is out of date, please install pip >= 9.0.1. '\
35 36 'pip {} detected.'.format(pip.__version__)
36 37 except Exception:
37 38 pass
38 39
39 40
40 41 error = """
41 42 IPython 6.0+ does not support Python 2.6, 2.7, 3.0, 3.1, or 3.2.
42 43 When using Python 2.7, please install IPython 5.x LTS Long Term Support version.
43 44 Beginning with IPython 6.0, Python 3.3 and above is required.
44 45
45 46 See IPython `README.rst` file for more information:
46 47
47 48 https://github.com/ipython/ipython/blob/master/README.rst
48 49
49 50 Python {py} detected.
50 51 {pip}
51 52 """.format(py=sys.version_info, pip=pip_message )
52 53
53 54 print(error, file=sys.stderr)
54 55 sys.exit(1)
55 56
56 57 # At least we're on the python version we need, move on.
57 58
58 #-------------------------------------------------------------------------------
59 # Imports
60 #-------------------------------------------------------------------------------
61
62 # Stdlib imports
63 import os
64
65 from glob import glob
66
67 59 # BEFORE importing distutils, remove MANIFEST. distutils doesn't properly
68 60 # update it when the contents of directories change.
69 61 if os.path.exists('MANIFEST'): os.remove('MANIFEST')
70 62
71 63 from distutils.core import setup
72 64
73 65 # Our own imports
74 66 from setupbase import target_update
75 67
76 68 from setupbase import (
77 69 setup_args,
78 70 find_packages,
79 71 find_package_data,
80 72 check_package_data_first,
81 73 find_entry_points,
82 74 build_scripts_entrypt,
83 75 find_data_files,
84 76 git_prebuild,
85 77 install_symlinked,
86 78 install_lib_symlink,
87 79 install_scripts_for_symlink,
88 80 unsymlink,
89 81 )
90 82
91 83 isfile = os.path.isfile
92 84 pjoin = os.path.join
93 85
94 86 #-------------------------------------------------------------------------------
95 87 # Handle OS specific things
96 88 #-------------------------------------------------------------------------------
97 89
98 90 if os.name in ('nt','dos'):
99 91 os_name = 'windows'
100 92 else:
101 93 os_name = os.name
102 94
103 95 # Under Windows, 'sdist' has not been supported. Now that the docs build with
104 96 # Sphinx it might work, but let's not turn it on until someone confirms that it
105 97 # actually works.
106 98 if os_name == 'windows' and 'sdist' in sys.argv:
107 99 print('The sdist command is not available under Windows. Exiting.')
108 100 sys.exit(1)
109 101
110 102
111 103 #-------------------------------------------------------------------------------
112 104 # Things related to the IPython documentation
113 105 #-------------------------------------------------------------------------------
114 106
115 107 # update the manuals when building a source dist
116 108 if len(sys.argv) >= 2 and sys.argv[1] in ('sdist','bdist_rpm'):
117 109
118 110 # List of things to be updated. Each entry is a triplet of args for
119 111 # target_update()
120 112 to_update = [
121 113 ('docs/man/ipython.1.gz',
122 114 ['docs/man/ipython.1'],
123 115 'cd docs/man && gzip -9c ipython.1 > ipython.1.gz'),
124 116 ]
125 117
126 118
127 119 [ target_update(*t) for t in to_update ]
128 120
129 121 #---------------------------------------------------------------------------
130 122 # Find all the packages, package data, and data_files
131 123 #---------------------------------------------------------------------------
132 124
133 125 packages = find_packages()
134 126 package_data = find_package_data()
135 127
136 128 data_files = find_data_files()
137 129
138 130 setup_args['packages'] = packages
139 131 setup_args['package_data'] = package_data
140 132 setup_args['data_files'] = data_files
141 133
142 134 #---------------------------------------------------------------------------
143 135 # custom distutils commands
144 136 #---------------------------------------------------------------------------
145 137 # imports here, so they are after setuptools import if there was one
146 138 from distutils.command.sdist import sdist
147 139
148 140 setup_args['cmdclass'] = {
149 141 'build_py': \
150 142 check_package_data_first(git_prebuild('IPython')),
151 143 'sdist' : git_prebuild('IPython', sdist),
152 144 'symlink': install_symlinked,
153 145 'install_lib_symlink': install_lib_symlink,
154 146 'install_scripts_sym': install_scripts_for_symlink,
155 147 'unsymlink': unsymlink,
156 148 }
157 149
158 150
159 151 #---------------------------------------------------------------------------
160 152 # Handle scripts, dependencies, and setuptools specific things
161 153 #---------------------------------------------------------------------------
162 154
163 155 # For some commands, use setuptools. Note that we do NOT list install here!
164 156 # If you want a setuptools-enhanced install, just run 'setupegg.py install'
165 needs_setuptools = set(('develop', 'release', 'bdist_egg', 'bdist_rpm',
157 needs_setuptools = {'develop', 'release', 'bdist_egg', 'bdist_rpm',
166 158 'bdist', 'bdist_dumb', 'bdist_wininst', 'bdist_wheel',
167 159 'egg_info', 'easy_install', 'upload', 'install_egg_info',
168 ))
160 }
169 161
170 162 if len(needs_setuptools.intersection(sys.argv)) > 0:
171 163 import setuptools
172 164
173 165 # This dict is used for passing extra arguments that are setuptools
174 166 # specific to setup
175 167 setuptools_extra_args = {}
176 168
177 169 # setuptools requirements
178 170
179 171 extras_require = dict(
180 172 parallel = ['ipyparallel'],
181 173 qtconsole = ['qtconsole'],
182 174 doc = ['Sphinx>=1.3'],
183 175 test = ['nose>=0.10.1', 'requests', 'testpath', 'pygments', 'nbformat', 'ipykernel'],
184 176 terminal = [],
185 177 kernel = ['ipykernel'],
186 178 nbformat = ['nbformat'],
187 179 notebook = ['notebook', 'ipywidgets'],
188 180 nbconvert = ['nbconvert'],
189 181 )
190 182
191 183 install_requires = [
192 184 'setuptools>=18.5',
193 185 'jedi>=0.10',
194 186 'decorator',
195 187 'pickleshare',
196 188 'simplegeneric>0.8',
197 189 'traitlets>=4.2',
198 190 'prompt_toolkit>=1.0.4,<2.0.0',
199 191 'pygments',
200 192 ]
201 193
202 194 # Platform-specific dependencies:
203 195 # This is the correct way to specify these,
204 196 # but requires pip >= 6. pip < 6 ignores these.
205 197
206 198 extras_require.update({
207 199 'test:python_version >= "3.4"': ['numpy'],
208 200 ':python_version == "3.3"': ['pathlib2'],
209 201 ':python_version <= "3.4"': ['typing'],
210 202 ':sys_platform != "win32"': ['pexpect'],
211 203 ':sys_platform == "darwin"': ['appnope'],
212 204 ':sys_platform == "win32"': ['colorama'],
213 205 ':sys_platform == "win32" and python_version < "3.6"': ['win_unicode_console>=0.5'],
214 206 })
215 207 # FIXME: re-specify above platform dependencies for pip < 6
216 208 # These would result in non-portable bdists.
217 209 if not any(arg.startswith('bdist') for arg in sys.argv):
218 210 if sys.platform == 'darwin':
219 211 install_requires.extend(['appnope'])
220 212
221 213 if not sys.platform.startswith('win'):
222 214 install_requires.append('pexpect')
223 215
224 216 # workaround pypa/setuptools#147, where setuptools misspells
225 217 # platform_python_implementation as python_implementation
226 218 if 'setuptools' in sys.modules:
227 219 for key in list(extras_require):
228 220 if 'platform_python_implementation' in key:
229 221 new_key = key.replace('platform_python_implementation', 'python_implementation')
230 222 extras_require[new_key] = extras_require.pop(key)
231 223
232 224 everything = set()
233 225 for key, deps in extras_require.items():
234 226 if ':' not in key:
235 227 everything.update(deps)
236 228 extras_require['all'] = everything
237 229
238 230 if 'setuptools' in sys.modules:
239 231 setuptools_extra_args['python_requires'] = '>=3.3'
240 232 setuptools_extra_args['zip_safe'] = False
241 233 setuptools_extra_args['entry_points'] = {
242 234 'console_scripts': find_entry_points(),
243 235 'pygments.lexers': [
244 236 'ipythonconsole = IPython.lib.lexers:IPythonConsoleLexer',
245 237 'ipython = IPython.lib.lexers:IPythonLexer',
246 238 'ipython3 = IPython.lib.lexers:IPython3Lexer',
247 239 ],
248 240 }
249 241 setup_args['extras_require'] = extras_require
250 242 requires = setup_args['install_requires'] = install_requires
251 243
252 244 # Script to be run by the windows binary installer after the default setup
253 245 # routine, to add shortcuts and similar windows-only things. Windows
254 246 # post-install scripts MUST reside in the scripts/ dir, otherwise distutils
255 247 # doesn't find them.
256 248 if 'bdist_wininst' in sys.argv:
257 249 if len(sys.argv) > 2 and \
258 250 ('sdist' in sys.argv or 'bdist_rpm' in sys.argv):
259 251 print("ERROR: bdist_wininst must be run alone. Exiting.", file=sys.stderr)
260 252 sys.exit(1)
261 253 setup_args['data_files'].append(
262 254 ['Scripts', ('scripts/ipython.ico', 'scripts/ipython_nb.ico')])
263 255 setup_args['scripts'] = [pjoin('scripts','ipython_win_post_install.py')]
264 256 setup_args['options'] = {"bdist_wininst":
265 257 {"install_script":
266 258 "ipython_win_post_install.py"}}
267 259
268 260 else:
269 261 # scripts has to be a non-empty list, or install_scripts isn't called
270 262 setup_args['scripts'] = [e.split('=')[0].strip() for e in find_entry_points()]
271 263
272 264 setup_args['cmdclass']['build_scripts'] = build_scripts_entrypt
273 265
274 266 #---------------------------------------------------------------------------
275 267 # Do the actual setup now
276 268 #---------------------------------------------------------------------------
277 269
278 270 setup_args.update(setuptools_extra_args)
279 271
280 272
281 273
282 274 def main():
283 275 setup(**setup_args)
284 276
285 277 if __name__ == '__main__':
286 278 main()
General Comments 0
You need to be logged in to leave comments. Login now