2024-07-31 19:24:55 -04:00
# uv
2024-07-23 14:29:59 -04:00
An extremely fast Python package and project manager, written in Rust.
2024-06-26 12:28:42 -04:00
<p align="center">
2024-07-16 09:54:06 -04:00
<img alt="Shows a bar chart with benchmark results." src="https://github.com/astral-sh/uv/assets/1309177/629e59c0-9c6e-4013-9ad4-adb2bcf5080d#only -light">
2024-07-15 18:22:07 -04:00
</p>
<p align="center">
2024-07-16 09:54:06 -04:00
<img alt="Shows a bar chart with benchmark results." src="https://github.com/astral-sh/uv/assets/1309177/03aa9163-1c79-4a87-a31d-7a9311ed9310#only -dark">
2024-06-26 12:28:42 -04:00
</p>
<p align="center">
2024-08-21 05:48:52 -07:00
<i>Installing <a href="https://trio.readthedocs.io/">Trio</a>'s dependencies with a warm cache.</i>
2024-06-26 12:28:42 -04:00
</p>
## Highlights
2024-10-24 15:56:54 -05:00
- 🚀 A single tool to replace `pip` , `pip-tools` , `pipx` , `poetry` , `pyenv` , `twine` , `virtualenv` ,
and more.
2024-08-05 09:54:06 -04:00
- ⚡️ [10-100x faster ](https://github.com/astral-sh/uv/blob/main/BENCHMARKS.md ) than `pip` .
2025-02-08 22:21:08 +07:00
- 🗂️ Provides [comprehensive project management ](#projects ), with a
2025-02-05 17:22:09 -06:00
[universal lockfile ](./concepts/projects/layout.md#the-lockfile ).
2025-02-08 22:21:08 +07:00
- ❇️ [Runs scripts ](#scripts ), with support for
2024-08-02 15:58:31 +02:00
[inline dependency metadata ](./guides/scripts.md#declaring-script-dependencies ).
2025-02-05 17:22:09 -06:00
- 🐍 [Installs and manages ](#python-versions ) Python versions.
2025-02-08 22:21:08 +07:00
- 🛠️ [Runs and installs ](#tools ) tools published as Python packages.
2024-08-06 15:01:59 -05:00
- 🔩 Includes a [pip-compatible interface ](#the-pip-interface ) for a performance boost with a
familiar CLI.
2024-11-19 13:52:12 -06:00
- 🏢 Supports Cargo-style [workspaces ](./concepts/projects/workspaces.md ) for scalable projects.
2024-07-25 13:37:22 -04:00
- 💾 Disk-space efficient, with a [global cache ](./concepts/cache.md ) for dependency deduplication.
2024-07-24 18:10:33 -04:00
- ⏬ Installable without Rust or Python via `curl` or `pip` .
- 🖥️ Supports macOS, Linux, and Windows.
2024-06-26 12:28:42 -04:00
2024-07-30 18:17:58 -04:00
uv is backed by [Astral ](https://astral.sh ), the creators of
[Ruff ](https://github.com/astral-sh/ruff ).
2024-06-26 12:28:42 -04:00
2025-02-05 17:22:09 -06:00
## Installation
2024-06-26 12:28:42 -04:00
2024-08-03 08:41:33 -05:00
Install uv with our official standalone installer:
2024-06-26 12:28:42 -04:00
2024-08-27 13:05:14 +02:00
=== "macOS and Linux"
2024-07-24 18:10:33 -04:00
2024-08-27 13:05:14 +02:00
```console
$ curl -LsSf https://astral.sh/uv/install.sh | sh
` ``
=== "Windows"
` ``console
2025-02-10 21:42:50 +01:00
$ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
2024-08-27 13:05:14 +02:00
` ``
2024-06-26 12:28:42 -04:00
2024-08-09 12:31:10 -05:00
Then, check out the [first steps](./getting-started/first-steps.md) or read on for a brief overview.
2024-08-03 08:41:33 -05:00
!!! tip
uv may also be installed with pip, Homebrew, and more. See all of the methods on the
2024-08-09 12:31:10 -05:00
[installation page](./getting-started/installation.md).
2024-07-23 14:29:59 -04:00
2025-02-05 17:22:09 -06:00
## Projects
2024-07-23 14:29:59 -04:00
2024-08-05 09:54:06 -04:00
uv manages project dependencies and environments, with support for lockfiles, workspaces, and more,
similar to ` rye` or ` poetry`:
2024-07-23 14:29:59 -04:00
` ``console
$ uv init example
Initialized project ` example` at ` /home/user/example`
$ cd example
$ uv add ruff
2024-09-18 21:22:37 -05:00
Creating virtual environment at: .venv
2024-07-23 14:29:59 -04:00
Resolved 2 packages in 170ms
Built example @ file:///home/user/example
Prepared 2 packages in 627ms
Installed 2 packages in 1ms
+ example==0.1.0 (from file:///home/user/example)
+ ruff==0.5.4
2024-07-24 18:10:33 -04:00
$ uv run ruff check
2024-07-23 14:29:59 -04:00
All checks passed!
2025-02-05 17:22:09 -06:00
$ uv lock
Resolved 2 packages in 0.33ms
$ uv sync
Resolved 2 packages in 0.70ms
Audited 1 package in 0.02ms
2024-07-23 14:29:59 -04:00
` ``
See the [project guide](./guides/projects.md) to get started.
2024-10-24 15:56:54 -05:00
uv also supports building and publishing projects, even if they're not managed with uv. See the
2025-02-05 17:22:09 -06:00
[packaging guide](./guides/package.md) to learn more.
## Scripts
uv manages dependencies and environments for single-file scripts.
Create a new script and add inline metadata declaring its dependencies:
` ``console
$ echo 'import requests; print(requests.get("https://astral.sh"))' > example.py
$ uv add --script example.py requests
Updated ` example.py`
` ``
Then, run the script in an isolated virtual environment:
` ``console
$ uv run example.py
Reading inline script metadata from: example.py
Installed 5 packages in 12ms
<Response [200]>
` ``
2024-10-24 15:56:54 -05:00
2025-02-05 17:22:09 -06:00
See the [scripts guide](./guides/scripts.md) to get started.
## Tools
2024-07-23 14:29:59 -04:00
2024-08-02 15:58:31 +02:00
uv executes and installs command-line tools provided by Python packages, similar to ` pipx`.
2024-07-23 14:29:59 -04:00
2024-08-20 21:01:27 -06:00
Run a tool in an ephemeral environment using ` uvx` (an alias for ` uv tool run`):
2024-07-23 14:29:59 -04:00
` ``console
$ uvx pycowsay 'hello world!'
Resolved 1 package in 167ms
Installed 1 package in 9ms
+ pycowsay==0.0.0.2
"""
------------
< hello world! >
------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
` ``
Install a tool with ` uv tool install`:
` ``console
$ uv tool install ruff
Resolved 1 package in 6ms
Installed 1 package in 2ms
+ ruff==0.5.4
Installed 1 executable: ruff
$ ruff --version
ruff 0.5.4
` ``
See the [tools guide](./guides/tools.md) to get started.
2025-02-05 17:22:09 -06:00
## Python versions
2024-07-23 14:29:59 -04:00
2024-08-03 08:41:33 -05:00
uv installs Python and allows quickly switching between versions.
2024-07-23 14:29:59 -04:00
2024-08-03 08:41:33 -05:00
Install multiple Python versions:
2024-07-23 14:29:59 -04:00
` ``console
$ uv python install 3.10 3.11 3.12
Searching for Python versions matching: Python 3.10
Searching for Python versions matching: Python 3.11
Searching for Python versions matching: Python 3.12
Installed 3 versions in 3.42s
+ cpython-3.10.14-macos-aarch64-none
+ cpython-3.11.9-macos-aarch64-none
+ cpython-3.12.4-macos-aarch64-none
` ``
2024-08-03 08:41:33 -05:00
Download Python versions as needed:
2024-07-23 14:29:59 -04:00
` ``console
$ uv venv --python 3.12.0
2024-09-24 11:45:52 -05:00
Using CPython 3.12.0
2024-09-18 21:22:37 -05:00
Creating virtual environment at: .venv
2024-07-23 14:29:59 -04:00
Activate with: source .venv/bin/activate
2024-07-24 18:10:33 -04:00
2024-10-13 02:30:33 +05:30
$ uv run --python pypy@3.8 -- python
2024-07-24 18:10:33 -04:00
Python 3.8.16 (a9dbdca6fc3286b0addd2240f11d97d8e8de187a, Dec 29 2022, 11:45:30)
[PyPy 7.3.11 with GCC Apple LLVM 13.1.6 (clang-1316.0.21.2.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
2024-08-02 15:58:31 +02:00
>>>>
2024-07-24 18:10:33 -04:00
` ``
Use a specific Python version in the current directory:
2024-09-01 01:04:19 +02:00
` ``console
2024-12-14 12:00:13 -06:00
$ uv python pin 3.11
Pinned ` .python-version` to ` 3.11`
2024-07-23 14:29:59 -04:00
` ``
See the [installing Python guide](./guides/install-python.md) to get started.
2024-07-25 13:37:22 -04:00
## The pip interface
2024-07-23 14:29:59 -04:00
2024-08-05 09:54:06 -04:00
uv provides a drop-in replacement for common ` pip`, ` pip-tools`, and ` virtualenv` commands.
uv extends their interfaces with advanced features, such as dependency version overrides,
2024-08-03 15:47:11 +02:00
platform-independent resolutions, reproducible resolutions, alternative resolution strategies, and
more.
2024-07-23 14:29:59 -04:00
2024-08-05 09:54:06 -04:00
Migrate to uv without changing your existing workflows — and experience a 10-100x speedup — with the
` uv pip` interface.
2024-08-03 15:47:11 +02:00
Compile requirements into a platform-independent requirements file:
2024-07-23 14:29:59 -04:00
` ``console
2024-08-03 08:41:33 -05:00
$ uv pip compile docs/requirements.in \
--universal \
--output-file docs/requirements.txt
2024-07-23 14:29:59 -04:00
Resolved 43 packages in 12ms
` ``
Create a virtual environment:
` ``console
$ uv venv
2024-09-24 11:45:52 -05:00
Using CPython 3.12.3
2024-09-18 21:22:37 -05:00
Creating virtual environment at: .venv
2024-07-23 14:29:59 -04:00
Activate with: source .venv/bin/activate
` ``
Install the locked requirements:
` ``console
$ uv pip sync docs/requirements.txt
Resolved 43 packages in 11ms
Installed 43 packages in 208ms
+ babel==2.15.0
+ black==24.4.2
+ certifi==2024.7.4
...
` ``
2024-08-03 08:41:33 -05:00
See the [pip interface documentation ](./pip/index.md ) to get started.
2024-07-23 14:29:59 -04:00
2024-08-06 15:01:59 -05:00
## Learn more
2024-07-23 14:29:59 -04:00
2024-08-09 12:31:10 -05:00
See the [first steps ](./getting-started/first-steps.md ) or jump straight to the
[guides ](./guides/index.md ) to start using uv.