From 45d89856fcf103e8f109e76eea548149bd7e0ced Mon Sep 17 00:00:00 2001 From: Zac-HD Date: Mon, 4 Dec 2017 10:24:14 +1100 Subject: [PATCH] [2.0.x] Fixed #28878 -- Added python_requires in setup.py and a warning for older pips that don't recognize it. Backport of 32ade4d73b50aed77efdb9dd7371c17f89061afc from master --- AUTHORS | 1 + setup.py | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/AUTHORS b/AUTHORS index 8e92aa9fd46..80710c3e75e 100644 --- a/AUTHORS +++ b/AUTHORS @@ -841,6 +841,7 @@ answer newbie questions, and generally made Django that much better: ymasuda@ethercube.com Yoong Kang Lim Yusuke Miyazaki + Zac Hatfield-Dodds Zachary Voase Zach Liu Zach Thompson diff --git a/setup.py b/setup.py index 801be5bbda7..93264f43a41 100644 --- a/setup.py +++ b/setup.py @@ -4,6 +4,35 @@ from distutils.sysconfig import get_python_lib from setuptools import find_packages, setup +CURRENT_PYTHON = sys.version_info[:2] +REQUIRED_PYTHON = (3, 4) + +# This check and everything above must remain compatible with Python 2.7. +if CURRENT_PYTHON < REQUIRED_PYTHON: + sys.stderr.write(""" +========================== +Unsupported Python version +========================== + +This version of Django requires Python {}.{}, but you're trying to +install it on Python {}.{}. + +This may be because you are using a version of pip that doesn't +understand the python_requires classifier. Make sure you +have pip >= 9.0 and setuptools >= 24.2, then try again: + + $ python -m pip install --upgrade pip setuptools + $ python -m pip install django + +This will install the latest version of Django which works on your +version of Python. If you can't upgrade your pip (or Python), request +an older version of Django: + + $ python -m pip install "django<2" +""".format(*(REQUIRED_PYTHON + CURRENT_PYTHON))) + sys.exit(1) + + # Warn if we are installing over top of an existing installation. This can # cause issues where files that were deleted from a more recent Django are # still present in site-packages. See #18115. @@ -35,6 +64,7 @@ version = __import__('django').get_version() setup( name='Django', version=version, + python_requires='>={}.{}'.format(*REQUIRED_PYTHON), url='https://www.djangoproject.com/', author='Django Software Foundation', author_email='foundation@djangoproject.com',