Python launcher for Unix
Launch your Python interpreter the lazy/smart way!
This project is an implementation of the
pycommand for Unix-based platforms (with some potential experimentation for good measure 😉).
The goal is to have
pybecome the cross-platform command that Python users typically use to launch an interpreter while doing development. By having a command that is version-agnostic when it comes to Python, it side-steps the "what should the
pythoncommand 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
pyhas existed as the preferred command on Windows since 2012 with the release of Python 3.3.
Typical usage would be:
py -m venv .venv py ... # Normal `python` usage.
This creates a virtual environment in a
.venvdirectory using the latest version of Python installed. Subsequent uses of
pywill then use that virtual environment as long as it is in the current (or higher) directory; no environment activation required (although the Python Launcher supports activated environments as well)!
A non-goal of this project is to become the way to launch the Python interpreter all the time. If you know the exact interpreter you want to launch then you should launch it directly; same goes for when you have requirements on the type of interpreter you want (e.g. 32-bit, framework build on macOS, etc.). The Python Launcher should be viewed as a tool of convenience, not necessity.
brew install python-launcher
yay -S python-launcher
sudo dnf install python-launcher
Requires Fedora 34 or higher.
curl --location --remote-name https://github.com/brettcannon/python-launcher/releases/download/v1.0.0/python_launcher-1.0.0-riscv64gc-unknown-linux-gnu.tar.xz
tar --extract --strip-components 1 --directory /usr/local --file python_launcher-1.0.0-riscv64gc-unknown-linux-gnu.tar.xz
curl --location --remote-name https://github.com/brettcannon/python-launcher/releases/download/v1.0.0/python_launcher-1.0.0-aarch64-unknown-linux-gnu.tar.xz
tar --extract --strip-components 1 --directory /usr/local --file python_launcher-1.0.0-aarch64-unknown-linux-gnu.tar.xz
curl --location --remote-name https://github.com/brettcannon/python-launcher/releases/download/v1.0.0/python_launcher-1.0.0-x86_64-unknown-linux-gnu.tar.xz
tar --extract --strip-components 1 --directory /usr/local --file python_launcher-1.0.0-x86_64-unknown-linux-gnu.tar.xz
brew install python-launcher
curl --location --remote-name https://github.com/brettcannon/python-launcher/releases/download/v1.0.0/python_launcher-1.0.0-aarch64-apple-darwin.tar.xz
tar --extract --strip-components 1 --directory /usr/local --file python_launcher-1.0.0-aarch64-apple-darwin.tar.xz
curl --location --remote-name https://github.com/brettcannon/python-launcher/releases/download/v1.0.0/python_launcher-1.0.0-x86_64-apple-darwin.tar.xz
tar --extract --strip-components 1 --directory /usr/local --file python_launcher-1.0.0-x86_64-apple-darwin.tar.xz
curl --location --remote-name https://github.com/brettcannon/python-launcher/releases/download/v1.0.0/python_launcher-1.0.0-x86_64-unknown-netbsd.tar.xz
tar --extract --strip-components 1 --directory /usr/local --file python_launcher-1.0.0-x86_64-unknown-netbsd.tar.xz
cargo install python-launcher
cargo install --path .
The general control flow for finding the appropriate Python executable is the following (with Python 3.6, Python 3, and the newest version of Python installed as examples):
See the man page or the top section of
py --helpfor more details.
See the API docs for using this project to build your own custom Launcher.
Add the following to your Starship configuration file:
[python] python_binary = ["py"] # The following isn't necessary, but convenient. detect_folders = [".venv"]
By using the Launcher with Starship, your prompt will tell you which Python version will be used if you run
py. Since the Launcher supports virtual environments, the prompt will properly reflect both what global install of Python will be used, but also the local virtual environment.
py --list | lines | split column "│" version path | str trim
Do note that the character that is being split on is not the traditional U+007C/"Vertical Line"/pipe character (
|), but U+2502/"Box Drawings Light Vertical" (
Add this line to your
export PY_PYTHON=$(pyenv exec python -c "import sys; print('.'.join(map(str, sys.version_info[:2])))")
Or this line to your
set -gx PY_PYTHON (pyenv exec python -c "import sys; print('.'.join(map(str, sys.version_info[:2])))")