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