Tengo una fórmula de Homebrew que deseo desinstalar / eliminar junto con todas sus dependencias, omitiendo paquetes de los que dependen otros paquetes (también conocido como eliminación de paquetes en cascada en el lenguaje del administrador de paquetes).
por ejemplo, desinstalar el paquete a
que depende de los paquetes b
y c
, donde el paquete d
también depende del paquete c
. El resultado debería desinstalar ambos a
& b
, omitiendo c
.
¿Cómo puedo hacer eso?
Debe haber una manera de desinstalar un paquete sin dejar basura innecesaria .
Respuestas:
EDITAR:
Parece que el problema ahora se resuelve usando un comando externo llamado
brew rmdeps
obrew rmtree
.Para instalar y usar, emita los siguientes comandos:
Vea el enlace de arriba para más información y discusión.
Respuesta original:
Parece que actualmente, no hay una manera fácil de lograr esto.
Sin embargo, presenté un problema en la página de GitHub de Homebrew , y alguien sugirió una solución temporal hasta que agreguen un comando exclusivo para resolver esto.
Hay un comando externo llamado
brew leaves
que imprime todos los paquetes que no son dependencias de otros paquetes.Si hace una lógica y en la salida de
brew leaves
ybrew deps <package>
, puede obtener una lista de los paquetes de dependencia huérfanos, que puede desinstalar manualmente después. Combina esto conxargs
y obtendrás lo que necesitas, supongo (no probado, no cuentes con esto).EDITAR: Alguien sugirió una solución muy similar, usando en
join
lugar dexargs
:Consulte el comentario sobre el problema mencionado anteriormente para obtener más información.
fuente
This command requires a keg argument
.brew rmtree
script de terceros ahora está disponible en un toque:brew tap beeftornado/rmtree && brew install beeftornado/rmtree/brew-rmtree
brew rm $(join <(brew leaves) <(brew deps FORMULA))
hace bien el trabajo. Solo tiene que ejecutarlo una y otra vez hasta que se eliminen todas las dependencias. No puede desinstalar todo de una vez porque las dependencias son interdependientes entre sí.&& brew install brew-rmtree
ya no es necesario.El objetivo aquí es eliminar el paquete dado y sus dependencias sin romper las dependencias de otro paquete. Yo uso este comando:
Nota: Editado para reflejar el útil comentario de @ alphadogg.
fuente
--ignore-dependencies
para eliminar para permitir que esto funcione.brew rmtree
no funciona en absoluto . De los enlaces sobre ese tema encontré rmrec que realmente funciona. Dios sabe por québrew
no tiene esto como un comando nativo.fuente
[FORMULA]
y luego usar rmrec para eliminar recursivamente todas sus dependencias correctamente.rmrec
que actualmente no maneja muy bien los paquetes de espacios de nombres. Estaba usando algo que se detuvolinuxbrew/xorg/xorg
y eliminó todo excepto ese paquete e incluso nombrando explícitamente ese paquete no pudo resolverlo y no hizo nada.rmrec
es mala. No maneja dependencias en absoluto.rmtree
?rmrec
maneja dependencias.God knows why brew doesn't have this as a native command.
=> Porque los desarrolladores de cerveza tienen malas actitudes. Ni siquiera permiten que las personas abran ningún problema. Visite github.com/Homebrew/brew , ahora solo tiene menos de 20 problemas. Un número tan pequeño. ¿Eso es algo bueno? No, es muy malo.Basado en la respuesta de @jfmercer (las correcciones necesitaban más que un comentario).
Eliminar las dependencias del paquete (no elimina el paquete):
Eliminar paquete:
Vuelva a instalar las bibliotecas faltantes:
Desinstalación probada
meld
después de descubrir las versiones MeldMerge .fuente
El uso de esta respuesta requiere que cree y mantenga un archivo que contenga los nombres de paquete que desea instalar en su sistema. Si aún no tiene uno, use el siguiente comando y elimine los nombres de paquetes que no desea mantener instalados.
Luego puede eliminar todos los paquetes instalados, pero no deseados y cualquier dependencia innecesaria ejecutando el siguiente comando
brew_clean
está disponible aquí: https://gist.github.com/cskeeters/10ff1295bca93808213dEste script obtiene todos los paquetes que especificó en brew_packages y todas sus dependencias y los compara con la salida
brew list
y finalmente elimina los paquetes no deseados después de verificar esta lista con el usuario.En este punto, si desea eliminar el paquete
a
, simplemente elimínelo del archivo brew_packages y luego vuelva a ejecutarlobrew_clean brew_packages
. Se eliminaráb
, pero noc
.fuente
brew clean -s
brew cleanup -s && brew cask cleanup
Solo puede usar una tubería UNIX para esto
fuente
brew missing
que te dirá qué comando necesitas ejecutar para recuperarlosGuarde el siguiente script como brew-purge
Ahora instálalo con el siguiente comando
Ahora ejecútalo
Ejemplo usando gpg
fuente
Otras respuestas no funcionaron para mí, pero esto sí (en
fish
shell):Porque
brew remove $p
falla cuando algún otro paquete dependep
.fuente
Una función de Bourne Shell más completa
Ya hay una serie de buenas respuestas, pero algunas están desactualizadas y ninguna de ellas está completamente completa. En particular, la mayoría de ellos eliminarán las dependencias, pero aún así le corresponde a usted eliminar la fórmula originalmente dirigida posteriormente. Los mensajes publicados también pueden ser tediosos si desea desinstalar más de una fórmula a la vez.
Aquí hay una función de shell compatible con Bourne (sin Bashismos conocidos) que toma una lista de fórmulas, elimina las dependencias de cada uno, elimina todas las copias de la fórmula en sí y luego reinstala las dependencias faltantes.
Fue probado en Homebrew 1.7.4.
Advertencias
Esto funciona en todas las fórmulas estándar que probé. Actualmente no maneja barriles, pero tampoco se quejará en voz alta si intenta desbloquear un barril con el mismo nombre que una fórmula estándar (por ejemplo, MacVim).
fuente
La respuesta de @jfmercer debe modificarse ligeramente para funcionar con la preparación actual, porque la salida de
brew missing
ha cambiado:fuente