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