macos - mojave - Desinstalar/eliminar un paquete Homebrew incluyendo todas sus dependencias
instalar brew mac os (9)
Tengo un paquete Homebrew que deseo desinstalar / eliminar con todas sus dependencias, omitiendo paquetes de los que otros paquetes dependen.
por ejemplo, desinstale el paquete a
que depende de los paquetes b
& c
, donde el paquete d
también depende del paquete c
. El resultado debería desinstalar tanto a
& b
, saltando c
.
¿Cómo puedo hacer eso?
Debe haber una manera de desinstalar un paquete sin dejar basura innecesaria.
EDITAR:
Parece que el problema ahora se resuelve con un comando externo llamado brew rmdeps
o brew rmtree
.
Para instalar y usar, ejecute los siguientes comandos:
$ brew tap beeftornado/rmtree
$ brew rmtree <package>
Vea el enlace de arriba para más información y discusión.
Respuesta original:
Parece que en la actualidad, 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 agregaron 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 realiza una lógica y en la salida de brew leaves
y brew deps <package>
, puede obtener una lista de los paquetes de dependencia huérfanos, que puede desinstalar manualmente después. Combine esto con xargs
y obtendrá lo que necesita, supongo (sin probar, no cuente con esto).
EDITAR: Alguien acaba de sugerir una solución muy similar, utilizando join
lugar de xargs
:
brew rm FORMULA
brew rm $(join <(brew leaves) <(brew deps FORMULA))
Vea el comentario sobre el tema mencionado anteriormente para más información.
Una función de shell Bourne 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á las dependencias, pero aún así podrá dejar que luego elimine la fórmula originalmente dirigida. También puede ser tedioso trabajar con las frases de una línea publicadas si desea desinstalar más de una fórmula a la vez.
Aquí hay una función de shell compatible con Bourne (sin Bashisms conocidos) que toma una lista de fórmulas, elimina las dependencias de cada uno, elimina todas las copias de la propia fórmula y luego vuelve a llamar las dependencias que faltan.
unbrew () {
local formula
for formula in "$@"; do
brew deps "$formula" |
xargs brew uninstall --ignore-dependencies --force
brew uninstall --force "$formula"
done
brew missing | cut -f2 -d: | sort -u | xargs brew install
}
Fue probado en Homebrew 1.7.4.
Advertencias
Esto funciona en todas las fórmulas estándar que he probado. Actualmente no maneja barriles, pero tampoco se quejará en voz alta si intentas destrabar un barril con el mismo nombre que una fórmula estándar (por ejemplo, MacVim).
Basado en la respuesta de @jfmercer (las correcciones necesitaban más que un comentario).
Eliminar las dependencias del paquete (no elimina el paquete):
brew deps [FORMULA] | xargs brew remove --ignore-dependencies
Retire el paquete:
brew remove [FORMULA]
Reinstalar las bibliotecas que faltan:
brew missing | cut -d: -f2 | sort | uniq | xargs brew install
Se probó la desinstalación de Meld después de descubrir las versiones de MeldMerge .
El objetivo aquí es eliminar el paquete dado y sus dependencias sin romper las dependencias de otro paquete. Yo uso este comando:
brew deps [FORMULA] | xargs brew remove --ignore-dependencies && brew missing | xargs brew install
Nota: Editado para reflejar el útil comentario de @ alphadogg.
El uso de esta respuesta requiere que cree y mantenga un archivo que contenga los nombres de paquetes que desea instalar en su sistema. Si aún no tiene uno, use el siguiente comando y elimine los nombres de los paquetes que no desea mantener instalados.
brew leaves > brew_packages
Luego puede eliminar todos los paquetes instalados, pero no deseados y cualquier dependencia innecesaria ejecutando el siguiente comando
brew_clean brew_packages
brew_clean
está disponible aquí: https://gist.github.com/cskeeters/10ff1295bca93808213d
Este script obtiene todos los paquetes que especificó en brew_packages y todas sus dependencias y los compara con la salida de 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 vuelva a ejecutar brew_clean brew_packages
. Se eliminará b
, pero no c
.
La respuesta de @jfmercer debe modificarse ligeramente para que funcione con la elaboración de cerveza actual, porque la salida de la brew missing
de brew missing
ha cambiado:
brew deps [FORMULA] | xargs brew remove --ignore-dependencies && brew missing | cut -f1 -d: | xargs brew install
Otras respuestas no funcionaron para mí, pero esto sí (en la cáscara de fish
):
brew remove <package>
for p in (brew deps <package>)
brew remove $p
end
Porque brew remove $p
falla cuando algún otro paquete depende de p
.
Puedes usar un tubo UNIX para esto
brew deps [FORMULA] | xargs brew rm
brew rmtree
no funciona en absoluto . De los enlaces sobre ese tema encontré rmrec que realmente funciona. Dios sabe por qué la brew
no tiene esto como un comando nativo.
brew tap ggpeti/rmrec
brew rmrec pkgname