mirror of
https://github.com/astral-sh/uv.git
synced 2025-08-04 10:58:28 +00:00

Some checks are pending
CI / check system | python on macos aarch64 (push) Blocked by required conditions
CI / test windows trampoline | x86_64 (push) Blocked by required conditions
CI / typos (push) Waiting to run
CI / check system | alpine (push) Blocked by required conditions
CI / build binary | freebsd (push) Blocked by required conditions
CI / Determine changes (push) Waiting to run
CI / check windows trampoline | i686 (push) Blocked by required conditions
CI / lint (push) Waiting to run
CI / cargo clippy | ubuntu (push) Blocked by required conditions
CI / cargo clippy | windows (push) Blocked by required conditions
CI / cargo dev generate-all (push) Blocked by required conditions
CI / cargo shear (push) Waiting to run
CI / check windows trampoline | x86_64 (push) Blocked by required conditions
CI / cargo test | ubuntu (push) Blocked by required conditions
CI / cargo test | macos (push) Blocked by required conditions
CI / cargo test | windows (push) Blocked by required conditions
CI / check windows trampoline | aarch64 (push) Blocked by required conditions
CI / test windows trampoline | i686 (push) Blocked by required conditions
CI / mkdocs (push) Waiting to run
CI / build binary | linux (push) Blocked by required conditions
CI / build binary | macos aarch64 (push) Blocked by required conditions
CI / build binary | macos x86_64 (push) Blocked by required conditions
CI / build binary | windows (push) Blocked by required conditions
CI / cargo build (msrv) (push) Blocked by required conditions
CI / ecosystem test | prefecthq/prefect (push) Blocked by required conditions
CI / ecosystem test | pallets/flask (push) Blocked by required conditions
CI / integration test | conda on ubuntu (push) Blocked by required conditions
CI / integration test | free-threaded on linux (push) Blocked by required conditions
CI / integration test | free-threaded on windows (push) Blocked by required conditions
CI / integration test | pypy on ubuntu (push) Blocked by required conditions
CI / integration test | pypy on windows (push) Blocked by required conditions
CI / integration test | graalpy on ubuntu (push) Blocked by required conditions
CI / integration test | graalpy on windows (push) Blocked by required conditions
CI / integration test | github actions (push) Blocked by required conditions
CI / integration test | determine publish changes (push) Blocked by required conditions
CI / integration test | uv publish (push) Blocked by required conditions
CI / check cache | ubuntu (push) Blocked by required conditions
CI / check cache | macos aarch64 (push) Blocked by required conditions
CI / check system | python on debian (push) Blocked by required conditions
CI / check system | python on fedora (push) Blocked by required conditions
CI / check system | python on ubuntu (push) Blocked by required conditions
CI / check system | python on opensuse (push) Blocked by required conditions
CI / check system | python on rocky linux 8 (push) Blocked by required conditions
CI / check system | python on rocky linux 9 (push) Blocked by required conditions
CI / check system | pypy on ubuntu (push) Blocked by required conditions
CI / check system | pyston (push) Blocked by required conditions
CI / check system | homebrew python on macos aarch64 (push) Blocked by required conditions
CI / check system | python on macos x86_64 (push) Blocked by required conditions
CI / check system | python3.10 on windows (push) Blocked by required conditions
CI / check system | python3.10 on windows x86 (push) Blocked by required conditions
CI / check system | python3.13 on windows (push) Blocked by required conditions
CI / check system | python3.12 via chocolatey (push) Blocked by required conditions
CI / check system | python3.9 via pyenv (push) Blocked by required conditions
CI / check system | python3.13 (push) Blocked by required conditions
CI / check system | conda3.11 on linux (push) Blocked by required conditions
CI / check system | conda3.8 on linux (push) Blocked by required conditions
CI / check system | conda3.11 on macos (push) Blocked by required conditions
CI / check system | conda3.8 on macos (push) Blocked by required conditions
CI / check system | conda3.11 on windows (push) Blocked by required conditions
CI / check system | conda3.8 on windows (push) Blocked by required conditions
CI / check system | amazonlinux (push) Blocked by required conditions
CI / check system | embedded python3.10 on windows (push) Blocked by required conditions
CI / benchmarks (push) Blocked by required conditions
## Summary Figured this could be helpful to mention in the documentation, as it might not be obvious that this is possible. ## Test Plan Tested the commands locally.
238 lines
5.6 KiB
Markdown
238 lines
5.6 KiB
Markdown
# Using tools
|
|
|
|
Many Python packages provide applications that can be used as tools. uv has specialized support for
|
|
easily invoking and installing tools.
|
|
|
|
## Running tools
|
|
|
|
The `uvx` command invokes a tool without installing it.
|
|
|
|
For example, to run `ruff`:
|
|
|
|
```console
|
|
$ uvx ruff
|
|
```
|
|
|
|
!!! note
|
|
|
|
This is exactly equivalent to:
|
|
|
|
```console
|
|
$ uv tool run ruff
|
|
```
|
|
|
|
`uvx` is provided as an alias for convenience.
|
|
|
|
Arguments can be provided after the tool name:
|
|
|
|
```console
|
|
$ uvx pycowsay hello from uv
|
|
|
|
-------------
|
|
< hello from uv >
|
|
-------------
|
|
\ ^__^
|
|
\ (oo)\_______
|
|
(__)\ )\/\
|
|
||----w |
|
|
|| ||
|
|
|
|
```
|
|
|
|
Tools are installed into temporary, isolated environments when using `uvx`.
|
|
|
|
!!! note
|
|
|
|
If you are running a tool in a [_project_](../concepts/projects.md) and the tool requires that
|
|
your project is installed, e.g., when using `pytest` or `mypy`, you'll want to use
|
|
[`uv run`](./projects.md#running-commands) instead of `uvx`. Otherwise, the tool will be run in
|
|
a virtual environment that is isolated from your project.
|
|
|
|
If your project has a flat structure, e.g., instead of using a `src` directory for modules,
|
|
the project itself does not need to be installed and `uvx` is fine. In this case, using
|
|
`uv run` is only beneficial if you want to pin the version of the tool in the project's
|
|
dependencies.
|
|
|
|
## Commands with different package names
|
|
|
|
When `uvx ruff` is invoked, uv installs the `ruff` package which provides the `ruff` command.
|
|
However, sometimes the package and command names differ.
|
|
|
|
The `--from` option can be used to invoke a command from a specific package, e.g. `http` which is
|
|
provided by `httpie`:
|
|
|
|
```console
|
|
$ uvx --from httpie http
|
|
```
|
|
|
|
## Requesting specific versions
|
|
|
|
To run a tool at a specific version, use `command@<version>`:
|
|
|
|
```console
|
|
$ uvx ruff@0.3.0 check
|
|
```
|
|
|
|
To run a tool at the latest version, use `command@latest`:
|
|
|
|
```console
|
|
$ uvx ruff@latest check
|
|
```
|
|
|
|
The `--from` option can also be used to specify package versions, as above:
|
|
|
|
```console
|
|
$ uvx --from 'ruff==0.3.0' ruff check
|
|
```
|
|
|
|
Or, to constrain to a range of versions:
|
|
|
|
```console
|
|
$ uvx --from 'ruff>0.2.0,<0.3.0' ruff check
|
|
```
|
|
|
|
Note the `@` syntax cannot be used for anything other than an exact version.
|
|
|
|
## Requesting extras
|
|
|
|
The `--from` option can be used to run a tool with extras:
|
|
|
|
```console
|
|
$ uvx --from 'mypy[faster-cache,reports]' mypy --xml-report mypy_report
|
|
```
|
|
|
|
This can also be combined with version selection:
|
|
|
|
```console
|
|
$ uvx --from 'mypy[faster-cache,reports]==1.13.0' mypy --xml-report mypy_report
|
|
```
|
|
|
|
## Requesting different sources
|
|
|
|
The `--from` option can also be used to install from alternative sources.
|
|
|
|
For example, to pull from git:
|
|
|
|
```console
|
|
$ uvx --from git+https://github.com/httpie/cli httpie
|
|
```
|
|
|
|
You can also pull the latest commit from a specific named branch:
|
|
|
|
```console
|
|
$ uvx --from git+https://github.com/httpie/cli@master httpie
|
|
```
|
|
|
|
Or pull a specific tag:
|
|
|
|
```console
|
|
$ uvx --from git+https://github.com/httpie/cli@3.2.4 httpie
|
|
```
|
|
|
|
Or even a specific commit:
|
|
|
|
```console
|
|
$ uvx --from git+https://github.com/httpie/cli@2843b87 httpie
|
|
```
|
|
|
|
## Commands with plugins
|
|
|
|
Additional dependencies can be included, e.g., to include `mkdocs-material` when running `mkdocs`:
|
|
|
|
```console
|
|
$ uvx --with mkdocs-material mkdocs --help
|
|
```
|
|
|
|
## Installing tools
|
|
|
|
If a tool is used often, it is useful to install it to a persistent environment and add it to the
|
|
`PATH` instead of invoking `uvx` repeatedly.
|
|
|
|
!!! tip
|
|
|
|
`uvx` is a convenient alias for `uv tool run`. All of the other commands for interacting with
|
|
tools require the full `uv tool` prefix.
|
|
|
|
To install `ruff`:
|
|
|
|
```console
|
|
$ uv tool install ruff
|
|
```
|
|
|
|
When a tool is installed, its executables are placed in a `bin` directory in the `PATH` which allows
|
|
the tool to be run without uv. If it's not on the `PATH`, a warning will be displayed and
|
|
`uv tool update-shell` can be used to add it to the `PATH`.
|
|
|
|
After installing `ruff`, it should be available:
|
|
|
|
```console
|
|
$ ruff --version
|
|
```
|
|
|
|
Unlike `uv pip install`, installing a tool does not make its modules available in the current
|
|
environment. For example, the following command will fail:
|
|
|
|
```console
|
|
$ python -c "import ruff"
|
|
```
|
|
|
|
This isolation is important for reducing interactions and conflicts between dependencies of tools,
|
|
scripts, and projects.
|
|
|
|
Unlike `uvx`, `uv tool install` operates on a _package_ and will install all executables provided by
|
|
the tool.
|
|
|
|
For example, the following will install the `http`, `https`, and `httpie` executables:
|
|
|
|
```console
|
|
$ uv tool install httpie
|
|
```
|
|
|
|
Additionally, package versions can be included without `--from`:
|
|
|
|
```console
|
|
$ uv tool install 'httpie>0.1.0'
|
|
```
|
|
|
|
And, similarly, for package sources:
|
|
|
|
```console
|
|
$ uv tool install git+https://github.com/httpie/cli
|
|
```
|
|
|
|
As with `uvx`, installations can include additional packages:
|
|
|
|
```console
|
|
$ uv tool install mkdocs --with mkdocs-material
|
|
```
|
|
|
|
## Upgrading tools
|
|
|
|
To upgrade a tool, use `uv tool upgrade`:
|
|
|
|
```console
|
|
$ uv tool upgrade ruff
|
|
```
|
|
|
|
Tool upgrades will respect the version constraints provided when installing the tool. For example,
|
|
`uv tool install ruff >=0.3,<0.4` followed by `uv tool upgrade ruff` will upgrade Ruff to the latest
|
|
version in the range `>=0.3,<0.4`.
|
|
|
|
To instead replace the version constraints, re-install the tool with `uv tool install`:
|
|
|
|
```console
|
|
$ uv tool install ruff>=0.4
|
|
```
|
|
|
|
To instead upgrade all tools:
|
|
|
|
```console
|
|
$ uv tool upgrade --all
|
|
```
|
|
|
|
## Next steps
|
|
|
|
To learn more about managing tools with uv, see the [Tools concept](../concepts/tools.md) page and
|
|
the [command reference](../reference/cli.md#uv-tool).
|
|
|
|
Or, read on to learn how to to [work on projects](./projects.md).
|