- uv é um installer e resolver ultrarrápido de pacotes Python escrito em Rust, projetado para substituir os fluxos de trabalho de
pipepip-tools - uv é um marco rumo ao "Cargo for Python": um gerenciador abrangente de projetos e pacotes Python que é rápido, confiável e fácil de usar
- Há planos de assumir a manutenção do Rye, a ferramenta de empacotamento Python desenvolvida experimentalmente por Armin Ronacher, e expandir o uv como um projeto sucessor unificado
Foco obsessivo em desempenho
- O uv é 8-10 vezes mais rápido que
pipepip-toolssem cache, e 80-115 vezes mais rápido quando há cache. - Usa um cache global de módulos para evitar baixar ou compilar dependências novamente e minimiza o uso de espaço em disco aproveitando Copy-on-Write e hardlinks em sistemas de arquivos compatíveis.
Otimizado para adoção
- A versão inicial do uv oferece suporte às APIs de
pipepip-tools, podendo ser usada em projetos existentes sem alterações de configuração. - O uv é distribuído como um único binário estático e pode substituir
pip,pip-toolsevirtualenv. - Pode ser instalado separadamente do próprio Python, sem a necessidade de gerenciar a instalação do
pipde acordo com a versão do Python.
"Cargo for Python": uv e Rye
- O uv é um marco intermediário rumo a um gerenciador unificado de pacotes e projetos Python que seja rápido, confiável e fácil de usar.
- O objetivo do uv é ser um único binário que inclua não apenas
pip,pip-toolsevirtualenv, mas tambémpipx,tox,poetry,pyenv,ruffe outros.
API compatível
- Em vez de
pip install, é possível usaruv pip installpara instalar dependências Python pela linha de comando, por arquivos de requisitos ou porpyproject.toml. - Em vez de
pip-compile, é possível usaruv pip compilepara gerar umrequirements.txttravado. - Em vez de
pip-sync, é possível usaruv pip syncpara sincronizar orequirements.txttravado e o ambiente virtual.
Roadmap
- Após este lançamento, o plano é priorizar o suporte aos usuários e focar em melhorias de compatibilidade, desempenho e estabilidade.
- Depois disso, o objetivo é expandir o uv para um gerenciador completo de projetos e pacotes Python.
Agradecimentos
- Agradecimentos a todos que contribuíram direta ou indiretamente para o desenvolvimento do uv.
- Em especial, agradecimentos a Jacob Finkelman e Matthieu Pizenberg, usados no uv como resolvedor básico de versões do PubGrub.
Opinião do GN⁺
- O uv é uma ferramenta inovadora que oferece aos desenvolvedores Python um desempenho muito superior ao das ferramentas
pipexistentes, podendo reduzir significativamente o tempo de configuração de projetos. - Por ter sido escrito em Rust, reflete uma nova tendência no ecossistema Python de priorizar desempenho e estabilidade, o que deve melhorar bastante a experiência dos desenvolvedores.
- O desenvolvimento do uv busca a integração das ferramentas de empacotamento e gerenciamento de projetos Python, o que permitirá que os desenvolvedores trabalhem de forma mais eficiente e consistente.
3 comentários
A velocidade é realmente absurda;;
Seria ótimo se ele evoluísse a ponto de poder substituir o conda.
Comentários do Hacker News
Dúvida sobre um pip-and-more financiado por VC
Pergunta sobre o não suporte do uv à geração de lockfile independente de plataforma
Avaliação positiva do suporte do uv a estratégias alternativas de resolução de dependências
--resolution=lowestpara testar com as menores versões compatíveis.--python-version, a capacidade de gerar uma resolução para uma versão do Python diferente da atualmente instalada.Questionamento sobre a complexidade do sistema de pacotes do Python
Ponto interessante sobre o uso de pubgrub-rs pelo uv
pubgrub-rs, uma implementação em Rust do algoritmo de resolução de versões pubgrub, originalmente escrito para a linguagem Dart, e acha divertido ver essa cadeia de inspiração entre linguagens.Menção à previsão sobre o caminho da equipe da Astral
Experiência pessoal com a velocidade do pip
Visão cética sobre um novo gerenciador de pacotes Python
Curiosidade sobre a decisão do uv de gerar arquivos
requirements.txtespecíficos por plataformarequirements.txtespecíficos por plataforma, em vez de arquivospoetry.lockepdm.lockindependentes de plataforma.Parabenização e reação positiva ao trabalho da equipe da Astral
Pergunta sobre problemas de compilação de pacotes do pip