Cargo install update: como atualizar crates binários em Rust

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

«Cargo install» existe, mas «cargo update» — não? Uma dor familiar para todo desenvolvedor Rust

\n\n

Você acabou de executar cargo install ripgrep para obter o binário mais recente rg. Uma semana se passou. Você ouve que uma nova versão foi lançada — 14.1.0 em vez de 13.0.0. E então surge uma pergunta pertinente: «Does cargo install have an equivalent update command?»

\n\n

Esta pergunta acumulou milhares de visualizações no Stack Overflow. E não é à toa. Acontece que no cargo não há um comando embutido cargo install update. Não, você não ficou cego. Realmente não há. Mas isso não significa que você está condenado a baixar novas versões manualmente. Existem várias abordagens, e vamos analisar todas — desde as simples até as elegantes.

\n\n

Neste artigo, não vamos apenas traduzir a resposta do Stack Overflow. Vamos comparar abordagens, mostrar código real e dar dicas acionáveis. Vamos lá!

\n\n

Por que o Cargo não tem um comando «update» para crates instalados?

\n\n

Antes de sair procurando bugs, vamos entender a filosofia. cargo install é destinado à instalação de crates binários (aqueles que têm a seção [[bin]] no Cargo.toml). Não é um gerenciador de pacotes no estilo apt ou npm. O Cargo é, antes de tudo, um compilador e gerenciador de dependências para projetos, não um instalador global de software.

\n\n

O comando cargo update existe, mas funciona dentro do projeto — atualiza as dependências no Cargo.lock. Para binários instalados globalmente, é necessária uma solução diferente.

\n\n

Método nº1: Reinstalação clássica (cargo install --force)

\n\n

O método mais simples e óbvio é reinstalar o crate com a flag --force:

\n\n
# Instalou na primeira vez\ncargo install ripgrep\n\n# Uma semana depois — atualiza\ncargo install --force ripgrep\n
\n\n

O que acontece nos bastidores? O Cargo baixa a versão mais recente do crate do crates.io, recompila e substitui o binário. A flag --force força a sobrescrita do arquivo existente, mesmo que a versão seja a mesma.

\n\n

Vantagens:

\n
    \n
  • Não requer instalação de ferramentas adicionais
  • \n
  • Funciona sempre e em qualquer lugar
  • \n
  • Intuitivo
  • \n
\n\n

Desvantagens:

\n
    \n
  • Toda vez, uma recompilação completa (demorada se o crate for grande)
  • \n
  • Não verifica se uma nova versão foi lançada — você apenas reinstala
  • \n
  • Incômodo se você tiver 10+ crates instalados
  • \n
\n\n

É como reinstalar o Windows para atualizar um driver. Funciona? Sim. Ideal? Não.

\n\n

Método nº2: cargo-outdated — detector inteligente de crates desatualizados

\n\n

Se você quer ter certeza de que uma atualização é necessária, instale o cargo-outdated:

\n\n
cargo install cargo-outdated\n
\n\n

Agora verifique quais crates estão desatualizados:

\n\n
cargo outdated --root ~/.cargo\n
\n\n

A saída mostrará algo como:

\n\n
Package    Current  Latest  Deps\nripgrep    13.0.0   14.1.0  -\nbat        0.22.1   0.23.0  -\n
\n\n

Em seguida, você pode atualizar um crate específico com cargo install --force. Mas ainda são dois passos. Quer automação? Continue lendo.

\n\n

Vantagens:

\n
    \n
  • Mostra apenas os crates que realmente estão desatualizados
  • \n
  • Funciona também para dependências de projeto
  • \n
  • Possui opções de filtragem
  • \n
\n\n

Desvantagens:

\n
    \n
  • Não atualiza por si só — apenas informa
  • \n
  • Requer instalação separada
  • \n
\n\n

Método nº3: cargo-update (sim, existe esse crate!)

\n\n

A resposta mais elegante para a pergunta «Does cargo install have an equivalent update command?» é

Blogs

Book Recommendations