-
Notifications
You must be signed in to change notification settings - Fork 45
MIGRACAO_PIP_UV
Ysrael edited this page May 10, 2026
·
1 revision
UV é um gerenciador de pacotes Python ultra-moderno escrito em Rust que oferece:
- ⚡ 10-100x mais rápido que pip
- 🔒 Lock file seguro (uv.lock) para versões determinísticas
- 🐍 Gerenciamento nativo de versões Python
- 📦 Padrão moderno: PEP 517/518 (pyproject.toml)
- 🎯 100% compatível com pip e requirements.txt
# 1. Criar ambiente virtual
python -m venv .venv
# 2. Ativar (Windows)
.\.venv\Scripts\Activate.ps1
# 3. Instalar
pip install -r requirements.txt
# ⏱️ Tempo: ~15-30 segundos# 1. Sync automático (tudo em 1 comando!)
uv sync
# ⏱️ Tempo: ~1-3 segundos (10-20x mais rápido!)projeto/
├── setup.py # Build script antigo
├── requirements.txt # Dependências sem lock
├── requirements-dev.txt # Dev deps
└── .venv/ # Ambiente virtual
projeto/
├── pyproject.toml # Configuração moderna (PEP 517/518)
├── uv.lock # Lock file determinístico
├── requirements.txt # OPCIONAL (compatibilidade)
├── setup.py # OPCIONAL (compatibilidade)
└── .venv/ # Ambiente virtual
pip install novo-pacote
# ⚠️ Não atualiza requirements.txt automaticamente
# Precisa fazer manualmente:
pip freeze > requirements.txtuv add novo-pacote
# ✅ Atualiza automaticamente pyproject.toml + uv.lockpip uninstall novo-pacote
pip freeze > requirements.txt
# ⚠️ Manual e propenso a errosuv remove novo-pacote
# ✅ Automático❌ Não há lock file padrão
❌ Versões podem variar entre máquinas
❌ pip freeze cria lista, mas não é confiável
✅ uv.lock cria lock file determinístico
✅ Versões garantidas em todas as máquinas
✅ Compatível com git (versionável)
# Precisa ativar manualmente
source .venv/bin/activate # Linux/Mac
.\.venv\Scripts\Activate.ps1 # Windows
python script.py# Executa diretamente (sem ativar!)
uv run python script.py# ❌ Não gerencia Python
# Precisa de pyenv ou manual
pyenv install 3.11
pyenv local 3.11
python -m venv .venv# ✅ Gerencia automaticamente
uv python install 3.11
uv sync --python 3.11| Característica | Pip | UV |
|---|---|---|
| Velocidade | ~15-30s | ~1-3s |
| Lock file | ❌ | ✅ uv.lock |
| Determinístico | ❌ | ✅ |
| Python nativo | ❌ | ✅ |
| Cache paralelo | ❌ | ✅ |
| Padrão moderno | ❌ | ✅ PEP 517/518 |
| Suporte pip | ✅ | ✅ |
| Workspace | ❌ | ✅ (Monorepo) |
| Performance cache | Médio | Excelente |
| Comunidade | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
# Opção 1: WinGet (Recomendado)
winget install astral-sh.uv
# Opção 2: Python (Fallback)
pip install uv
# Verificar
uv --version# Opção 1: Homebrew (Recomendado)
brew install uv
# Opção 2: Curl
curl -LsSf https://astral.sh/uv/install.sh | sh
# Opção 3: Python
pip install uv# Opção 1: Curl (Recomendado)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Opção 2: Package Manager (APT, YUM, etc)
# https://docs.astral.sh/uv/guides/installation/
# Opção 3: Python
pip install uv# Ver dependências atuais
cat requirements.txt
cat requirements-dev.txt # Se existir# Windows
winget install astral-sh.uv
# macOS
brew install uv
# Linux
curl -LsSf https://astral.sh/uv/install.sh | sh[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "meu-projeto"
version = "1.0.0"
requires-python = ">=3.8"
dependencies = [
"requests>=2.25.0",
"python-dotenv>=0.19.0",
]
[project.optional-dependencies]
dev = [
"pytest>=7.4.0",
"pytest-cov>=4.1.0",
]# Opção A: Manual (mais controle)
# Copie dados de requirements.txt para pyproject.toml
# Opção B: Automático com UV
uv pip compile requirements.txt -o requirements-compiled.txt
# Depois copie para pyproject.toml
# Opção C: Do zero (recomendado)
uv sync # UV irá ler requirements.txt e criar pyproject.toml# Cria .venv e instala tudo
uv sync
# Instala apenas prod (sem dev)
uv sync --no-dev
# Com grupo específico
uv sync --group devAntes:
source .venv/bin/activate
python script.pyDepois:
uv run python script.pygit add pyproject.toml uv.lock
git remove setup.py requirements.txt # Opcionais agora
git commit -m "chore: migrate to uv package manager"uv sync # Instala tudo
uv sync --no-dev # Sem dev dependencies
uv sync --refresh # Ignora cache
uv sync --python 3.11 # Com Python específicouv add requests # Adiciona dependência
uv add -d pytest # Adiciona dev dependency
uv remove requests # Remove dependência
uv pip install requests # Compatibilidade pip
uv pip show requests # Info do pacoteuv run python script.py # Executa script
uv run pytest # Roda testes
uv run python -c "..." # Executa comando
uv run --help # Ajudauv venv # Cria .venv
uv venv --python 3.11 # Com Python específico
source .venv/bin/activate # Ativa (Linux/Mac)
.\.venv\Scripts\Activate.ps1 # Ativa (Windows)uv python list # Versões disponíveis
uv python install 3.11 # Instala versão
uv python find 3.11 # Encontra versãouv cache clean # Limpa cache local
uv cache prune # Remove entradas antigasR: Não! UV é compatível com pip. Você pode usar ambos.
R: UV cria um pyproject.toml padrão que pip consegue ler:
pip install .
pip install -e .R: Não é obrigatório. pyproject.toml é o padrão moderno. Mas pip ainda lê setup.py, então é seguro depreciar gradualmente.
R: UV gera uv.lock automaticamente com versions pinadas. Versione-o no git como qualquer arquivo.
R: Sim! UV gerencia versões Python nativamente:
uv sync --python 3.10
uv sync --python 3.11R: GitHub Actions:
- uses: astral-sh/setup-uv@v1
- run: uv sync
- run: uv run pytestR: Garante que em todas as máquinas (dev, CI, produção) as versões sejam exatamente as mesmas.
R: Sim!
[project.optional-dependencies]
dev = ["pytest"]
docs = ["sphinx"]uv sync --group dev
uv add "pacote[extra]"- 📖 Documentação Oficial UV
- 📖 PEP 517 - Build System Interface
- 📖 PEP 518 - pyproject.toml
- 📖 Guia UV do Mangaba AI
- Instalar UV
- Criar
pyproject.toml - Executar
uv sync - Testar instalação (
uv run python script.py) - Gerar
uv.lock - Atualizar CI/CD
- Committar
pyproject.toml+uv.lock - Atualizar documentação
- Comunicar à equipe
- Opcional: Remover
setup.pyerequirements.txt
Bem-vindo ao futuro do Python! 🚀