Respostas:
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".
A ação de desinstalação desinstalará uma porta instalada.
%% sudo port uninstall vile Note
Para também desinstalar recursivamente as portas das quais a porta especificada depende, use o
‑‑follow‑dependencies
sinalizador. Isso não desinstalará dependências marcadas como solicitadas ou que tenham outros dependentes.Para desinstalar recursivamente todas as portas que dependem da porta especificada antes de desinstalar a própria porta, use o
‑‑follow‑dependents flag
.Se uma porta for uma dependência de outra porta instalada, a desinstalação não a removerá, a menos que você remova primeiro a (s) porta (s) dependente (s). Para substituir esse comportamento, use a opção -f (force). Obviamente, isso quebrará os dependentes. Não force as portas de desinstalação, a menos que você saiba o que está fazendo.
%% sudo port -f uninstall vile
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.
‑‑follow‑dependencies
vs ‑‑follow‑dependents
; a passagem citada descreve ambos, mas apenas o primeiro se aplica à questão
O comando para remover uma porta e seus dependentes é:
sudo port uninstall foo --follow-dependents
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.
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.
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.
Acho que as outras respostas e a --follow-dependents
bandeira não fazem o que você deseja. Se você instalar A
e A
exigir B
, graças aos maravilhosos sistemas de gerenciamento de pacotes, B
será instalado para você. Você pode desinstalar B
e o --follow-dependents
sinalizador estará ciente e remover A
. Mas e se você desinstalar A
, o que é mais provável, porque A
é 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.
O Debfoster irá ajudá-lo a se livrar dos pacotes (bibliotecas, por exemplo), deixados para trás no seu sistema quando o programa que exigia que ele fosse removido ou atualizado para uma versão que não tivesse dependência.
Embora debfoster
não funcione para MacPorts, parece haver portas debfoster
, por exemplo portsfoster
, embora pareçam ser descontinuadas ...
Talvez não exista atualmente nenhuma solução para o MacPorts.
apt
sistema usado pelo Debian. Eu não uso MacPorts, mas fiz um fink install debfoster
e funcionou muito bem para mim.
apt
sistema e não usa deb
arquivos. A idéia do MacPorts está relacionada às portas do FreeBSD ou NetBSD pkgsrc, mas a implementação é muito diferente.