uv vs pip-tools: Qual Ferramenta de Locking Python para CI?
O pip-tools popularizou a compilação de requirements fixados; o uv faz o mesmo trabalho muito mais rápido e adiciona um workflow de projeto.
O pip-tools fornece pip-compile e pip-sync para transformar requirements soltos em um requirements.txt totalmente fixado. O uv (da Astral) é uma ferramenta baseada em Rust que resolve, faz o lock e instala dependências em alta velocidade e pode substituir o pip-compile via uv pip compile.
| pip-tools | uv | |
|---|---|---|
| Implementação | Python | Rust |
| Velocidade de resolve/compile | Moderada | Muito mais rápida |
| Saída do lock | requirements.txt (fixado) | requirements.txt ou uv.lock |
| Instala deps | Via pip / pip-sync | Embutido (uv pip / uv sync) |
| Gerenciamento de versão do Python | Não | Sim, pode instalar Pythons |
No CI
O uv compila e instala dependências muito mais rápido que o fluxo pip-compile + pip-sync, o que encurta a parte mais lenta de muitos pipelines Python. O uv pip compile foi projetado como um drop-in para o pip-compile, então o workflow de requirements.txt se mantém. O pip-tools continua uma escolha boa e mínima quando você só precisa fixar um arquivo de requirements e não quer um novo binário na sua imagem.
Esforço de migração
Trocar pip-compile por uv pip compile costuma ser de baixo atrito e mantém seu layout existente de requirements.in / requirements.txt. Verifique a resolução em conjuntos de constraints complexos, já que o comportamento do resolver pode diferir. Cacheie os requirements resolvidos com chave nos seus arquivos de entrada de qualquer forma.
O veredito
Quer o compile/install mais rápido e gerenciamento opcional de Python: uv. Quer uma ferramenta pequena e bem compreendida para fixar requirements sem novo runtime: pip-tools. O uv pip compile é um quase drop-in se a velocidade é seu gargalo.