uv é uma ferramenta escrita em Rust pela Astral (os criadores do Ruff) que unifica gerenciamento de pacotes, ambientes virtuais e versões do Python num único binário. É ordens de magnitude mais rápida que pip e elimina a necessidade de combinar múltiplas ferramentas.

Instalação

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

Fluxo de projeto

# Iniciar projeto novo (cria pyproject.toml + .venv)
uv init meu-projeto
cd meu-projeto
 
# Adicionar dependência (instala e registra no pyproject.toml)
uv add requests pandas
 
# Adicionar dependência de desenvolvimento
uv add --dev pytest ruff
 
# Rodar script sem ativar o venv
uv run python main.py
uv run pytest
 
# Sincronizar ambiente com pyproject.toml (equivale ao pip install -r)
uv sync

Gerenciar versões do Python

# Instalar uma versão específica do Python
uv python install 3.12
 
# Listar versões disponíveis
uv python list
 
# Definir versão do projeto
uv python pin 3.12

Substituindo ferramentas existentes

# Equivalente a: pip install
uv pip install requests
 
# Equivalente a: python -m venv .venv
uv venv
 
# Equivalente a: pip install -r requirements.txt
uv pip install -r requirements.txt

Comparativo com outras ferramentas

FerramentaFunçãoVelocidadeObservação
uvtudo (pacotes + venv + Python)muito rápida (Rust)substitui todos abaixo
pipinstalar pacoteslentapadrão histórico, sem lock file
venvcriar ambientes virtuais-nativo, mas só cria o env
pyenvgerenciar versões do Python-não gerencia pacotes
poetrypacotes + venv + buildmoderadaboa DX, mais lenta que uv
pipenvpacotes + venvlentaPipfile, quase abandonado
condapacotes + venv + binários Clentaforte em data science / ML

Quando ainda usar outras ferramentas

  • conda: quando o projeto depende de pacotes com binários C complexos (NumPy com MKL, CUDA, etc.) ou quando a equipe já usa Anaconda
  • pyenv: em máquinas onde uv não gerencia o Python do sistema (raro)
  • poetry: projetos que precisam de pyproject.toml com build de pacote publicável no PyPI (uv também suporta, mas poetry ainda tem mais adoção nesse nicho)

pyproject.toml gerado pelo uv

[project]
name = "meu-projeto"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
    "requests>=2.32",
    "pandas>=2.2",
]
 
[dependency-groups]
dev = [
    "pytest>=8.0",
    "ruff>=0.4",
]

O uv.lock gerado junto garante builds reproduzíveis, equivalente ao poetry.lock.

Ver também: python-engenharia-dados | ci-cd