uv - A Ferramenta Rápida
uv é um gerenciador de pacotes Python tudo-em-um escrito em Rust. Ele substitui pip, venv, pip-tools e pyenv por uma única CLI rápida - o padrão recomendado para projetos Python 3.14.
Receita
Cartão de receita de referência rápida - pronto para copiar e colar.
# Instalar uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# Novo projeto
uv init myapp && cd myapp
uv add fastapi pydantic
uv run uvicorn myapp.main:app --reload
# Projeto existente
uv sync
uv run pytestQuando usar isso:
- Iniciando um novo projeto Python 3.14
- Substituindo fluxos de trabalho lentos de
pip install+ venv manual - Pipelines de CI que precisam de instalações de dependência em menos de um segundo
- Gerenciando múltiplas versões do Python sem pyenv
Exemplo de Trabalho
#!/usr/bin/env bash
set -euo pipefail
# Inicializar um serviço FastAPI com uv
uv init invoice-api
cd invoice-api
uv add "fastapi>=0.115" "uvicorn[standard]>=0.34" "pydantic>=2"
cat > src/invoice_api/main.py <<'PY'
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Invoice(BaseModel):
id: int
amount: float
@app.get("/health")
def health() -> dict[str, str]:
return {"status": "ok"}
@app.post("/invoices")
def create(invoice: Invoice) -> Invoice:
return invoice
PY
uv run uvicorn invoice_api.main:app --host 0.0.0.0 --port 8000O que isso demonstra:
uv initcria a estruturapyproject.toml,src/e.venvuv addresolve dependências e atualizauv.lockuv runexecuta dentro do ambiente do projeto sem ativação manual- Pontos de entrada são resolvidos automaticamente a partir do pacote
src/
Mergulho Profundo
Como Funciona
- uv usa um cache global de pacotes e hardlinks para diretórios
.venvpor projeto. - A resolução ocorre em Rust - tipicamente 10-100x mais rápido que o pip para árvores de dependência grandes.
uv.locké um lockfile universal (compatível com PEP 751) com versões exatas e hashes.uv pythongerencia downloads de interpretadores junto com o gerenciamento de pacotes.
Comandos Principais
| Comando | Propósito |
|---|---|
uv init | Criar novo projeto com pyproject.toml |
uv add <pkg> | Adicionar dependência de tempo de execução |
uv remove <pkg> | Remover dependência |
uv sync | Instalar a partir do lockfile |
uv lock | Regenerar o lockfile |
uv run <cmd> | Executar comando no venv do projeto |
uv pip install | Interface de instalação compatível com pip |
uv python install | Baixar interpretadores Python |
Notas Python
# Fixar interpretador para o projeto
uv python pin 3.14
# Executar com uma versão específica sem alterar o pin
uv run --python 3.13 pytest
# Atualizar todas as dependências
uv lock --upgradeArmadilhas
- Esquecer
uv syncapós clonar - imports falham comModuleNotFoundError. Correção: executeuv sync(ouuv sync --frozenem CI) antes de qualquer comando. - Misturar pip e uv no mesmo venv - conflitos de metadados causam desvios sutis de versão. Correção: escolha uma ferramenta por projeto; use
uv pipse precisar da semântica do pip. - Não commitar
uv.lock- colegas de equipe obtêm versões de dependência diferentes. Correção: comite o lockfile; useuv sync --frozenem CI. - Executar
uv addsem atualizar o lock -pyproject.tomle lockfile divergem. Correção:uv addatualiza ambos; se editarpyproject.tomlmanualmente, executeuv lockdepois. uv pip installglobal - polui o interpretador do sistema. Correção: sempre trabalhe dentro de um projeto (uv init/uv sync) ou passe--pythonexplicitamente.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| pip + venv | Projetos legados, ferramentas mínimas | Você precisa de lockfiles ou velocidade |
| Poetry | Equipe já padronizada em Poetry | Iniciando do zero (uv é mais rápido) |
| PDM | Fluxo de trabalho PEP 582 __pypackages__ preferido | Você quer um .venv tradicional |
| conda/mamba | Pilha científica com bibliotecas C | Aplicativos web puramente PyPI |
FAQs
uv substitui o pip inteiramente?
uv fornece uv pip para comandos compatíveis com pip e uv add/uv sync para fluxos de trabalho de projeto. Você pode migrar incrementalmente.
Onde uv armazena pacotes baixados?
Um cache global (tipicamente ~/.cache/uv/). Diretórios .venv de projeto fazem hardlink do cache, economizando espaço em disco.
Posso usar uv com um requirements.txt existente?
Sim: uv pip install -r requirements.txt. Para manutenção a longo prazo, migre para pyproject.toml com uv add.
Como faço para atualizar uma única dependência?
uv lock --upgrade-package httpx e depois uv sync.
uv funciona no Windows?
Sim. Instale via powershell -c "irm https://astral.sh/uv/install.ps1 | iex".
Qual a diferença entre uv sync e uv run?
uv sync instala dependências em .venv. uv run executa um comando dentro desse ambiente.
uv pode gerenciar dependências de desenvolvimento?
Sim. Use [dependency-groups] em pyproject.toml e uv sync --group dev.
Como uv se compara ao Poetry para publicação?
uv foca na velocidade de instalação e gerenciamento de lockfile. Para construir e publicar wheels, combine uv com hatchling ou use uv build / uv publish.
Devo ativar o venv ao usar uv?
Não. uv run cuida da ativação do ambiente. source .venv/bin/activate manual ainda funciona se você preferir.
Como defino um índice privado com uv?
export UV_INDEX_URL=https://pypi.internal/simple/ ou configure [[tool.uv.index]] em pyproject.toml.
Relacionados
- Noções Básicas de Ambientes e Empacotamento - Fundamentos de venv e isolamento
- pyproject.toml Explicado - Estrutura de metadados do projeto
- Resolução de Dependências e Lockfiles - Estratégias de fixação
- Gerenciando Versões do Python - Testes multi-versão
Versões da Pilha: Esta página foi escrita para Python 3.14.0, FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, e uv 0.6+.