uv, um gerenciador muito rápido de pacotes e projetos Python escrito em Rust
(github.com/astral-sh)- uv é uma ferramenta extremamente rápida, baseada em Rust, para gerenciamento de pacotes e projetos Python
- Pode substituir em um só lugar pip, pip-tools, pipx, poetry, pyenv, virtualenv e outros
- Oferece desempenho até 10 a 100 vezes mais rápido, economia de espaço em disco, cache robusto e suporte cross-platform
- Inclui suporte a um ambiente de desenvolvimento integrado para scripts, projetos, ferramentas e múltiplas versões do Python
- Torna possível um fluxo de trabalho moderno de desenvolvimento Python, otimizado para produtividade, projetos de grande porte e alta velocidade de execução
Introdução ao open source e pontos de diferenciação
- O uv integra em uma única ferramenta os recursos de vários utilitários de gerenciamento Python existentes, como pip, pip-tools, pipx, poetry, pyenv, virtualenv e twine
- Por ter sido desenvolvido em Rust, oferece desempenho excelente e se destaca por velocidades de instalação e sincronização 10 a 100 vezes mais rápidas em comparação ao pip tradicional
- Fornece otimização do uso de disco com cache global e eliminação de duplicação de dependências, além de oferecer uma CLI intuitiva e compatibilidade familiar com o pip
- Pode ser instalado como executável independente em várias plataformas, como macOS, Linux e Windows
- Destaca-se pela praticidade, com instalação autônoma, integração com pip e pipx, e suporte a atualização automática própria
Principais características (Highlights)
- Com uma única ferramenta, o uv pode substituir diversos recursos de pip, pip-tools, pipx, poetry, pyenv, twine e virtualenv
- Oferece desempenho de instalação/atualização/sincronização 10 a 100 vezes mais rápido que o pip tradicional
- Suporte a gerenciamento de dependências de projeto com base em lockfile, além de workspaces e universal lockfile
- Suporte a declaração inline de dependências em scripts e execução com isolamento automático de ambiente
- Suporte a gerenciamento/instalação/troca de diferentes versões do Python
- Suporte à execução e instalação de ferramentas distribuídas como pacotes Python (substituindo o pipx)
- Compatibilidade com a interface do pip e recursos extras, como sobrescrita de versão e resolução independente de plataforma
- Workspace no estilo Cargo, ideal para projetos de grande porte
- Cache global para minimizar duplicação de dependências e melhorar a eficiência no uso de espaço em disco
- Pode ser instalado e usado com curl, pip ou pipx, mesmo sem ambiente Rust/Python configurado
- Suporte multiplataforma para macOS, Linux e Windows
- Criado pela equipe por trás do Astral e do Ruff
Gerenciamento de projetos (Project Management)
- Suporte completo, no nível de projeto, a dependências, ambiente, arquivo de lock e workspace
- Inicialização automática do projeto e criação de virtualenv com o comando
uv init - Adição de dependências com
uv add, e sincronização de pacotes e auditoria de segurança automatizadas com os comandosuv lockeuv sync - Substitui recursos de ferramentas modernas de gerenciamento de projetos Python, como Poetry e Rye, garantindo processamento mais rápido
- Também oferece suporte a build e publish de projetos que não são gerenciados pelo uv
Gerenciamento de scripts (Scripts)
- Permite declarar metadados inline de dependências em scripts de arquivo único
- Suporte a isolamento automático de ambiente virtual e instalação de dependências na execução do script
- Com
uv add --script, é possível gerenciar dependências por script, e comuv run, executar com isolamento de ambiente - Ideal para uso em scripts pontuais, como os de ciência de dados e automação
Gerenciamento de ferramentas (Tools)
- Permite instalar e executar ferramentas CLI distribuídas como pacotes Python, de forma semelhante ao pipx
- Com os comandos
uv tool installeuvx, é possível usar ambientes temporários ou execução global - Suporte à verificação das ferramentas instaladas, gerenciamento de versões e atualizações
Gerenciamento de versões do Python
- Permite instalar facilmente e alternar imediatamente entre várias versões do Python
- Permite gerenciar diferentes versões em paralelo e definir pin por projeto com
.python-version - Também oferece a mesma interface para implementações alternativas, como pypy
- Instalação, definição e ativação de versões com comandos como
uv python install/pin
Interface pip (Pip Interface)
- Com
uv pipeuv venv, substitui completamente o pip, pip-tools e virtualenv existentes - Inclui recursos avançados como override de versão de dependência, resolução independente de plataforma e builds reproduzíveis
- Funciona como substituto drop-in do pip sem alterar o fluxo de trabalho existente, oferecendo ganho de desempenho de 10 a 100 vezes
- Suporte à conversão de requirements.in → requirements.txt, criação de ambiente virtual e sincronização de requirements
Plataforma e política de versões
- Suporte a vários sistemas operacionais (Windows, macOS e Linux)
- Informações sobre política e plataformas suportadas podem ser consultadas na documentação oficial
Contribuição (Contributing)
- O objetivo é apoiar contribuidores de diferentes níveis, de iniciantes a especialistas, com guias relacionados
FAQ
- A pronúncia de uv é “iu-ví”
- O estilo é fixado em minúsculas: “uv”
Contexto técnico e agradecimentos (Acknowledgements)
- O algoritmo de resolução de dependências usa PubGrub
- A implementação de Git é baseada em Cargo
- A estratégia de otimização foi fortemente inspirada por ferramentas modernas de empacotamento como pnpm, Orogene, Bun e Posy
Licença
- Pode ser usado sob MIT ou Apache-2.0, à escolha do usuário
- O código contribuído também é duplamente licenciado sob as mesmas condições
1 comentários
Comentários no Hacker News
Até alguns meses atrás eu achava que jamais usaria o uv, porque já estava acostumado com
venvepipe não via necessidade de outra ferramenta, mas recentemente, em um servidor compartilhado sem acesso root, vários pacotes e drivers estavam todos quebrados e eu precisava de PyTorch; depois dessa experiência, migrei completamente para o uv. Opipdemorava muito, o cache ocupava espaço demais e era difícil mudar seu local; com o uv, tudo simplesmente funcionou bem. Se você ainda está em dúvida, recomendo fortemente testar por pelo menos 5 minutos.venvque eu já usava; basta rodaruv venv.pip+ arquivo de configuração +venvera confusa, porque exigia lembrar de criar e usar ovenvcorreto, além de lidar com shebangs estranhos ou ativação do ambiente a cada execução de script/teste, e as mensagens de erro nem sempre ajudavam de verdade. Ao ensinar iniciantes, essas ferramentas sempre pareciam bem incômodas; agora basta lembrar deuv run,uv addeuv sync, então a equipe também recebe isso com muito menos resistência.asdfe depois migrei paramise; fiquei curioso sobre como ele se compara a ferramentas mais gerais como o uv.pipocupava muito espaço e que não dava para mudar seu local direito; fiquei curioso se o uv é melhor no uso de espaço de armazenamento e, se for, se isso acontece por compartilhar melhor os artefatos.uv a b cem um repositório experimental e resolvi testar. Internamente parece haver bastante duplicação, mas no uso real, em um host GNU-Debian-Ubuntu padrão, não tive problema algum e tudo funcionou sem atritos.Quando usei o uv pela primeira vez, ele terminou tão rápido em comparação com o
pipque achei que eu tinha feito algo errado ou que não tinha funcionado direito.Acho que uv e Ruff são ótimos contraexemplos ao ditado “nunca reinvente a roda”; quando o objetivo é claro, às vezes o resultado fica muito melhor que o existente.
10x.Em sistemas pequenos/de baixa potência (como um AWS T2.micro rodando Windows), o uv tenta fazer downloads simultâneos demais e isso causa timeout. Limitar a concorrência com a variável de ambiente
UV_CONCURRENT_DOWNLOADSpara algo como 1 ou 2 resolve. Acho a configuração padrão do uv agressiva demais e seria bom se ele melhorasse isso, talvez ajustando automaticamente por servidor com base na velocidade de download.Tenho testado o uv recentemente no meu notebook para uso pessoal e, para alguém acostumado com
pip, a velocidade percebida é tão absurda que em várias ocasiões fiquei em dúvida se ele realmente tinha executado.Gosto muito de
uv add <mydependencies> --script mycoolscript.py, e se você colocar#!/usr/bin/env -S uv runno topo, dá para executar scripts Python imediatamente, o que tem sido extremamente útil.httpxebeautifulsoupe devolve uma lista de links em CSV. material relacionado resultado do script no Claudeuv add --scripte apenasuv addsão coisas diferentes. Também vale olhar a documentação oficial, porque há mais recursos úteis, comorun --withe suporte a PEP723. guia oficialmydependencies? É algo como um arquivo de configuração?Testei o uv no passado e me surpreendi por ele ser absurdamente rápido e fácil de usar. Hoje quase não vejo motivo para usar
pip, e se você só usa Python, nemcondaparece mais necessário.pyenvepoetry.Gosto muito do uv. Também gosto do Ruff, da equipe da Astral, então migrei todo o linting/formatação de
pylint+ Black para Ruff. Vi o tempo de lint cair de 90 segundos para menos de 1,5 segundo, fiquei impressionado.pylinte também deixa passar erros óbvios demais sem detectar nada (como código que nem executa).Recentemente passei a gostar muito de usar o padrão abaixo para pequenos scripts executáveis:
#!/usr/bin/env uvx. Toda vez que vou usar, preciso pesquisar de novo.Estou completamente satisfeito e não quero voltar para
pip/twine/requirements.txt. Vários projetos mantinham wheels compartilhados em um GitLab interno, e o antigo YAML de 10 linhas pôde ser substituído por duas linhas:uv buildeuv publish. Ficou fácil importar dependências e ver as principais dependências de uma vez, sem aquela bagunça de misturar tudo em umrequirements.txt.