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 syncGerenciar 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.12Substituindo 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.txtComparativo com outras ferramentas
| Ferramenta | Função | Velocidade | Observação |
|---|---|---|---|
| uv | tudo (pacotes + venv + Python) | muito rápida (Rust) | substitui todos abaixo |
pip | instalar pacotes | lenta | padrão histórico, sem lock file |
venv | criar ambientes virtuais | - | nativo, mas só cria o env |
pyenv | gerenciar versões do Python | - | não gerencia pacotes |
poetry | pacotes + venv + build | moderada | boa DX, mais lenta que uv |
pipenv | pacotes + venv | lenta | Pipfile, quase abandonado |
conda | pacotes + venv + binários C | lenta | forte 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.tomlcom 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