mirror of
https://github.com/jbranchaud/til
synced 2026-07-08 18:10:33 +00:00
52 lines
1.2 KiB
Markdown
52 lines
1.2 KiB
Markdown
# Globally Install CLI Tool With UV
|
||
|
||
When I add a tool like [`ruff`](https://github.com/astral-sh/ruff) to my project
|
||
with [`uv`](https://docs.astral.sh/uv/):
|
||
|
||
```bash
|
||
❯ uv add --dev ruff
|
||
```
|
||
|
||
Then I can run that tool within that project using `uv`:
|
||
|
||
```bash
|
||
❯ uv run ruff format
|
||
```
|
||
|
||
However if I want to be able to run that tool via its binary directly,
|
||
especially outside the context of that project, then I need to instead install
|
||
it globally.
|
||
|
||
This can be done with `uv` using the `tool install` subcommand:
|
||
|
||
```bash
|
||
❯ uv tool install ruff
|
||
Resolved 1 package in 192ms
|
||
Installed 1 package in 4ms
|
||
+ ruff==0.15.20
|
||
Installed 1 executable: ruff
|
||
```
|
||
|
||
Now I can run `ruff` directly from anywhere:
|
||
|
||
```bash
|
||
❯ ruff config line-length
|
||
The line length to use when enforcing long-lines violations (like `E501`)
|
||
and at which `isort` and the formatter prefers to wrap lines.
|
||
|
||
...
|
||
```
|
||
|
||
The `ruff` binary gets symlinked into my `.local/bin/` directory which is coming
|
||
from the `uv` tool directory.
|
||
|
||
```bash
|
||
❯ which ruff
|
||
/Users/lastword/.local/bin/ruff
|
||
|
||
❯ readlink -n /Users/lastword/.local/bin/ruff
|
||
/Users/lastword/.local/share/uv/tools/ruff/bin/ruff
|
||
```
|
||
|
||
See `uv tool install --help` for more details.
|