From f234495e4697a3e3c3b7b5b7b02b9ae94bf9c42b Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Thu, 30 Jun 2022 20:45:28 -0400 Subject: [PATCH 1/2] Add a commment to the shebang, using `/usr/bin/env` This is a terrible, horrible, no-good, very-bad idea. I kind of like it. --- Shebang files can't have comments, so instead this passes `--unset VAR`, where the variable name itself is the comment. Here's an example run of `py` on Windows: ``` PS C:\Users\Joshua Nelson\src\rust> py x.py Unable to create process using '/usr/bin/env -S -u If_this_file_fails_to_run,read_README_ENTRYPOINT.md bash ./x.py' ``` This doesn't break anyone using python/python2/python3 directly, and still handles trying all three on distros where they might not exist. --- README_ENTRYPOINT.md | 17 +++++++++++++++++ x.py | 4 +++- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 README_ENTRYPOINT.md diff --git a/README_ENTRYPOINT.md b/README_ENTRYPOINT.md new file mode 100644 index 0000000000000..5a259e4a01f1b --- /dev/null +++ b/README_ENTRYPOINT.md @@ -0,0 +1,17 @@ +There is no file shebang for python that works on all platforms (#71818). +To minimize breakage we have chosen to make this work when `env` is in path, or when using python/python2/python3 directly. +Unfortunately, this breaks users using the `py` wrapper on Windows, where env isn't supported outside of MingW shells. + +You can do one of the following things to get x.py working: +1. Use any of `python`, `python2`, `python3`, `py -2`, or `py -3` to invoke x.py. +2. Use a MingW shell (often installed as "Git Bash", or through Cygwin). +3. Set the default file handler for .py files, which will allow using `./x.py` directly: `ftype Python.File="C:\Windows\py.exe" "-3" "%L" %*`. + `py` may be installed in a different location; use `where py` to determine where. +4. Set a default python interpreter for the `py` wrapper: Add +```ini +[commands] +bash=python +``` + to `%APPDATA%\py.ini`. + +5. Wait until October and update to the latest `py` wrapper, which fixes this bug: https://github.com/python/cpython/issues/94399#issuecomment-1170649407 diff --git a/x.py b/x.py index 0289056fdcb16..302e5f71be703 100755 --- a/x.py +++ b/x.py @@ -1,4 +1,6 @@ -#!/usr/bin/env bash +#!/usr/bin/env -S -u If_this_file_fails_to_run,read_README_ENTRYPOINT.md bash +# `py` fails when using a shebang other than /usr/bin/python{,2,3}. +# Try and give a better error by embedding a comment in the shebang. # Modern Linux and macOS systems commonly only have a thing called `python3` and # not `python`, while Windows commonly does not have `python3`, so we cannot From 33b0c5bebfaa5e15d7c3f1429d1aef0bed6e4342 Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Thu, 30 Jun 2022 23:00:22 -0500 Subject: [PATCH 2/2] Update README_ENTRYPOINT.md Co-authored-by: Christopher Durham --- README_ENTRYPOINT.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README_ENTRYPOINT.md b/README_ENTRYPOINT.md index 5a259e4a01f1b..4ae2eabf61572 100644 --- a/README_ENTRYPOINT.md +++ b/README_ENTRYPOINT.md @@ -1,6 +1,7 @@ There is no file shebang for python that works on all platforms (#71818). -To minimize breakage we have chosen to make this work when `env` is in path, or when using python/python2/python3 directly. -Unfortunately, this breaks users using the `py` wrapper on Windows, where env isn't supported outside of MingW shells. +To minimize breakage we have chosen to make this work when `bash` is available, or when using python/python2/python3 directly. +Unfortunately, this breaks users using the `py` wrapper on Windows, where `bash` isn't supported outside of MingW shells. +Existing versions of `py` will see the bash shebang line and try to respect it and interpret the file with `bash`. You can do one of the following things to get x.py working: 1. Use any of `python`, `python2`, `python3`, `py -2`, or `py -3` to invoke x.py.