The Python Launcher for Unix
An implementation of the py
command for Unix-based platforms
(with some potential experimentation for good measure 😉)
The goal is to have py
become the cross-platform command that all Python users
use when executing a Python interpreter. By having a version-agnostic command
it side-steps the "what should the python
command point to?" debate by
clearly specifying that upfront (i.e. the newest version of Python that can be
found). This also unifies the suggested command to document for launching
Python on both Windows as Unix as py
which has existed as the preferred
command on Windows for
some time.
See the top section of py --help
for instructions.
Search order
Please note that while searching, the search for a Python version can become more specific. This leads to a switch in the search algorithm to the one most appropriate to the specificity of the version.
You can always run the Python Launcher with PYVENV_DEBUG
set to some value
to have it output logging details of how it is performing its search.
py -3.6
(specific version)
- Search
PATH
forpython3.6
py -3
(loose/major version)
- Check for the
PY_PYTHON3
environment variable, and if defined and not the empty string then use it as the specific version (e.g.PY_PYTHON3=3.6
) - Search
PATH
for all instances ofpython3.*
- Find the executable with the newest version number that comes earliest on
PATH
py
(any version)
- Use
${VIRTUAL_ENV}/bin/python
immediately if available - Use
.venv/bin/python
immediately if available - If the first argument is a file path ...
- Check for a shebang
- If shebang path starts with
/usr/bin/python
,/usr/local/bin/python
,/usr/bin/env python
orpython
, proceed based on the version found on that path (barepython
is considered the equivalent of not specifying a Python version)
- Check for the
PY_PYTHON
environment variable, and if defined then use it as the loose or specific version (e.g.PY_PYTHON=3
orPY_PYTHON=3.6
) - Search
PATH
for all instances ofpython*.*
- Find the executable with the newest version that is earliest on
PATH