すべての依存関係を含むHomebrewパッケージをアンインストール/削除する


338

他のパッケージが依存しているパッケージをスキップして(パッケージマネージャーの用語でのカスケードパッケージの削除)、Homebrew式を使用して、そのすべての依存関係と共にアンインストール/削除します。

たとえばa、パッケージbcに依存するパッケージをアンインストールdしますc。ここで、パッケージはパッケージにも依存します。その結果、両方のa&がアンインストールされb、スキップされcます。

どうやってやるの?

不要なジャンクを残さずにパッケージをアンインストールする方法が必要です。


3
これは、この名前に値するパッケージマネージャがすぐに実行できることではありませんか。LOL
mljrg

回答:


406

編集:

またはと呼ばれる外部コマンドを使用して問題が解決されたbrew rmdepsbrew rmtreeようです。

インストールして使用するには、次のコマンドを発行します。

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

詳細と説明については、上記のリンクを参照してください。


元の答え:

現在、これを達成する簡単な方法はないようです。

しかし、私はHomebrewのGitHubページに問題提出し、誰かがこれを解決するための専用コマンドを追加するまでの一時的な解決策を提案しました。

他のパッケージの依存関係ではないすべてのパッケージを印刷するという外部コマンドが呼び出されbrew leavesます。

andの論理出力を実行するbrew leavesbrew deps <package>、孤立した依存関係パッケージのリストが表示されるだけで、後で手動でアンインストールできます。これと組み合わせるとxargs、必要なものが得られると思います(期待外れ、これに頼らないでください)。


編集:誰かがjoin代わりに使用して非常に類似した解決策を提案しましたxargs

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

詳細については、上記の問題に関するコメントを参照してください。


4
2行目でエラーが発生しますThis command requires a keg argument
Shmidt 2014

7
サードパーティのbrew rmtreeスクリプトがすぐに利用できるようになりました:brew tap beeftornado/rmtree && brew install beeftornado/rmtree/brew-rmtree
Nick McCurdy 2014年

1
@NicolasMcCurdy私が試したところ、これが実際に今日最も便利な方法であることを確認できます。
Oryバンド

1
brew rm $(join <(brew leaves) <(brew deps FORMULA))仕事はうまくいきます。すべての依存関係が削除されるまで、繰り返し実行する必要があります。依存関係は相互に依存しているため、一度にすべてをアンインストールすることはできません。
Greg Wang

1
&& brew install brew-rmtreeもはや必要ではありません。
ボリス

34

ここでの目標は、別のパッケージの依存関係壊すことなく、特定のパッケージとその依存関係を削除することです。私はこのコマンドを使用します:

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

注:@alphadoggの役立つコメントを反映するように編集されました。


--ignore-dependenciesこれを機能させるには、削除に追加する必要がありました。
alphadogg 2016

2
他のパッケージで使用されているdepを再インストールしなかったため、これは私のbrew構成を壊しました。使用禁止
マルコ・パッパラード

25

brew rmtree まったく動作しません。その問題に関するリンクから、実際に機能するrmrecを見つけました。神はなぜbrewこれをネイティブコマンドとして持たないのかを知っています。

brew tap ggpeti/rmrec
brew rmrec pkgname

本当にこれが大好きですが、すでに自分自身をアンインストールする道を歩み始め、削除する必要のあるパッケージを見つけ続けている場合でも、最も[FORMULA]影響のあるパッケージを知る必要があります。あるいは、簡単に再インストールしてからrmrecを使用するすべての依存関係を適切に再帰的に削除します。
dragon788

2
警告:rmrec現在、名前空間付きパッケージをうまく処理していないようです。私は引き込んだものを使用していましたが、linuxbrew/xorg/xorgそのパッケージ以外のすべてを削除し、そのパッケージに明示的に名前を付けても解決できず、何もしませんでした。
dragon788

使用推奨rmrecが悪いことを確認。依存関係はまったく扱いません。
omdv 2017

つまりrmtreermrec依存関係を処理します。
Timmmm 2017

1
God knows why brew doesn't have this as a native command.=>醸造開発者の態度が悪いからです。彼らは人々がどんな問題も開くことさえ許しません。github.com/Homebrew/brewを確認してください。問題は20件未満です。そのような少数。それは良いことですか?いいえ、それは非常に悪いです。
sgon00

15

@jfmercerの回答に基づいています(修正にはコメント以上のものが必要です)。

パッケージの依存関係を削除します(パッケージは削除しません):

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

パッケージを削除:

brew remove [FORMULA]

不足しているライブラリを再インストールします。

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

MeldMergeリリースmeldを検出した後のアンインストールのテスト。


私はbrewを使ってffmpegをインストールしていましたが、これは物事をひどく混乱させました。上記の方法で、依存関係の拡張リストを含むffmpegをクリーンアップすることで、うまくいきました。
webtweakers

13

この回答を使用するには、システムにインストールするパッケージ名を含むファイルを作成して維持する必要があります。まだ持っていない場合は、次のコマンドを使用して、インストールしたままにしたくないパッケージ名を削除します。

brew leaves > brew_packages

次に、次のコマンドを実行して、インストールされているが不要なパッケージと不要な依存関係をすべて削除できます

brew_clean brew_packages

brew_cleanこちらから入手できます:https : //gist.github.com/cskeeters/10ff1295bca93808213d

このスクリプトは、brew_packagesで指定したすべてのパッケージとその依存関係をすべて取得し、それらをの出力と比較しbrew listて、このリストをユーザーと確認した後、不要なパッケージを最後に削除します。

この時点でパッケージを削除する場合はa、単にbrew_packagesファイルからパッケージを削除してから、再実行しbrew_clean brew_packagesます。削除されますが、削除されbませんc


brew cleanが組み込まれていると思います。試してみてくださいbrew clean -s
Devin G Rhode

1
上記のコメントが間違っていたため、編集は5分で中断されました。試してみるbrew cleanup -s && brew cask cleanup
Devin G Rhode

5

これにはUNIXパイプを使用できます

brew deps [FORMULA] | xargs brew rm

12
これは良い解決策ではありません。この方法で他のパッケージの依存関係を壊すことができます。
Ory Band

12
後で実行できるコマンドがあり、他の必要な依存関係brew missingを削除した場合は、それらを取得するために実行する必要があるコマンドを通知します
SeanJA

4

次のスクリプトを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

次のコマンドでインストールします

sudo install brew-purge /usr/local/bin

今それを実行します

brew purge package

gpgの使用例

$ 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

他の答えは私にはうまくいきませんでしたが、これは(fishシェルで)うまくいきました:

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

brew remove $p他のパッケージがに依存していると失敗するからpです。


2

より完全なBourneシェル関数

良い答えはすでにいくつかありますが、一部は古く、完全に完全なものはありません。特に、それらのほとんどは依存関係を削除しますが、その後、最初に対象とした数式を削除するかどうかはユーザーに任せます。一度に複数のフォーミュラをアンインストールしたい場合、投稿されたワンライナーを使用するのも面倒な場合があります。

これは、数式のリストを取得し、それぞれの依存関係を削除し、数式自体のすべてのコピーを削除してから、不足している依存関係を再インストールするBourne互換のシェル関数(既知のバシズムなし)です。

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でテストされました。

注意事項

これは、私がテストしたすべての標準的な数式で機能します。現在はキャスクを処理していませんが、標準のフォーミュラと同じ名前のキャスク(例:MacVim)を抽出しようとすると、大声で文句を言うことはありません。


1

の出力brew missingが変更されたため、@ jfmercerの回答は現在のbrewで動作するように少し変更する必要があります。

brew deps [FORMULA] | xargs brew remove --ignore-dependencies && brew missing | cut -f1 -d: | xargs brew install
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.