# How to install Python CLI tools without Python


[uvx.sh](https://uvx.sh) provides installation scripts for any Python tool on {{< term "pypi" "PyPI" >}}. Use it to install tools like ruff, pre-commit, or pytest without having [uv](https://pydevtools.com/handbook/reference/uv.md) or Python already installed.

## Installing a Tool

Replace `{package}` with any PyPI package name:

```bash
curl -LsSf uvx.sh/{package}/install.sh | sh
```

For example, to install ruff:

```bash
curl -LsSf uvx.sh/ruff/install.sh | sh
```
Replace `{package}` with any PyPI package name:

```powershell
powershell -ExecutionPolicy ByPass -c "irm https://uvx.sh/{package}/install.ps1 | iex"
```

For example, to install ruff:

```powershell
powershell -ExecutionPolicy ByPass -c "irm https://uvx.sh/ruff/install.ps1 | iex"
```
## Installing a Specific Version

Add the version number to the URL path:

```bash
curl -LsSf uvx.sh/ruff/0.8.3/install.sh | sh
```

## Forcing Reinstallation

To overwrite an existing installation, pass the `--force` flag:

```bash
curl -LsSf uvx.sh/ruff/install.sh | sh -s -- --force
```

## Using a Custom Package Index

To install from a private or alternative package index:

```bash
curl -LsSf uvx.sh/cmake/install.sh | sh -s -- --index https://download.pytorch.org/whl/cpu
```
