Mercurial > hg
changeset 36386:fb39f6a8a864 stable
setup: only allow Python 3 from a source checkout (issue5804)
People are running `pip install Mercurial` with Python 3 and that
is working because not everything performs a Python version
compatibility check.
Modern versions of pip do recognize the "python_requires" keyword
(https://packaging.python.org/tutorials/distributing-packages/#python-requires)
which we set if using setuptools. But this isn't set nor recognized
everywhere.
To prevent people from accidentally installing Mercurial with Python
3 until Python 3 is officially supported, have setup.py fail when
run with Python 3. But don't fail if we're running from a source
checkout, as we don't want to anger Mercurial developers hacking
on Python 3 nor Mercurial's test automation running from source
checkouts. People running setup.py from source checkouts could still
fall through a Python 3 crack. But at least the
`pip install Mercurial` attempt will get nipped in the bud.
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Fri, 23 Feb 2018 17:57:04 -0800 |
parents | 5da7b8cb6f75 |
children | eb73f8a6177e 0a7c59a4c835 |
files | setup.py |
diffstat | 1 files changed, 20 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/setup.py Wed Feb 21 16:51:09 2018 -0500 +++ b/setup.py Fri Feb 23 17:57:04 2018 -0800 @@ -67,6 +67,26 @@ printf(error, file=sys.stderr) sys.exit(1) +# We don't yet officially support Python 3. But we want to allow developers to +# hack on. Detect and disallow running on Python 3 by default. But provide a +# backdoor to enable working on Python 3. +if sys.version_info[0] != 2: + badpython = True + + # Allow Python 3 from source checkouts. + if os.path.isdir('.hg'): + badpython = False + + if badpython: + error = """ +Mercurial only supports Python 2.7. +Python {py} detected. +Please re-run with Python 2.7. +""".format(py=sys.version_info) + + printf(error, file=sys.stderr) + sys.exit(1) + # Solaris Python packaging brain damage try: import hashlib