# HG changeset patch # User Gregory Szorc <gregory.sz...@gmail.com> # Date 1519437424 28800 # Fri Feb 23 17:57:04 2018 -0800 # Branch stable # Node ID 5b80235fd920c02ff430d8b0989fc55a58f11a0c # Parent 5da7b8cb6f751fa7a331ed501d26f336e1bbc8f9 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. diff --git a/setup.py b/setup.py --- a/setup.py +++ b/setup.py @@ -67,6 +67,26 @@ Python {py} detected. 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 _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel