Sempre que instalo um programa via MacPorts, ele obtém e instala muitas dependências. Quando desinstalo o referido programa, como faço para o MacPorts remover recursivamente todas as dependências não utilizadas?
Para evitar o corte acidental de folhas solicitadas, instale o port_cutleaves
pacote e execute sudo port_cutleaves
https://guide.macports.org/#using.common-tasks.keeplean
O MacPorts 1.9.0 adicionou osqlite
portdbformat
e o MacPorts 2.0.0 abandonou o flat
formato antigo . O sqlite
formato do banco de dados da porta é o padrão para novas instalações; instalações antigas que foram atualizadas para 1.9.x continuarão usando o flat
formato 1 . Você pode converter um flat
sistema 1.9.x no sqlite
formato atualizando para o MacPorts 2.0 ou alterando o portdbformat
valor /opt/local/etc/macports/macports.conf
e emitindo um comando port como root (por exemplo sudo port installed
).
Um dos recursos do novo formato é que ele monitora as instalações de portas "solicitadas" versus "não solicitadas". Uma porta não solicitada é aquela que foi instalada apenas porque outra porta depende dela. O leaves
pseudo-portname se expande para todas as portas não solicitadas das quais nenhuma outra porta instalada depende. Você pode usar isso para "limpar" portas desnecessárias, mesmo que não as tenha desinstalado originalmente sudo port uninstall --follow-dependencies portname
(o que fará o que você deseja, mas apenas se você lembrar de usá-lo sempre que desinstalar algo).
Você deve examinar as folhas existentes antes de desinstalar qualquer uma delas.
port echo leaves
Algumas folhas comuns ( automake
, gperf
, libtool
, pkgconfig
) são construídas em tempo dependências de portas comuns, assim você pode querer “pedido” eles ( sudo port setrequested port1 port2 port3 …
) para evitar a desinstalação-los apenas para ter que reinstalá-los mais tarde.
Você pode desinstalar qualquer folha restante com bastante facilidade:
sudo port uninstall leaves
Nota: Antes de remover suas folhas, convém desinstalar versões antigas de portas que não estão mais "ativas". Isso pode revelar mais algumas folhas (ou seja, portas dependentes de portas instaladas, mas inativas):
sudo port uninstall inactive
Existem várias seções no Guia MacPorts que também descrevem o processo de leaves
desinstalação de portas desnecessárias.
while sudo port uninstall leaves; do :; done
automatizar isso.sudo port uninstall --follow-dependents portname
está incorreto porque--follow-dependents
"desinstalará recursivamente todas as portas que dependem da porta especificada". A opção correta aqui é--follow-dependencies
: "desinstalará recursivamente todas as portas das quais a porta especificada dependia. Isso não desinstalará dependências marcadas como solicitadas ou que tenham outros dependentes".Dos documentos :
Observe a ressalva principal no último parágrafo. Dependências são exatamente isso - dependências - e aplicativos diferentes podem (vão) exigir as mesmas dependências.
fonte
‑‑follow‑dependencies
vs‑‑follow‑dependents
; a passagem citada descreve ambos, mas apenas o primeiro se aplica à questãoO comando para remover uma porta e seus dependentes é:
No entanto, se a porta que você está desinstalando tiver dependentes, ela não será desinstalada sem o
-f
sinalizador (force).Claro que você deve começar lendo o Guia MacPorts, olhando especificamente para a seção Guia de desinstalação.
fonte
Há também um script no diretório contrib do MacPorts chamado port_cutleaves que você pode executar para remover dependências desnecessárias: http://trac.macports.org/browser/contrib/ . Ele solicitará cada porta a ser desinstalada e permitirá manter algumas, caso você queira.
fonte
Escrevi alguns scripts para automatizar a limpeza de portas: https://github.com/vasi/macports-tools
O script 'macportsfoster' exibirá uma lista de todas as portas não exigidas por nada da lista solicitada, ordenada de forma que 'port deactivate $ (macportsfoster)' remova todas elas de uma só vez.
fonte
Acho que as outras respostas e a
--follow-dependents
bandeira não fazem o que você deseja. Se você instalarA
eA
exigirB
, graças aos maravilhosos sistemas de gerenciamento de pacotes,B
será instalado para você. Você pode desinstalarB
e o--follow-dependents
sinalizador estará ciente e removerA
. Mas e se você desinstalarA
, o que é mais provável, porqueA
é o que você instalou manualmente em primeiro lugar? Neste caso,B
é deixado para trás.Se você usa o fink, o pacote debfoster foi projetado para limpar seu sistema e remover dependências não utilizadas.
Embora
debfoster
não funcione para MacPorts, parece haver portasdebfoster
, por exemploportsfoster
, embora pareçam ser descontinuadas ...Talvez não exista atualmente nenhuma solução para o MacPorts.
fonte
apt
sistema usado pelo Debian. Eu não uso MacPorts, mas fiz umfink install debfoster
e funcionou muito bem para mim.apt
sistema e não usadeb
arquivos. A idéia do MacPorts está relacionada às portas do FreeBSD ou NetBSD pkgsrc, mas a implementação é muito diferente.fink
. Além disso a pesquisa mostra que ele não trabalhar com MacPorts, mas existem clones, por ex, consulteportsfoster