Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use #!/usr/bin/env python3 instead of a bash script in the x.py shebang #98716

Closed
wants to merge 2 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 4 additions & 25 deletions x.py
Original file line number Diff line number Diff line change
@@ -1,38 +1,17 @@
#!/usr/bin/env bash
#!/usr/bin/env python3

# 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
# directly use python in the shebang and have it consistently work. Instead we
# embed some bash to look for a python to run the rest of the script.
#
# On Windows, `py -3` sometimes works. We need to try it first because `python3`
# sometimes tries to launch the app store on Windows.
'''':
for PYTHON in "py -3" python3 python python2; do
if command -v $PYTHON >/dev/null; then
exec $PYTHON "$0" "$@"
break
fi
done
echo "$0: error: did not find python installed" >&2
exit 1
'''

# The rest of this file is Python.
#
# This file is only a "symlink" to bootstrap.py, all logic should go there.

import os
import sys

# If this is python2, check if python3 is available and re-execute with that
# interpreter.
#
# `./x.py` would not normally benefit from this because the bash above tries
jyn514 marked this conversation as resolved.
Show resolved Hide resolved
# python3 before 2, but this matters if someone ran `python x.py` and their
# system's `python` is python2.
if sys.version_info.major < 3:
try:
# On Windows, `py -3` sometimes works.
# Try this first, because 'python3' sometimes tries to launch the app
# store on Windows
os.execvp("py", ["py", "-3"] + sys.argv)
except OSError:
try:
Expand Down