Skip to main content

uv

An extremely fast Python package and project manager, written in Rust.

Shows a bar chart with benchmark results.

Installing Trio's dependencies with a warm cache.

Highlights

uv is backed by Astral, the creators of Ruff and ty.

Installation

Install uv with our standalone installers:

# On macOS and Linux.
curl -LsSf https://astral.sh/uv/install.sh | sh
# On Windows.
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

Or, from PyPI:

# With pip.
pip install uv
# Or pipx.
pipx install uv

If installed via the standalone installer, uv can update itself to the latest version:

uv self update

See the installation documentation for details and alternative installation methods.

Documentation

uv's documentation is available at docs.astral.sh/uv.

Additionally, the command line reference documentation can be viewed with uv help.

Features

Projects

uv manages project dependencies and environments, with support for lockfiles, workspaces, and more, similar to rye or poetry:

$ uv init example
Initialized project `example` at `/home/user/example`

$ cd example

$ uv add ruff
Creating virtual environment at: .venv
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.0

$ uv run ruff check
All checks passed!

$ uv lock
Resolved 2 packages in 0.33ms

$ uv sync
Resolved 2 packages in 0.70ms
Checked 1 package in 0.02ms

See the project documentation to get started.

uv also supports building and publishing projects, even if they're not managed with uv. See the publish guide to learn more.

Scripts

uv manages dependencies and environments for single-file scripts.

Create a new script and add inline metadata declaring its dependencies:

$ 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:

$ uv run example.py
Reading inline script metadata from: example.py
Installed 5 packages in 12ms
<Response [200]>

See the scripts documentation to get started.

Tools

uv executes and installs command-line tools provided by Python packages, similar to pipx.

Run a tool in an ephemeral environment using uvx (an alias for uv tool run):

$ 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:

$ uv tool install ruff
Resolved 1 package in 6ms
Installed 1 package in 2ms
 + ruff==0.5.0
Installed 1 executable: ruff

$ ruff --version
ruff 0.5.0

See the tools documentation to get started.

Python versions

uv installs Python and allows quickly switching between versions.

Install multiple Python versions:

$ uv python install 3.12 3.13 3.14
Installed 3 versions in 972ms
 + cpython-3.12.12-macos-aarch64-none (python3.12)
 + cpython-3.13.9-macos-aarch64-none (python3.13)
 + cpython-3.14.0-macos-aarch64-none (python3.14)

Download Python versions as needed:

$ uv venv --python 3.12.0
Using Python 3.12.0
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate

$ uv run --python pypy@3.8 -- python --version
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.
>>>>

Use a specific Python version in the current directory:

$ uv python pin 3.11
Pinned `.python-version` to `3.11`

See the Python installation documentation to get started.

The pip interface

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, platform-independent resolutions, reproducible resolutions, alternative resolution strategies, and more.

Migrate to uv without changing your existing workflows — and experience a 10-100x speedup — with the uv pip interface.

Compile requirements into a platform-independent requirements file:

$ uv pip compile requirements.in \
   --universal \
   --output-file requirements.txt
Resolved 43 packages in 12ms

Create a virtual environment:

$ uv venv
Using Python 3.12.3
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate

Install the locked requirements:

$ uv pip sync requirements.txt
Resolved 43 packages in 11ms
Installed 43 packages in 208ms
 + babel==2.15.0
 + black==24.4.2
 + certifi==2024.7.4
 ...

See the pip interface documentation to get started.

Contributing

We are passionate about supporting contributors of all levels of experience and would love to see you get involved in the project. See the contributing guide to get started.

FAQ

How do you pronounce uv?

It's pronounced as "you - vee" (/juː viː/)

How should I stylize uv?

Just "uv", please. See the style guide for details.

What platforms does uv support?

See uv's platform support document.

Is uv ready for production?

Yes, uv is stable and widely used in production. See uv's versioning policy document for details.

Acknowledgements

uv's dependency resolver uses PubGrub under the hood. We're grateful to the PubGrub maintainers, especially Jacob Finkelman, for their support.

uv's Git implementation is based on Cargo.

Some of uv's optimizations are inspired by the great work we've seen in pnpm, Orogene, and Bun. We've also learned a lot from Nathaniel J. Smith's Posy and adapted its trampoline for Windows support.

License

uv is licensed under either of

at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in uv by you, as defined in the Apache-2.0 license, shall be dually licensed as above, without any additional terms or conditions.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

uv-0.12.5.tar.gz (7.1 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

uv-0.12.5-py3-none-win_arm64.whl (20.4 MB view details)

Uploaded Python 3Windows ARM64

uv-0.12.5-py3-none-win_amd64.whl (21.6 MB view details)

Uploaded Python 3Windows x86-64

uv-0.12.5-py3-none-win32.whl (20.7 MB view details)

Uploaded Python 3Windows x86

uv-0.12.5-py3-none-musllinux_1_1_x86_64.whl (23.9 MB view details)

Uploaded Python 3musllinux: musl 1.1+ x86-64

uv-0.12.5-py3-none-musllinux_1_1_i686.whl (22.5 MB view details)

Uploaded Python 3musllinux: musl 1.1+ i686

uv-0.12.5-py3-none-manylinux_2_31_riscv64.whl (23.5 MB view details)

Uploaded Python 3manylinux: glibc 2.31+ riscv64

uv-0.12.5-py3-none-manylinux_2_31_riscv64.musllinux_1_1_riscv64.whl (23.3 MB view details)

Uploaded Python 3manylinux: glibc 2.31+ riscv64musllinux: musl 1.1+ riscv64

uv-0.12.5-py3-none-manylinux_2_28_aarch64.whl (22.4 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

uv-0.12.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (23.7 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

uv-0.12.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl (24.2 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ s390x

uv-0.12.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (24.6 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ppc64le

uv-0.12.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl (23.4 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ i686

uv-0.12.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (22.8 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARMv7l

uv-0.12.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl (22.7 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARMv7lmusllinux: musl 1.1+ ARMv7l

uv-0.12.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl (22.2 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64musllinux: musl 1.1+ ARM64

uv-0.12.5-py3-none-macosx_11_0_arm64.whl (19.3 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

uv-0.12.5-py3-none-macosx_10_12_x86_64.whl (21.4 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

uv-0.12.5-py3-none-linux_armv6l.whl (23.3 MB view details)

Uploaded Python 3

File details

Details for the file uv-0.12.5.tar.gz.

File metadata

  • Download URL: uv-0.12.5.tar.gz
  • Upload date:
  • Size: 7.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.4 {"installer":{"name":"uv","version":"0.12.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for uv-0.12.5.tar.gz
Algorithm Hash digest
SHA256 442a21d181faae21742aaaf6d2091a0d27755d3eac344061a9a00c90169b7524
MD5 f02995fcacb68ac075ffd608ca7792da
BLAKE2b-256 7cb03085b844fe59aa319a3f94a5cca9938fffecc82705aa9c2762a749f7095c

See more details on using hashes here.

File details

Details for the file uv-0.12.5-py3-none-win_arm64.whl.

File metadata

  • Download URL: uv-0.12.5-py3-none-win_arm64.whl
  • Upload date:
  • Size: 20.4 MB
  • Tags: Python 3, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.4 {"installer":{"name":"uv","version":"0.12.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for uv-0.12.5-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 bea86f27a027e0e3af908db4bdd4f1ceef3ca2bd47673b5ccca7f550e325b1b4
MD5 c369b9b6d85c73e508bc9f323be3c174
BLAKE2b-256 bcfbe1266399f755f97a0783de379f2fed6dae0a2a240db32fe5a2eb976fec8a

See more details on using hashes here.

File details

Details for the file uv-0.12.5-py3-none-win_amd64.whl.

File metadata

  • Download URL: uv-0.12.5-py3-none-win_amd64.whl
  • Upload date:
  • Size: 21.6 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.4 {"installer":{"name":"uv","version":"0.12.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for uv-0.12.5-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 455c3e57602e2141e66e2f0bf685898c9c5e5a70377d14c9a71554a3baf3ddbf
MD5 6850dde7e3016a40010850392f5430c0
BLAKE2b-256 cef6a9af9311c7f5640ca2bfcfdedb7aca37fa6d1d9f5c981fb50c5be02b7477

See more details on using hashes here.

File details

Details for the file uv-0.12.5-py3-none-win32.whl.

File metadata

  • Download URL: uv-0.12.5-py3-none-win32.whl
  • Upload date:
  • Size: 20.7 MB
  • Tags: Python 3, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.4 {"installer":{"name":"uv","version":"0.12.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for uv-0.12.5-py3-none-win32.whl
Algorithm Hash digest
SHA256 39bb102766c95571781a7b4c611675ea213e08df5c680f3936279b3c0d1f6c3c
MD5 fcb1b5c4b551209914b36ce133c31351
BLAKE2b-256 0a389053599a73a351d1cd34195c7a48c1db4d4d51b57b543607fad7ecf9354c

See more details on using hashes here.

File details

Details for the file uv-0.12.5-py3-none-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: uv-0.12.5-py3-none-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 23.9 MB
  • Tags: Python 3, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.4 {"installer":{"name":"uv","version":"0.12.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for uv-0.12.5-py3-none-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 dc14e4f81a99b585a891350c60d1ff4557d54cb3c3c81fa45fd4e0dd512ba752
MD5 61cc53a20094c6cdff6c9e947226e932
BLAKE2b-256 37cc01e39e1dbeb838a6b3c26bf97c867d6f366459b22a38bea691af8c6c94c0

See more details on using hashes here.

File details

Details for the file uv-0.12.5-py3-none-musllinux_1_1_i686.whl.

File metadata

  • Download URL: uv-0.12.5-py3-none-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 22.5 MB
  • Tags: Python 3, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.4 {"installer":{"name":"uv","version":"0.12.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for uv-0.12.5-py3-none-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 7817f8e957960f9ddc452ea353f283c0d6393e2e31b400276485adced5b1f371
MD5 f5a25fd27d19a20b359001966607eb7d
BLAKE2b-256 60e78bdc37669a6cd2b46a2ec08ccbb58c61395ec84a073e199f5a4a64bb998f

See more details on using hashes here.