7 pontos por GN⁺ 2024-02-16 | 3 comentários | Compartilhar no WhatsApp
  • uv é um installer e resolver ultrarrápido de pacotes Python escrito em Rust, projetado para substituir os fluxos de trabalho de pip e pip-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 pip e pip-tools sem 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 pip e pip-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-tools e virtualenv.
  • Pode ser instalado separadamente do próprio Python, sem a necessidade de gerenciar a instalação do pip de 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-tools e virtualenv, mas também pipx, tox, poetry, pyenv, ruff e outros.

API compatível

  • Em vez de pip install, é possível usar uv pip install para instalar dependências Python pela linha de comando, por arquivos de requisitos ou por pyproject.toml.
  • Em vez de pip-compile, é possível usar uv pip compile para gerar um requirements.txt travado.
  • Em vez de pip-sync, é possível usar uv pip sync para sincronizar o requirements.txt travado 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 pip existentes, 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

 
kyunghoon 2024-10-29

A velocidade é realmente absurda;;

 
ajh508 2024-02-17

Seria ótimo se ele evoluísse a ponto de poder substituir o conda.

 
GN⁺ 2024-02-16
Comentários do Hacker News
  • Dúvida sobre um pip-and-more financiado por VC

    • É difícil entender como um pip-and-more apoiado por capital de risco vai gerar receita quando a impressora de dinheiro grátis quebrar.
  • Pergunta sobre o não suporte do uv à geração de lockfile independente de plataforma

    • Sobre o fato de o uv, ao contrário do Poetry ou PDM, não gerar um lockfile independente de plataforma, há a percepção de que essa abordagem fica presa a arquivos de requirements e não condiz com o objetivo de ser o "Cargo do Python".
  • Avaliação positiva do suporte do uv a estratégias alternativas de resolução de dependências

    • O uv segue por padrão a estratégia padrão de resolução de dependências do Python, que prefere as versões compatíveis mais recentes dos pacotes, mas também oferece a opção --resolution=lowest para testar com as menores versões compatíveis.
    • É excelente que o uv ofereça, por meio do parâmetro --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

    • Levanta-se a dúvida de como toda essa complexidade de empacotamento surgiu, considerando que a filosofia do interpretador Python inclui o princípio de que "deve haver uma maneira óbvia de fazer isso".
  • Ponto interessante sobre o uso de pubgrub-rs pelo uv

    • Considera interessante que o uv use 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

    • Menciona que, 11 dias antes, havia previsto que a equipe da Astral expandiria a funcionalidade do ruff para fazer tudo de que desenvolvedores Python precisam.
  • Experiência pessoal com a velocidade do pip

    • Relata que o pip geralmente funciona rápido, mas fica lento quando precisa baixar muitos dados ou quando leva tempo para compilar bibliotecas nativas. Já o conda é muito lento, inclusive em máquinas potentes.
  • Visão cética sobre um novo gerenciador de pacotes Python

    • Apareceu mais um gerenciador de pacotes para Python, mas, se realmente puder substituir o pip, seria possível migrar para ele como aconteceu com a mudança para o ruff por ganho de velocidade. É preciso uma solução definitiva para o gerenciamento de pacotes em Python.
  • Curiosidade sobre a decisão do uv de gerar arquivos requirements.txt específicos por plataforma

    • Há curiosidade sobre o motivo de o uv gerar arquivos requirements.txt específicos por plataforma, em vez de arquivos poetry.lock e pdm.lock independentes de plataforma.
  • Parabenização e reação positiva ao trabalho da equipe da Astral

    • Embora houvesse preocupação com uma tentativa externa de "consertar" o empacotamento Python, há satisfação em ver que a compatibilidade foi colocada em primeiro lugar. Avalia-se positivamente o esforço da equipe da Astral em enfatizar a compatibilidade com ferramentas e padrões existentes.
  • Pergunta sobre problemas de compilação de pacotes do pip

    • Pergunta-se como pretendem tornar menos sujeito a erros e mais amigável ao usuário o fato de alguns pacotes do pip exigirem compilação dependente de toolchains inteiras, como gcc, g++, gtk e Qt.