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