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