Tüm bağımlılıkları içeren bir Homebrew paketini kaldırma / kaldırma


339

Tüm bağımlılıkları ile birlikte kaldırmak / kaldırmak istediğiniz bir Homebrew formülü var, diğer paketlerin bağımlı olduğu paketleri atlamak ( Paket yöneticisi parlance'de aka Basamaklı paket kaldırma ).

örneğin kaldırma paketi apaketleri bağlıdır bve cpaket, daynı zamanda paketin bağlıdır c. Sonuç hem a& hem de batlamayı kaldırmalıdır c.

Bunu nasıl yapabilirim?

Gereksiz önemsiz öğeleri geride bırakmadan bir paketi kaldırmanın bir yolu olmalı .


3
Bu isme değer veren herhangi bir paket yöneticisinin kutudan çıkması gereken şey değil mi? LOL
mljrg

Yanıtlar:


407

DÜZENLE:

Sorun şimdi brew rmdepsveya adlı harici bir komut kullanılarak çözülmüşbrew rmtree gibi görünüyor .

Yüklemek ve kullanmak için aşağıdaki komutları verin:

$ brew tap beeftornado/rmtree
$ brew rmtree <package>

Daha fazla bilgi ve tartışma için yukarıdaki bağlantıya bakın.


Orijinal cevap:

Şu anda bunu başarmanın kolay bir yolu yok gibi görünüyor.

Ancak, Homebrew'un GitHub sayfasında bir sorun sundum ve biri bunu çözmek için özel bir komut ekleyene kadar geçici bir çözüm önerdi.

Bir var harici komut adı verilen brew leavesdiğer paketlerin bağımlılıkları olmayan bütün paketleri yazdırır.

Eğer mantıklı yaparsanız ve çıkışındaki brew leavesve brew deps <package>, sadece sonradan elle kaldırabilirsiniz yetim bağımlılık paketlerinin bir listesini alabilirsiniz. Bunu ile birleştirin xargsve ihtiyacınız olanı elde edersiniz, sanırım (denenmemiş, buna güvenmeyin).


DÜZENLEME: Biri kullanarak, çok benzer bir çözüm önerdi joinyerine xargs:

brew rm FORMULA
brew rm $(join <(brew leaves) <(brew deps FORMULA))

Daha fazla bilgi için yukarıda belirtilen konu hakkındaki açıklamaya bakın .


4
İkinci satır hata veriyor: This command requires a keg argument.
Shmidt

7
Üçüncü taraf brew rmtreekomut dosyası artık bir dokunuşla kullanılabilir:brew tap beeftornado/rmtree && brew install beeftornado/rmtree/brew-rmtree
Nick McCurdy

1
@NicolasMcCurdy Denedim ve bu gerçekten bugünlerde en rahat yol olduğunu onaylayabilirsiniz.
Ory Band

1
brew rm $(join <(brew leaves) <(brew deps FORMULA))işi iyi yapıyor. Tüm bağımlılıklar kaldırılana kadar tekrar tekrar çalıştırmanız gerekir. Bağımlılıklar birbirine bağlı olduğundan her şeyi bir kerede kaldıramaz.
Greg Wang

1
&& brew install brew-rmtreeArtık gerekli değildir.
Boris

34

Buradaki amaç, verilen paketi ve bağımlılıklarını başka bir paketin bağımlılıklarını bozmadan kaldırmaktır. Bu komutu kullanıyorum:

brew deps [FORMULA] | xargs brew remove --ignore-dependencies && brew missing | xargs brew install

Not: @ alphadogg'un yararlı yorumunu yansıtacak şekilde düzenlendi.


--ignore-dependenciesBu işe izin vermek için kaldırmak için eklemek zorunda kaldı.
alphadogg

2
Bu, demlemek yapılandırmamı bozdu, çünkü diğer paketlerde kullanılan depsleri yeniden yüklemedi. KULLANIM YOK
Marco Pappalardo

26

brew rmtree hiç çalışmıyor . Bu konudaki bağlantılardan aslında işe yarayan rmrec buldum . Tanrı bunu neden brewyerel bir emir olarak görmediğini biliyor .

brew tap ggpeti/rmrec
brew rmrec pkgname

Bunu gerçekten seviyorum, ancak kendinizi kaldırma yolunu başlattıysanız ve kaldırmanız gereken daha fazla paket bulmaya devam ettiyseniz, yine de en geniş dokunma paketlerinin ne olduğunu bilmeniz gerekir veya [FORMULA]rmrec'i kısa bir süre sonra yeniden yükleyebilir ve kullanabilirsiniz. tüm bağımlılıklarını düzgün bir şekilde kaldırmak için.
dragon788

2
Uyarı: Ayrıca rmrecşu anda ad boşluklu paketleri çok iyi işlemiyor gibi görünüyor . Ben çekti bir şey kullanıyordum linuxbrew/xorg/xorgve bu paket dışında her şeyi kaldırdı ve hatta açıkça bu paketi adlandırmak çözemedi ve hiçbir şey yapmadı.
dragon788

Kullanım önerisinin rmreckötü olduğunu doğruladı . Hiç bağımlılıkları ele almaz.
omdv

Yani rmtree? rmrecbağımlılıkları ele alır.
Timmmm

1
God knows why brew doesn't have this as a native command.=> Çünkü demlemek geliştiricilerin kötü tutumları vardır. İnsanların herhangi bir sorun açmasına bile izin vermiyorlar. Kontrol github.com/Homebrew/brew , sadece şimdi 20'den az sorunlar vardır. Çok az sayıda. Bu iyi bir şey mi? Hayır, çok kötü.
18:16, sgon00

15

@Jfmercer yanıtına dayanarak (düzeltmeler bir yorumdan daha fazlasına ihtiyaç duyuyordu).

Paketin bağımlılıklarını kaldırın (paketi kaldırmaz):

brew deps [FORMULA] | xargs brew remove --ignore-dependencies

Paketi kaldır:

brew remove [FORMULA]

Eksik kütüphaneleri yeniden yükleyin:

brew missing | cut -d: -f2 | sort | uniq | xargs brew install

MeldMerge sürümlerinimeld keşfettikten sonra kaldırma işlemi test edildi .


Demlemek için ffmpeg taktım, bu da işleri ciddi şekilde berbat etti. Genişletilmiş bağımlılık listesi de dahil olmak üzere ffmpeg'i yukarıda açıklanan yöntemle temizlemek benim için çalıştı.
webtweakers

13

Bu yanıtı kullanabilmek için sisteminize yüklenmesini istediğiniz paket adlarını içeren bir dosya oluşturup bakımını yapmanız gerekir. Zaten bir tane yoksa, aşağıdaki komutu kullanın ve kurulmasını istemediğiniz paket adlarını silin.

brew leaves > brew_packages

Ardından, aşağıdaki komutu çalıştırarak yüklenen ancak istenmeyen tüm paketleri ve gereksiz bağımlılıkları kaldırabilirsiniz

brew_clean brew_packages

brew_cleanburada bulabilirsiniz: https://gist.github.com/cskeeters/10ff1295bca93808213d

Bu komut dosyası, brew_packages içinde belirttiğiniz tüm paketleri ve bunların tüm bağımlılıklarını alır ve brew listbu listeyi kullanıcı ile doğruladıktan sonra istenmeyen paketleri çıkarır ve son olarak istenmeyen paketleri kaldırır.

Bu noktada paketi kaldırmak istiyorsanız a, sadece brew_packages dosyasından kaldırın ve yeniden çalıştırın brew_clean brew_packages. Kaldırılır b, ancak kaldırılmaz c.


Sanırım demlemek temiz şimdi yerleşik, deneyinbrew clean -s
Devin G Rhode

1
YORUM YAZILMIŞTIR, düzenleme 5 dakikada kesilir. deneyinbrew cleanup -s && brew cask cleanup
Devin G Rhode

5

Bunun için sadece bir UNIX borusu kullanabilirsiniz

brew deps [FORMULA] | xargs brew rm

12
Bu iyi bir çözüm değil. Diğer paketlerin bağımlılıklarını bu şekilde kırabilirsiniz.
Ory Band

12
Daha sonra, brew missingonları geri almak için hangi komutu çalıştırmanız gerektiğini söyleyecek diğer gerekli bağımlılıkları
nuked

4

Aşağıdaki komut dosyasını farklı kaydet brew-purge

#!/bin/bash
#:Usage: brew purge formula
#: 
#:Removes the package and all dependancies.
#: 
#: 
PKG="$1"
if [ -z "$PKG" ];then
   brew purge --help
   exit 1
fi
brew rm $PKG
[ $? -ne 0 ] && exit 1
while brew rm $(join <(brew leaves) <(brew deps $PKG)) 2>/dev/null
  do :
done
echo Package $PKG and its dependancies have been removed.
exit 0

Şimdi aşağıdaki komutla yükleyin

sudo install brew-purge /usr/local/bin

Şimdi çalıştır

brew purge package

Gpg kullanma örneği

$ brew purge gpg
Uninstalling /usr/local/Cellar/gnupg/2.2.13... (134 files, 11.0MB)
Uninstalling /usr/local/Cellar/adns/1.5.1... (14 files, 597.5KB)
Uninstalling /usr/local/Cellar/gnutls/3.6.6... (1,200 files, 8.9MB)
Uninstalling /usr/local/Cellar/libgcrypt/1.8.4... (21 files, 2.6MB)
Uninstalling /usr/local/Cellar/libksba/1.3.5... (14 files, 344.2KB)
Uninstalling /usr/local/Cellar/libusb/1.0.22... (29 files, 508KB)
Uninstalling /usr/local/Cellar/npth/1.6... (11 files, 71.7KB)
Uninstalling /usr/local/Cellar/pinentry/1.1.0_1... (12 files, 263.9KB)
Uninstalling /usr/local/Cellar/libassuan/2.5.3... (16 files, 444.2KB)
Uninstalling /usr/local/Cellar/libtasn1/4.13... (59 files, 436KB)
Uninstalling /usr/local/Cellar/libunistring/0.9.10... (54 files, 4.4MB)
Uninstalling /usr/local/Cellar/nettle/3.4.1... (85 files, 2MB)
Uninstalling /usr/local/Cellar/p11-kit/0.23.15... (63 files, 2.9MB)
Uninstalling /usr/local/Cellar/gmp/6.1.2_2... (18 files, 3.1MB)
Uninstalling /usr/local/Cellar/libffi/3.2.1... (16 files, 296.8KB)
Uninstalling /usr/local/Cellar/libgpg-error/1.35... (27 files, 854.8KB)
Package gpg and its dependancies have been removed.
$ 

2

Diğer cevaplar benim için işe yaramadı, ama bu işe yaradı ( fishkabuğunda):

brew remove <package>
for p in (brew deps <package>)
    brew remove $p
end

Çünkü brew remove $pbaşka bir pakete bağlı olduğunda başarısız olur p.


2

Daha Eksiksiz Bourne Kabuğu İşlevi

Zaten birkaç iyi cevap var, ancak bazıları güncel değil ve hiçbiri tamamen tamamlanmadı. Özellikle, çoğu bağımlılıkları kaldıracak, ancak daha sonra orijinal olarak hedeflenmiş formülü kaldırmanız için size bırakacaktır. Bir kerede birden fazla formülü kaldırmak istiyorsanız, yayınlanan tek gömlekler de çalışmak için sıkıcı olabilir.

Burada, formüllerin bir listesini alan, her birinin bağımlılıklarını kaldıran, formülün tüm kopyalarını kaldıran ve sonra eksik bağımlılıkları yeniden yükleyen Bourne uyumlu bir kabuk işlevi (bilinen herhangi bir Bashizm olmadan).

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
}

Homebrew 1.7.4 üzerinde test edildi.

Uyarılar

Bu, test ettiğim tüm standart formüllerde çalışır. Şu anda fıçıları işlemez, ancak standart formülle aynı adı taşıyan bir fıçı (örneğin MacVim) sökmeye çalışırsanız da yüksek sesle şikayet etmez.


1

@Jfmercer'in cevabı, mevcut demleme ile çalışmak için biraz değiştirilmelidir, çünkü çıktısı brew missingdeğişmiştir:

brew deps [FORMULA] | xargs brew remove --ignore-dependencies && brew missing | cut -f1 -d: | xargs brew install
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.