##// END OF EJS Templates
Backport PR #12410: NEP 29 stop support for 3.6
Matthias Bussonnier -
Show More
@@ -1,118 +1,123 b''
1 1 # http://travis-ci.org/#!/ipython/ipython
2 2 language: python
3 3 os: linux
4 4
5 5 addons:
6 6 apt:
7 7 packages:
8 8 - graphviz
9 9
10 10 python:
11 11 - 3.6
12 12
13 13 sudo: false
14 14
15 15 env:
16 16 global:
17 17 - PATH=$TRAVIS_BUILD_DIR/pandoc:$PATH
18 18
19 19 group: edge
20 20
21 21 before_install:
22 22 - |
23 23 # install Python on macOS
24 24 if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
25 25 env | sort
26 26 if ! which python$TRAVIS_PYTHON_VERSION; then
27 27 HOMEBREW_NO_AUTO_UPDATE=1 brew tap minrk/homebrew-python-frameworks
28 28 HOMEBREW_NO_AUTO_UPDATE=1 brew cask install python-framework-${TRAVIS_PYTHON_VERSION/./}
29 29 fi
30 30 python3 -m pip install virtualenv
31 31 python3 -m virtualenv -p $(which python$TRAVIS_PYTHON_VERSION) ~/travis-env
32 32 source ~/travis-env/bin/activate
33 33 fi
34 34 - python --version
35 35
36 36 install:
37 37 - pip install pip --upgrade
38 38 - pip install setuptools --upgrade
39 - if [[ "$TRAVIS_PYTHON_VERSION" == "3.6" ]]; then
40 echo "for the tiem being still test on 3.6";
41 sed -i bkp s/7/6/g setup.py;
42 git diff;
43 fi
39 44 - pip install -e file://$PWD#egg=ipython[test] --upgrade
40 45 - pip install trio curio --upgrade --upgrade-strategy eager
41 46 - pip install pytest 'matplotlib !=3.2.0' mypy
42 47 - pip install codecov check-manifest --upgrade
43 48
44 49 script:
45 50 - check-manifest
46 51 - |
47 52 if [[ "$TRAVIS_PYTHON_VERSION" == "nightly" ]]; then
48 53 # on nightly fake parso known the grammar
49 54 cp /home/travis/virtualenv/python3.9-dev/lib/python3.9/site-packages/parso/python/grammar38.txt /home/travis/virtualenv/python3.9-dev/lib/python3.9/site-packages/parso/python/grammar39.txt
50 55 fi
51 56 - cd /tmp && iptest --coverage xml && cd -
52 57 - pytest IPython
53 58 - mypy --ignore-missing-imports -m IPython.terminal.ptutils
54 59 # On the latest Python (on Linux) only, make sure that the docs build.
55 60 - |
56 61 if [[ "$TRAVIS_PYTHON_VERSION" == "3.7" ]] && [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
57 62 pip install -r docs/requirements.txt
58 63 python tools/fixup_whats_new_pr.py
59 64 make -C docs/ html SPHINXOPTS="-W"
60 65 fi
61 66
62 67 after_success:
63 68 - cp /tmp/ipy_coverage.xml ./
64 69 - cp /tmp/.coverage ./
65 70 - codecov
66 71
67 72 matrix:
68 73 include:
69 74 - arch: amd64
70 75 python: "3.7"
71 76 dist: xenial
72 77 sudo: true
73 78 - arch: amd64
74 79 python: "3.8-dev"
75 80 dist: xenial
76 81 sudo: true
77 82 - arch: amd64
78 83 python: "3.7-dev"
79 84 dist: xenial
80 85 sudo: true
81 86 - arch: amd64
82 87 python: "nightly"
83 88 dist: xenial
84 89 sudo: true
85 90 - arch: arm64
86 91 python: "nightly"
87 92 dist: bionic
88 93 env: ARM64=True
89 94 sudo: true
90 95 - os: osx
91 96 language: generic
92 97 python: 3.6
93 98 env: TRAVIS_PYTHON_VERSION=3.6
94 99 - os: osx
95 100 language: generic
96 101 python: 3.7
97 102 env: TRAVIS_PYTHON_VERSION=3.7
98 103 allow_failures:
99 104 - python: nightly
100 105
101 106 before_deploy:
102 107 - rm -rf dist/
103 108 - python setup.py sdist
104 109 - python setup.py bdist_wheel
105 110
106 111 deploy:
107 112 provider: releases
108 113 api_key:
109 114 secure: Y/Ae9tYs5aoBU8bDjN2YrwGG6tCbezj/h3Lcmtx8HQavSbBgXnhnZVRb2snOKD7auqnqjfT/7QMm4ZyKvaOEgyggGktKqEKYHC8KOZ7yp8I5/UMDtk6j9TnXpSqqBxPiud4MDV76SfRYEQiaDoG4tGGvSfPJ9KcNjKrNvSyyxns=
110 115 file: dist/*
111 116 file_glob: true
112 117 skip_cleanup: true
113 118 on:
114 119 repo: ipython/ipython
115 120 all_branches: true # Backports are released from e.g. 5.x branch
116 121 tags: true
117 122 python: 3.6 # Any version should work, but we only need one
118 123 condition: $TRAVIS_OS_NAME = "linux"
@@ -1,262 +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 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 if sys.version_info < (3, 6):
29 if sys.version_info < (3, 7):
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 IPython 7.10+ supports Python 3.6 and above, following NEP 29.
45 IPython 7.17+ supports Python 3.7 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 Python 3.6 was supported with IPython up to 7.16.
49 50
50 51 See IPython `README.rst` file for more information:
51 52
52 53 https://github.com/ipython/ipython/blob/master/README.rst
53 54
54 55 Python {py} detected.
55 56 {pip}
56 57 """.format(py=sys.version_info, pip=pip_message )
57 58
58 59 print(error, file=sys.stderr)
59 60 sys.exit(1)
60 61
61 62 # At least we're on the python version we need, move on.
62 63
63 64 # BEFORE importing distutils, remove MANIFEST. distutils doesn't properly
64 65 # update it when the contents of directories change.
65 66 if os.path.exists('MANIFEST'): os.remove('MANIFEST')
66 67
67 68 from distutils.core import setup
68 69
69 70 # Our own imports
70 71 from setupbase import target_update
71 72
72 73 from setupbase import (
73 74 setup_args,
74 75 find_packages,
75 76 find_package_data,
76 77 check_package_data_first,
77 78 find_entry_points,
78 79 build_scripts_entrypt,
79 80 find_data_files,
80 81 git_prebuild,
81 82 install_symlinked,
82 83 install_lib_symlink,
83 84 install_scripts_for_symlink,
84 85 unsymlink,
85 86 )
86 87
87 88 isfile = os.path.isfile
88 89 pjoin = os.path.join
89 90
90 91 #-------------------------------------------------------------------------------
91 92 # Handle OS specific things
92 93 #-------------------------------------------------------------------------------
93 94
94 95 if os.name in ('nt','dos'):
95 96 os_name = 'windows'
96 97 else:
97 98 os_name = os.name
98 99
99 100 # Under Windows, 'sdist' has not been supported. Now that the docs build with
100 101 # Sphinx it might work, but let's not turn it on until someone confirms that it
101 102 # actually works.
102 103 if os_name == 'windows' and 'sdist' in sys.argv:
103 104 print('The sdist command is not available under Windows. Exiting.')
104 105 sys.exit(1)
105 106
106 107
107 108 #-------------------------------------------------------------------------------
108 109 # Things related to the IPython documentation
109 110 #-------------------------------------------------------------------------------
110 111
111 112 # update the manuals when building a source dist
112 113 if len(sys.argv) >= 2 and sys.argv[1] in ('sdist','bdist_rpm'):
113 114
114 115 # List of things to be updated. Each entry is a triplet of args for
115 116 # target_update()
116 117 to_update = [
117 118 ('docs/man/ipython.1.gz',
118 119 ['docs/man/ipython.1'],
119 120 'cd docs/man && gzip -9c ipython.1 > ipython.1.gz'),
120 121 ]
121 122
122 123
123 124 [ target_update(*t) for t in to_update ]
124 125
125 126 #---------------------------------------------------------------------------
126 127 # Find all the packages, package data, and data_files
127 128 #---------------------------------------------------------------------------
128 129
129 130 packages = find_packages()
130 131 package_data = find_package_data()
131 132
132 133 data_files = find_data_files()
133 134
134 135 setup_args['packages'] = packages
135 136 setup_args['package_data'] = package_data
136 137 setup_args['data_files'] = data_files
137 138
138 139 #---------------------------------------------------------------------------
139 140 # custom distutils commands
140 141 #---------------------------------------------------------------------------
141 142 # imports here, so they are after setuptools import if there was one
142 143 from distutils.command.sdist import sdist
143 144
144 145 setup_args['cmdclass'] = {
145 146 'build_py': \
146 147 check_package_data_first(git_prebuild('IPython')),
147 148 'sdist' : git_prebuild('IPython', sdist),
148 149 'symlink': install_symlinked,
149 150 'install_lib_symlink': install_lib_symlink,
150 151 'install_scripts_sym': install_scripts_for_symlink,
151 152 'unsymlink': unsymlink,
152 153 }
153 154
154 155
155 156 #---------------------------------------------------------------------------
156 157 # Handle scripts, dependencies, and setuptools specific things
157 158 #---------------------------------------------------------------------------
158 159
159 160 # For some commands, use setuptools. Note that we do NOT list install here!
160 161 # If you want a setuptools-enhanced install, just run 'setupegg.py install'
161 162 needs_setuptools = {'develop', 'release', 'bdist_egg', 'bdist_rpm',
162 163 'bdist', 'bdist_dumb', 'bdist_wininst', 'bdist_wheel',
163 164 'egg_info', 'easy_install', 'upload', 'install_egg_info',
164 165 }
165 166
166 167 if len(needs_setuptools.intersection(sys.argv)) > 0:
167 168 import setuptools
168 169
169 170 # This dict is used for passing extra arguments that are setuptools
170 171 # specific to setup
171 172 setuptools_extra_args = {}
172 173
173 174 # setuptools requirements
174 175
175 176 extras_require = dict(
176 177 parallel = ['ipyparallel'],
177 178 qtconsole = ['qtconsole'],
178 179 doc = ['Sphinx>=1.3'],
179 180 test = ['nose>=0.10.1', 'requests', 'testpath', 'pygments', 'nbformat', 'ipykernel', 'numpy>=1.14'],
180 181 terminal = [],
181 182 kernel = ['ipykernel'],
182 183 nbformat = ['nbformat'],
183 184 notebook = ['notebook', 'ipywidgets'],
184 185 nbconvert = ['nbconvert'],
185 186 )
186 187
187 188 install_requires = [
188 189 'setuptools>=18.5',
189 190 'jedi>=0.10',
190 191 'decorator',
191 192 'pickleshare',
192 193 'traitlets>=4.2',
193 194 'prompt_toolkit>=2.0.0,<3.1.0,!=3.0.0,!=3.0.1',
194 195 'pygments',
195 196 'backcall',
196 197 ]
197 198
198 199 # Platform-specific dependencies:
199 200 # This is the correct way to specify these,
200 201 # but requires pip >= 6. pip < 6 ignores these.
201 202
202 203 extras_require.update({
203 204 ':sys_platform != "win32"': ['pexpect'],
204 205 ':sys_platform == "darwin"': ['appnope'],
205 206 ':sys_platform == "win32"': ['colorama'],
206 207 })
207 208 # FIXME: re-specify above platform dependencies for pip < 6
208 209 # These would result in non-portable bdists.
209 210 if not any(arg.startswith('bdist') for arg in sys.argv):
210 211 if sys.platform == 'darwin':
211 212 install_requires.extend(['appnope'])
212 213
213 214 if not sys.platform.startswith('win'):
214 215 install_requires.append('pexpect')
215 216
216 217 # workaround pypa/setuptools#147, where setuptools misspells
217 218 # platform_python_implementation as python_implementation
218 219 if 'setuptools' in sys.modules:
219 220 for key in list(extras_require):
220 221 if 'platform_python_implementation' in key:
221 222 new_key = key.replace('platform_python_implementation', 'python_implementation')
222 223 extras_require[new_key] = extras_require.pop(key)
223 224
224 225 everything = set()
225 226 for key, deps in extras_require.items():
226 227 if ':' not in key:
227 228 everything.update(deps)
228 229 extras_require['all'] = list(sorted(everything))
229 230
230 231 if 'setuptools' in sys.modules:
231 setuptools_extra_args['python_requires'] = '>=3.6'
232 setuptools_extra_args['python_requires'] = '>=3.7'
232 233 setuptools_extra_args['zip_safe'] = False
233 234 setuptools_extra_args['entry_points'] = {
234 235 'console_scripts': find_entry_points(),
235 236 'pygments.lexers': [
236 237 'ipythonconsole = IPython.lib.lexers:IPythonConsoleLexer',
237 238 'ipython = IPython.lib.lexers:IPythonLexer',
238 239 'ipython3 = IPython.lib.lexers:IPython3Lexer',
239 240 ],
240 241 }
241 242 setup_args['extras_require'] = extras_require
242 243 setup_args['install_requires'] = install_requires
243 244
244 245 else:
245 246 # scripts has to be a non-empty list, or install_scripts isn't called
246 247 setup_args['scripts'] = [e.split('=')[0].strip() for e in find_entry_points()]
247 248
248 249 setup_args['cmdclass']['build_scripts'] = build_scripts_entrypt
249 250
250 251 #---------------------------------------------------------------------------
251 252 # Do the actual setup now
252 253 #---------------------------------------------------------------------------
253 254
254 255 setup_args.update(setuptools_extra_args)
255 256
256 257
257 258
258 259 def main():
259 260 setup(**setup_args)
260 261
261 262 if __name__ == '__main__':
262 263 main()
General Comments 0
You need to be logged in to leave comments. Login now