https://github.com/brettcannon/python-launcher/discussions/222
# Installation
- PyPI wheel?
- Lock file via URL or path?
- GitHub releases?
# Discovery
- `py-<name>` on `$PATH`
- ... and on a configurable list of additional paths
- Extension installed via `py extension install`
# Commands
- install
- uninstall
- update/refresh
- list
- info? Or `list` with more details?
# Calling convention
- `PY_PATH`: path to `py` that's executing the extension
- `PY_APP_VERSION`: version of `py` (name is tricky due to `PY_VERSION` already being a thing)
- Special support for `.pyz` files?
- Detection
- Detect when an extension is a zip file and has appropriate shebang?
- File ends in `.pyz`?
- Installed via `extension install` subcommand?
- Detect required Python version and use a global interpreter version in isolated mode to call it
- Skips having to launch `py` again by the OS via the shebang line (less of a concern if the barebones part of `py` is in Rust)
- Depending on detection method, avoids having to set the shebang
# SDK
- `path()`
- `version()`
- Helpers for any built-in subcommands