# Inspiration | Tool | Date added | Version | | --------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | | [`hatch python`](https://hatch.pypa.io/latest/cli/reference/#hatch-python) | [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`](https://pdm-project.org/latest/reference/cli/#python) | [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) | | [`uv python`](https://docs.astral.sh/uv/reference/cli/#uv-python) | [2024-08-24](https://astral.sh/blog/uv-unified-python-packaging) | [0.3](https://astral.sh/blog/uv-unified-python-packaging) | | [`poetry python`](https://python-poetry.org/docs/cli/#python) | [2025-02-15](https://python-poetry.org/history/#210---2025-02-15) | [2.1.0](https://python-poetry.org/history/#210---2025-02-15) | | [`pymanager install`](https://peps.python.org/pep-0773/#install-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 ``` Usage: hatch python install [OPTIONS] NAMES... Install Python distributions. You may select `all` to install all compatible distributions: ``` hatch python install all ``` You can set custom sources for distributions by setting the `HATCH_PYTHON_SOURCE_<NAME>` environment variable where `<NAME>` is the uppercased version of the distribution name with periods replaced by underscores e.g. `HATCH_PYTHON_SOURCE_PYPY3_10`. Options: --private Do not add distributions to the user PATH -u, --update Update existing installations -d, --dir TEXT The directory in which to install distributions, overriding configuration -h, --help Show this message and exit. ``` ## PDM ``` usage: pdm python install [-h] [-v | -q] [--list] [--min] [version] Install a Python interpreter with PDM positional arguments: version The Python version to install (e.g. [email protected]). If left empty, highest cPython version that matches this platform/arch is installed. If pyproject.toml with requires- python is available, this is considered as well. 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 --list, -l List all available Python versions --min Use minimum instead of highest version for installation if `version` is left empty ``` ## uv ``` Download and install Python versions Usage: uv python install [OPTIONS] [TARGETS]... Arguments: [TARGETS]... The Python version(s) to install [env: UV_PYTHON=] Options: -i, --install-dir <INSTALL_DIR> The directory to store the Python installation in [env: UV_PYTHON_INSTALL_DIR=] --no-bin Do not install a Python executable into the `bin` directory --no-registry Do not register the Python installation in the Windows registry --mirror <MIRROR> Set the URL to use as the source for downloading Python installations --pypy-mirror <PYPY_MIRROR> Set the URL to use as the source for downloading PyPy installations --python-downloads-json-url <PYTHON_DOWNLOADS_JSON_URL> URL pointing to JSON of custom Python installations -r, --reinstall Reinstall the requested Python version, if it's already installed -f, --force Replace existing Python executables during installation -U, --upgrade Upgrade existing Python installations to the latest patch version --default Use as the default Python version --compile-bytecode Compile Python's standard library to bytecode after installation [env: UV_COMPILE_BYTECODE=] 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 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 ``` ## Poetry ``` Description: Install the specified Python version from the Python Standalone Builds project. (experimental feature) Usage: python install [options] [--] <python> Arguments: python The python version to install. Options: -c, --clean Clean up installation if check fails. -t, --free-threaded Use free-threaded version if available. -i, --implementation=IMPLEMENTATION Python implementation to use. (cpython, pypy) [default: "cpython"] -r, --reinstall Reinstall if installation already exists. -h, --help Display help for the given command. When no command is given display help for the list command. -q, --quiet Do not output any message. -V, --version Display this application version. --ansi Force ANSI output. --no-ansi Disable ANSI output. -n, --no-interaction Do not ask any interactive question. --no-plugins Disables plugins. --no-cache Disables Poetry source caches. -P, --project=PROJECT Specify another path as the project root. All command-line arguments will be resolved relative to the current working directory. -C, --directory=DIRECTORY The working directory for the Poetry command (defaults to the current working directory). All command-line arguments will be resolved relative to the given directory. -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug. ``` ## PyManager ```powershell gt; py install [-s=|--source=<URL>] [-f|--force] [-u|--update] [--dry-run] [<TAG>...] ``` New runtime versions may be added using `py install`. One or more tags may be specified, and the special tag default may be used to select the default. Ranges are not supported for installation. The `--source=<URL>` option allows overriding the online index that is used to obtain runtimes. This may be used with an offline index, as shown in Offline installs. Passing `--force` will ignore any cached files and remove any existing install to replace it with the specified one. Passing `--update` will replace existing installs if the new version is newer. Otherwise, they will be left. If no tags are provided with `--update`, all installs managed by the Python install manager will be updated if newer versions are available. Updates will remove any modifications made to the install, including globally installed packages, but virtual environments will continue to work. Passing `--dry-run` will generate output and logs, but will not modify any installs. In addition to the above options, the `--target` option will extract the runtime to the specified directory instead of doing a normal install. This is useful for embedding runtimes into larger applications. Unlike a normal install, `py` will not be aware of the extracted runtime, and no Start menu or other shortcuts will be created. To launch the runtime, directly execute the main executable (typically `python.exe`) in the target directory. ```powershell gt; py install ... [-t=|--target=<PATH>] <TAG> ``` The `py exec` command will install the requested runtime if it is not already present. This is controlled by the `automatic_install` configuration (`PYTHON_MANAGER_AUTOMATIC_INSTALL`), and is enabled by default. If no runtimes are available at all, all launch commands will do an automatic install if the configuration setting allows. This is to ensure a good experience for new users, but should not generally be relied on rather than using the `py exec` command or explicit install commands. #### Purpose Install/manage Python interpreters. #### Notes - Worry about anything other than CPython? - PyPy? - Any builds other than the native CPU? - WASI?