# Inspiration
| [`hatch python show`](https://hatch.pypa.io/latest/cli/reference/#hatch-python-show) | [2023-12-11](https://hatch.pypa.io/latest/history/hatch/#hatch-v1.8.0) | [1.8.0](https://hatch.pypa.io/latest/history/hatch/#hatch-v1.8.0) |
| ------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
| [`pdm python list`](https://pdm-project.org/en/latest/reference/cli/#list_2) | [2024-03-27](https://pdm-project.org/en/latest/dev/changelog/#release-v2130-2024-03-27) | [2.13.0](https://pdm-project.org/en/latest/dev/changelog/#release-v2130-2024-03-27) |
| [`pipx interpreter list`](https://pipx.pypa.io/latest/docs/#pipx-interpreter) | [2024-03-29](https://pipx.pypa.io/latest/changelog/#:~:text=Add%20commands%20to%20list%20and%20prune%20standalone%20interpreters) | [1.5.0](https://github.com/pypa/pipx/tree/1.5.0) |
| [`uv python list`](https://docs.astral.sh/uv/reference/cli/#uv-python-list) | [2024-08-24](https://astral.sh/blog/uv-unified-python-packaging) | [0.3](https://astral.sh/blog/uv-unified-python-packaging) |
| [`pymanager list`](https://peps.python.org/pep-0773/#list-subcommand) | [2025-10-08](https://github.com/python/pymanager/releases/tag/25.0) | [25.0](https://github.com/python/pymanager/releases/tag/25.0) |
## Hatch
```
Options:
Name Type Description Default
--ascii boolean Whether or not to only use ASCII characters False
--dir, -d text The directory in which distributions reside Sentinel.UNSET
--help boolean Show this message and exit. False
```
## PDM
```
Options:
-h, --help: Show this help message and exit.
-v, --verbose: Use -v for detailed output and -vv for more detailed
-q, --quiet: Suppress output
```
## pipx
```
options:
-h, --help show this help message and exit
```
## uv
```
Options:
--all-versions
List all Python versions, including old patch versions
--all-platforms
List Python downloads for all platforms
--all-arches
List Python downloads for all architectures
--only-installed
Only show installed Python versions
--only-downloads
Only show available Python downloads
--show-urls
Show the URLs of available Python downloads
--output-format <OUTPUT_FORMAT>
Select the output format [default: text] [possible values: text, json]
--python-downloads-json-url <PYTHON_DOWNLOADS_JSON_URL>
URL pointing to JSON of custom Python installations
Cache options:
-n, --no-cache Avoid reading from or writing to the cache, instead using a temporary directory for the
duration of the operation [env: UV_NO_CACHE=]
--cache-dir <CACHE_DIR> Path to the cache directory [env: UV_CACHE_DIR=]
Python options:
--managed-python Require use of uv-managed Python versions [env: UV_MANAGED_PYTHON=]
--no-managed-python Disable use of uv-managed Python versions [env: UV_NO_MANAGED_PYTHON=]
--no-python-downloads Disable automatic downloads of Python. [env: "UV_PYTHON_DOWNLOADS=never"]
Global options:
-q, --quiet...
Use quiet output
-v, --verbose...
Use verbose output
--color <COLOR_CHOICE>
Control the use of color in output [possible values: auto, always, never]
--native-tls
Whether to load TLS certificates from the platform's native certificate store [env: UV_NATIVE_TLS=]
--offline
Disable network access [env: UV_OFFLINE=]
--allow-insecure-host <ALLOW_INSECURE_HOST>
Allow insecure connections to a host [env: UV_INSECURE_HOST=]
--no-progress
Hide all progress outputs [env: UV_NO_PROGRESS=]
--directory <DIRECTORY>
Change to the given directory prior to running the command [env: UV_WORKING_DIR=]
--project <PROJECT>
Discover a project in the given directory [env: UV_PROJECT=]
--config-file <CONFIG_FILE>
The path to a `uv.toml` file to use for configuration [env: UV_CONFIG_FILE=]
--no-config
Avoid discovering configuration files (`pyproject.toml`, `uv.toml`) [env: UV_NO_CONFIG=]
-h, --help
Display the concise help for this command
```
## Launcher for Windows
```
Options:
-f, --format=<table,json,jsonl,csv,exe,prefix,url,formats>
Specify list format, defaults to table.
Pass -f formats for the full list of formats.
-1, --one Only display first result that matches the filter
--online List runtimes available to install from the default index
-s, --source=<URL>
List runtimes from a particular index
--only-managed Only list Python installs managed by the tool
<FILTER> Filter results (Company\Tag with optional <, <=, >, >= prefix)
EXAMPLE: List all installed runtimes
> py list
EXAMPLE: Display the executable of the default runtime
> py list --one -f=exe
EXAMPLE: Show JSON details for each install since 3.10
> py list -f=jsonl >=3.10
EXAMPLE: Find 3.12 runtimes available for install
> py list --online 3.12
```
```PowerShell
PS C:\Users\brcan> py list --format=formats
Format Description
table Lists as a user-friendly table
csv List as a comma-separated value table
json Lists as a single JSON object
jsonl Lists as JSON on each line
id Lists the runtime ID
exe Lists the main executable path
prefix Lists the prefix directory
url Lists the original source URL
legacy List runtimes using the old format
legacy-paths List runtime paths using the old format
formats List the available list formats
```
### "tables" / default
```
Tag Name Managed By Version Alias
3.14[-64] * Python 3.14.0 PythonCore 3.14.0 python3[-64].exe, python3.14[-64].exe
3.14t[-64] Python 3.14.0 (free-threaded) PythonCore 3.14.0 python3.14t[-64].exe, python3t[-64].exe
3.13[-64] Python 3.13.8 PythonCore 3.13.8 python3.13[-64].exe
3.13t[-64] Python 3.13.8 (free-threaded) PythonCore 3.13.8 python3.13t[-64].exe
3.12[-64] Python 3.12.10 PythonCore 3.12.10 python3.12[-64].exe
3.11[-64] Python 3.11.9 PythonCore 3.11.9 python3.11[-64].exe
3.10[-64] Python 3.10.11 PythonCore 3.10.11 python3.10.exe
```
### JSONL
```json
{"schema": 1, "id": "pythoncore-3.10-64", "sort-version": "3.10.11", "company": "PythonCore", "tag": "3.10-64", "install-for": ["3.10.11-64", "3.10-64", "3-64"], "run-for": [{"tag": "3.10.11-64", "target": "python.exe"}, {"tag": "3.10-64", "target": "python.exe"}, {"tag": "3-64", "target": "python.exe"}, {"tag": "3.10.11-64", "target": "pythonw.exe", "windowed": 1}, {"tag": "3.10-64", "target": "pythonw.exe", "windowed": 1}, {"tag": "3-64", "target": "pythonw.exe", "windowed": 1}], "alias": [{"name": "python3.10.exe", "target": "python.exe"}, {"name": "python3.exe", "target": "python.exe"}, {"name": "pythonw3.10.exe", "target": "pythonw.exe", "windowed": 1}, {"name": "pythonw3.exe", "target": "pythonw.exe", "windowed": 1}], "shortcuts": [{"kind": "pep514", "Key": "PythonCore\\3.10", "DisplayName": "Python 3.10.11", "SupportUrl": "https://www.python.org/", "SysArchitecture": "64bit", "SysVersion": "3.10", "Version": "3.10.11", "InstallPath": {"_": "%PREFIX%", "ExecutablePath": "%PREFIX%python.exe", "WindowedExecutablePath": "%PREFIX%pythonw.exe"}, "Help": {"Online Python Documentation": {"_": "https://docs.python.org/3.10/"}}}, {"kind": "start", "Name": "Python 3.10", "Items": [{"Name": "Python 3.10", "Target": "%PREFIX%python.exe", "Icon": "%PREFIX%python.exe"}, {"Name": "Python 3.10 Online Documentation", "Icon": "%SystemRoot%\\System32\\SHELL32.dll", "IconIndex": 13, "Target": "https://docs.python.org/3.10/"}]}, {"kind": "uninstall", "Publisher": "Python Software Foundation", "HelpLink": "https://docs.python.org/3.10/"}], "display-name": "Python 3.10.11", "executable": "C:\\Users\\brcan\\AppData\\Local\\Python\\pythoncore-3.10-64\\python.exe", "url": "https://api.nuget.org/v3-flatcontainer/python/3.10.11/python.3.10.11.nupkg", "__original-shortcuts": [{"kind": "pep514", "Key": "PythonCore\\3.10", "DisplayName": "Python 3.10.11", "SupportUrl": "https://www.python.org/", "SysArchitecture": "64bit", "SysVersion": "3.10", "Version": "3.10.11", "InstallPath": {"_": "%PREFIX%", "ExecutablePath": "%PREFIX%python.exe", "WindowedExecutablePath": "%PREFIX%pythonw.exe"}, "Help": {"Online Python Documentation": {"_": "https://docs.python.org/3.10/"}}}, {"kind": "start", "Name": "Python 3.10", "Items": [{"Name": "Python 3.10", "Target": "%PREFIX%python.exe", "Icon": "%PREFIX%python.exe"}, {"Name": "Python 3.10 Online Documentation", "Icon": "%SystemRoot%\\System32\\SHELL32.dll", "IconIndex": 13, "Target": "https://docs.python.org/3.10/"}]}, {"kind": "uninstall", "Publisher": "Python Software Foundation", "HelpLink": "https://docs.python.org/3.10/"}], "source": "https://www.python.org/ftp/python/index-windows.json", "prefix": "C:\\Users\\brcan\\AppData\\Local\\Python\\pythoncore-3.10-64"}
```
### exe
```
C:\Users\brcan\AppData\Local\Python\pythoncore-3.14-64\python.exe
C:\Users\brcan\AppData\Local\Python\pythoncore-3.14t-64\python3.14t.exe
C:\Users\brcan\AppData\Local\Python\pythoncore-3.13-64\python.exe
C:\Users\brcan\AppData\Local\Python\pythoncore-3.13t-64\python3.13t.exe
C:\Users\brcan\AppData\Local\Python\pythoncore-3.12-64\python.exe
C:\Users\brcan\AppData\Local\Python\pythoncore-3.11-64\python.exe
C:\Users\brcan\AppData\Local\Python\pythoncore-3.10-64\python.exe
```
# Purpose
List all of the discovered interpreters.
# Ideas
- [Discourse discussion](https://discuss.python.org/t/what-information-is-useful-to-know-statically-about-an-interpreter/25563)
- [PEP 711 cross-post](https://discuss.python.org/t/pep-711-pybi-a-standard-format-for-distributing-python-binaries/25547/14?u=brettcannon)
- `--format`: Specify the output format; all output in UTF-8
- `jsonl`: Print [interpreter details](https://github.com/brettcannon/python-launcher/discussions/168) using [JSON Lines](https://jsonlines.org/)
- This should work with [`json -o` for Nu](https://www.nushell.sh/commands/docs/from_json.html)
- Results are streamed as results are found instead of being sorted
- Fields
- `version`
- `path`
- `virtual`?
- Can be inferred based on how the environment was found
- `via`
- `$VIRTUAL_ENV`
- `.venv`
- `$PATH`
- `pretty` (default): Print interpreter details in a format designed to be human-readable
- Include same details as the JSONL output
- Sorted by how "good" the interpreter is
- `--ignore-venv`: Ignore virtual environments (or default to `--include-venv`)?
- Might be unnecessary or only useful via `--one`
- `--one`
- Only print the path to the "best" interpreter
- https://github.com/python/cpython/issues/102522 would give more accurate version info for virtual environments