¿Cómo eliminar paquetes de MacPorts no utilizados?

91

Cada vez que instalo un programa a través de MacPorts, obtiene e instala muchas dependencias. Cuando desinstalo dicho programa, ¿cómo puedo hacer que MacPorts elimine de forma recursiva todas las dependencias no utilizadas con él?

    
pregunta hpy 13.03.2011 - 15:13

6 respuestas

102

Para evitar cortar accidentalmente hojas que podrían ser las cosas que solicitó, debe instalar el paquete port_cutleaves y luego ejecutar sudo port_cutleaves enlace

MacPorts 1.9.0 agregó sqlite portdbformat y MacPorts 2.0.0 eliminó el antiguo formato flat . El formato de base de datos sqlite port es el predeterminado para las nuevas instalaciones; Las instalaciones antiguas que se actualizaron a 1.9.x continuarán usando el formato flat 1 . Puede convertir un sistema 1.9.x flat al formato sqlite actualizando a MacPorts 2.0 o cambiando el valor portdbformat en /opt/local/etc/macports/macports.conf y luego emitiendo un comando port como raíz ( por ejemplo, sudo port installed ).

Una de las características del nuevo formato es que realiza un seguimiento de las instalaciones portuarias "solicitadas" frente a las "no solicitadas". Un puerto no solicitado es uno que solo se instaló porque algún otro puerto depende de él. El leaves pseudo-nombre de puerto se expande a todos los puertos no solicitados de los cuales no depende ningún otro puerto instalado. Puede usar esto para "limpiar" puertos innecesarios, incluso si no los desinstaló originalmente con sudo port uninstall --follow-dependencies portname (que hará lo que quiera, pero solo si recuerda usarlo cada vez que desinstale algo).

Debes examinar tus hojas existentes antes de desinstalar cualquiera de ellas.

port echo leaves

Algunas hojas comunes ( automake , gperf , libtool , pkgconfig ) son dependencias en tiempo de compilación de los puertos comunes, por lo que es posible que desee "solicitarlas" ( sudo port setrequested port1 port2 port3 … ) para evitar desinstalarlas. Solo para tener que reinstalarlos luego.

Puedes desinstalar las hojas restantes con bastante facilidad:

sudo port uninstall leaves

Nota: antes de podar sus hojas, es posible que también desee desinstalar las versiones anteriores de los puertos que ya no están "activos". Esto puede revelar algunas hojas más (es decir, puertos que son dependencias de puertos que están instalados, pero inactivos):

sudo port uninstall inactive

Hay varias secciones en MacPorts Guide que también describe el proceso de uso de leaves para desinstalar puertos innecesarios.

    
respondido por el Chris Johnsen 14.03.2011 - 07:13
8

De los documentos :

  

La acción de desinstalación desinstalará un   puerto instalado.

     

%% sudo port uninstall vile Note

     

Para desinstalar también recursivamente el   puertos de los que depende el puerto dado,   usa la bandera ‑‑follow‑dependencies   Esto no desinstalará dependencias   que están marcados como solicitados o que   tienen otros dependientes.

     

Para desinstalar recursivamente todos los puertos   que dependen del puerto dado antes   desinstalando el propio puerto, use el    ‑‑follow‑dependents flag .

     

Si un puerto es una dependencia de otro   puerto instalado, desinstalación no   quítalo a menos que elimines el   Puerto (s) dependiente (s) primero. Para anular   este comportamiento, usa la -f (fuerza)   cambiar. Esto obviamente romperá la   dependientes No forzar la desinstalación   puertos a menos que sepas lo que eres   haciendo.

     

%% sudo port -f uninstall vile

Note la advertencia principal en el último párrafo. Las dependencias son exactamente eso: dependencias, y diferentes aplicaciones pueden (requerirán) las mismas dependencias.

    
respondido por el Philip Regan 13.03.2011 - 17:07
3

El comando para eliminar un puerto y sus dependientes es:

sudo port uninstall foo --follow-dependents

Sin embargo, si el puerto que está desinstalando tiene dependientes, no se desinstalará sin el indicador -f (forzar).

Por supuesto, debe comenzar por leer la Guía de MacPorts específicamente en la guía sección de la guía de desinstalación

    
respondido por el Andrei Freeman 13.03.2011 - 17:06
3

También hay un script en el directorio contrib de MacPorts llamado port_cutleaves que puede ejecutar para eliminar las dependencias innecesarias: enlace . Le pedirá cada uno de los puertos que se desinstalarán y le permitirá conservar algunos, si lo desea.

    
respondido por el Clemens Lang 30.07.2012 - 00:54
1

Creo que las otras respuestas, y el indicador --follow-dependents , no hacen lo que quieres. Si instala A , y A requiere B , entonces gracias a los maravillosos sistemas de administración de paquetes, B se instalará por usted. Puede desinstalar B y la marca --follow-dependents estará al tanto y eliminar A . Pero, ¿qué sucede si desinstala A , que es más probable, porque A es lo que instaló manualmente en primer lugar? En este caso, B se queda atrás.

Si usa fink, el paquete debfoster está diseñado para limpiar su sistema y eliminar las dependencias no utilizadas.

  

Debfoster te ayudará a deshacerte de   paquetes (bibliotecas por ejemplo) obtener   dejado atrás en su sistema cuando el   Programa que requería que fuera eliminado.   o actualizado a una versión que no lo hace   tener la dependencia.

Aunque debfoster no funcionará para MacPorts, parece que hay puertos de debfoster , por ejemplo, portsfoster , aunque parece que se ha suspendido ...

Quizás no exista ninguna solución para MacPorts.

    
respondido por el user588 13.03.2011 - 17:23
1

He escrito algunos scripts para automatizar la limpieza de puertos: enlace

La secuencia de comandos 'macportsfoster' mostrará una lista de todos los puertos que no se requieren en la lista solicitada, ordenada de tal manera que 'port deactivate $ (macportsfoster)' los eliminará todos de una vez.

    
respondido por el vasi 11.05.2012 - 03:26

Lea otras preguntas en las etiquetas