##// END OF EJS Templates
Don't allow Jedi to go to v1.18.0...
Dan Green -
Show More
@@ -1,263 +1,263 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 = ['nose>=0.10.1', 'requests', 'testpath', 'pygments', 'nbformat', 'ipykernel', 'numpy>=1.14'],
178 178 terminal = [],
179 179 kernel = ['ipykernel'],
180 180 nbformat = ['nbformat'],
181 181 notebook = ['notebook', 'ipywidgets'],
182 182 nbconvert = ['nbconvert'],
183 183 )
184 184
185 185 install_requires = [
186 186 'setuptools>=18.5',
187 'jedi>=0.16',
187 'jedi>=0.16,<0.18.0',
188 188 'decorator',
189 189 'pickleshare',
190 190 'traitlets>=4.2',
191 191 'prompt_toolkit>=2.0.0,<3.1.0,!=3.0.0,!=3.0.1',
192 192 'pygments',
193 193 'backcall',
194 194 'stack_data',
195 195 ]
196 196
197 197 # Platform-specific dependencies:
198 198 # This is the correct way to specify these,
199 199 # but requires pip >= 6. pip < 6 ignores these.
200 200
201 201 extras_require.update(
202 202 {
203 203 ':sys_platform != "win32"': ["pexpect>4.3"],
204 204 ':sys_platform == "darwin"': ["appnope"],
205 205 ':sys_platform == "win32"': ["colorama"],
206 206 }
207 207 )
208 208 # FIXME: re-specify above platform dependencies for pip < 6
209 209 # These would result in non-portable bdists.
210 210 if not any(arg.startswith('bdist') for arg in sys.argv):
211 211 if sys.platform == 'darwin':
212 212 install_requires.extend(['appnope'])
213 213
214 214 if not sys.platform.startswith("win"):
215 215 install_requires.append("pexpect>4.3")
216 216
217 217 # workaround pypa/setuptools#147, where setuptools misspells
218 218 # platform_python_implementation as python_implementation
219 219 if 'setuptools' in sys.modules:
220 220 for key in list(extras_require):
221 221 if 'platform_python_implementation' in key:
222 222 new_key = key.replace('platform_python_implementation', 'python_implementation')
223 223 extras_require[new_key] = extras_require.pop(key)
224 224
225 225 everything = set()
226 226 for key, deps in extras_require.items():
227 227 if ':' not in key:
228 228 everything.update(deps)
229 229 extras_require['all'] = list(sorted(everything))
230 230
231 231 if 'setuptools' in sys.modules:
232 232 setuptools_extra_args['python_requires'] = '>=3.7'
233 233 setuptools_extra_args['zip_safe'] = False
234 234 setuptools_extra_args['entry_points'] = {
235 235 'console_scripts': find_entry_points(),
236 236 'pygments.lexers': [
237 237 'ipythonconsole = IPython.lib.lexers:IPythonConsoleLexer',
238 238 'ipython = IPython.lib.lexers:IPythonLexer',
239 239 'ipython3 = IPython.lib.lexers:IPython3Lexer',
240 240 ],
241 241 }
242 242 setup_args['extras_require'] = extras_require
243 243 setup_args['install_requires'] = install_requires
244 244
245 245 else:
246 246 # scripts has to be a non-empty list, or install_scripts isn't called
247 247 setup_args['scripts'] = [e.split('=')[0].strip() for e in find_entry_points()]
248 248
249 249 setup_args['cmdclass']['build_scripts'] = build_scripts_entrypt
250 250
251 251 #---------------------------------------------------------------------------
252 252 # Do the actual setup now
253 253 #---------------------------------------------------------------------------
254 254
255 255 setup_args.update(setuptools_extra_args)
256 256
257 257
258 258
259 259 def main():
260 260 setup(**setup_args)
261 261
262 262 if __name__ == '__main__':
263 263 main()
General Comments 0
You need to be logged in to leave comments. Login now