D9361: make: switch the PYTHON default to `py.exe -3` on Windows
mharbison72 (Matt Harbison)
phabricator at mercurial-scm.org
Sat Nov 21 20:38:37 UTC 2020
mharbison72 created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.
REVISION SUMMARY
Python3 _is_ named `python.exe` on Windows, but that isn't necessarily on PATH
when installing from python.org. I do happen to have a python.exe on PATH in
`$LOCALAPPDATA/Microsoft/WindowsApps`, but it appears to be 0 bytes (likely
because of permission issues), and doesn't run:
$ python -V
- Cannot open
Pulkit hit the same error as I did though, so it isn't just my system:
$ make -C . local
make: Entering directory `/home/Dell/repos/hg-committed`
python setup.py \
build_py -c -d . \
build_ext -i \
build_hgexe -i \
build_mo
- Cannot openmake: *** [local] Error 1
The `py.exe` dispatcher lives in the Windows directory (so it is on PATH), looks
up the python.org installation, and invokes that interpreter directly. I get a
warning with py39, but if it's our issue, it was an existing one:
$ make -C .. local
make: Entering directory `/c/Users/Matt/hg'
py -3 setup.py \
build_py -c -d . \
build_ext -i \
build_hgexe -i \
build_mo
C:\Users\Matt\AppData\Local\Programs\Python\Python39\lib\site-packages\setuptools\distutils_patch.py:25:
UserWarning: Distutils was imported before Setuptools. This usage is discouraged and may
exhibit undesirable behaviors or errors. Please use Setuptools' objects directly or at least
import Setuptools first.
warnings.warn(
The end result is a py3 based hg.exe that annoyingly won't run because it can't
find python39.dll. It will run tests (the ones without the `python3` shbang
line anyway), because the test runner adjusts PATH to include the python running
it.
REPOSITORY
rHG Mercurial
BRANCH
default
REVISION DETAIL
https://phab.mercurial-scm.org/D9361
AFFECTED FILES
Makefile
CHANGE DETAILS
diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -8,9 +8,9 @@
# Default to Python 3.
#
-# Windows ships Python 3 as `python.exe`.
+# Windows ships Python 3 as `python.exe`, which may not be on PATH. py.exe is.
ifeq ($(OS),Windows_NT)
-PYTHON?=python
+PYTHON?=py -3
else
PYTHON?=python3
endif
To: mharbison72, #hg-reviewers
Cc: mercurial-patches, mercurial-devel
More information about the Mercurial-devel
mailing list