Eu tenho um Homebrew fórmula que desejo desinstalar / remover junto com todas as suas dependências, ignorando os pacotes dos quais outros pacotes dependem (também conhecido como remoção de pacotes em cascata na linguagem do gerenciador de pacotes).
por exemplo, desinstalar o pacote a
que depende dos pacotes b
e c
, onde o pacote d
também depende do pacote c
. O resultado deve desinstalar o a
&b
, ignorando c
.
Como eu posso fazer isso?
Deve haver uma maneira de desinstalar um pacote sem deixar lixo desnecessário para trás.
Respostas:
EDITAR:
Parece que o problema agora foi resolvido usando um comando externo chamado
brew rmdeps
oubrew rmtree
.Para instalar e usar, emita os seguintes comandos:
Veja o link acima para mais informações e discussão.
Resposta original:
Parece que, atualmente, não há uma maneira fácil de fazer isso.
No entanto, eu arquivei um problema na página do Homebrew no GitHub e alguém sugeriu uma solução temporária até adicionar um comando exclusivo para resolver isso.
Existe um comando externo chamado
brew leaves
que imprime todos os pacotes que não são dependências de outros pacotes.Se você fizer uma saída lógica e na saída de
brew leaves
ebrew deps <package>
, poderá obter apenas uma lista dos pacotes de dependências órfãs, que poderão ser desinstalados manualmente posteriormente. Combine issoxargs
e você terá o que precisa, eu acho (não testado, não conte com isso).EDIT: Alguém acabou de sugerir uma solução muito semelhante, usando em
join
vez dexargs
:Veja o comentário sobre o problema mencionado acima para obter mais informações.
fonte
This command requires a keg argument
.brew rmtree
script de terceiros está agora disponível em um toque:brew tap beeftornado/rmtree && brew install beeftornado/rmtree/brew-rmtree
brew rm $(join <(brew leaves) <(brew deps FORMULA))
faz bem o trabalho. Você só precisa executá-lo repetidamente até que todas as dependências sejam removidas. Ele não pode desinstalar tudo de uma vez, porque as dependências são interdependentes.&& brew install brew-rmtree
não é mais necessário.O objetivo aqui é remover o pacote fornecido e suas dependências sem interromper as dependências de outro pacote. Eu uso este comando:
Nota: Editado para refletir o comentário útil de @ alphadogg.
fonte
--ignore-dependencies
para remover para permitir que isso funcionasse.brew rmtree
não funciona de todo . A partir dos links sobre esse problema, encontrei o rmrec que realmente funciona. Deus sabe porbrew
que não tem isso como um comando nativo.fonte
[FORMULA]
ser tocados ou pode apenas reinstalar brevemente o e usar rmrec remover recursivamente todas as suas dependências corretamente.rmrec
que não lida muito bem com pacotes com namespace. Eu estava usando algo que puxoulinuxbrew/xorg/xorg
e ele removeu tudo, exceto esse pacote, e mesmo nomeando explicitamente esse pacote, ele não conseguiu resolvê-lo e não fez nada.rmrec
é ruim. Ele não lida com dependências.rmtree
?rmrec
lida com dependências.God knows why brew doesn't have this as a native command.
=> Porque os desenvolvedores de cerveja têm atitudes ruins. Eles nem permitem que as pessoas abram problemas. Verifique github.com/Homebrew/brew , agora só há menos de 20 problemas. Um número tão pequeno. Isso é uma coisa boa? Não, é muito ruim.Com base na resposta @jfmercer (as correções precisavam mais do que um comentário).
Remova as dependências do pacote (não remove o pacote):
Remova o pacote:
Reinstale as bibliotecas ausentes:
Desinstalação testada
meld
depois de descobrir as versões do MeldMerge .fonte
O uso desta resposta requer que você crie e mantenha um arquivo que contenha os nomes dos pacotes que você deseja instalar no seu sistema. Se você ainda não possui um, use o comando a seguir e exclua os nomes dos pacotes que não deseja manter instalados.
Em seguida, você pode remover todos os pacotes instalados, mas indesejados, e quaisquer dependências desnecessárias executando o seguinte comando
brew_clean
está disponível aqui: https://gist.github.com/cskeeters/10ff1295bca93808213dEsse script obtém todos os pacotes especificados em brew_packages e todas as suas dependências e os compara com a saída de
brew list
e, finalmente, remove os pacotes indesejados depois de verificar esta lista com o usuário.Nesse ponto, se você deseja remover o pacote
a
, basta removê-lo do arquivo brew_packages e executar novamentebrew_clean brew_packages
. Irá removerb
, mas nãoc
.fonte
brew clean -s
brew cleanup -s && brew cask cleanup
Você pode apenas usar um canal UNIX para este
fonte
brew missing
que lhe dirá o que vos mando precisa correr para recuperá-losSalve o seguinte script como eliminação de infusão
Agora instale-o com o seguinte comando
Agora corra
Exemplo usando gpg
fonte
Outras respostas não funcionaram para mim, mas isso funcionou (com
fish
casca):Porque
brew remove $p
falha quando outro pacote dependep
.fonte
Uma função Bourne Shell mais completa
Já existem várias respostas boas, mas algumas estão desatualizadas e nenhuma delas está completa. Em particular, a maioria deles removerá dependências, mas ainda assim você poderá remover a fórmula segmentada originalmente posteriormente. Os one-liners publicados também podem ser entediantes, se você deseja desinstalar mais de uma fórmula por vez.
Aqui está uma função de shell compatível com Bourne (sem Bashisms conhecidos) que pega uma lista de fórmulas, remove as dependências de cada um, remove todas as cópias da própria fórmula e depois reinstala as dependências ausentes.
Foi testado no Homebrew 1.7.4.
Ressalvas
Isso funciona em todas as fórmulas padrão que eu testei. Atualmente, ele não lida com barris, mas também não se queixará em voz alta se você tentar abrir um barril com o mesmo nome que uma fórmula padrão (por exemplo, MacVim).
fonte
A resposta de @jfmercer deve ser ligeiramente modificada para funcionar com a distribuição atual, porque a saída de
brew missing
mudou:fonte