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