web-dev-qa-db-ja.com

Homebrewパッケージを、そのすべての依存関係も含めてアンインストール/削除します

Homebrew パッケージを持っていますが、他のパッケージが依存しているパッケージはスキップします。

例えば abパッケージに依存するcパッケージをアンインストールします。パッケージdもパッケージcに依存します。その結果、abの両方がアンインストールされ、cはスキップされます。

どうやってやるの?

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

291
Ory Band

編集:

のように見えます。この問題は、brew rmdepsまたはbrew rmtree と呼ばれる外部コマンドを使用して解決されました。

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

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

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


元の回答:

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

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

brew leavesと呼ばれる external command があり、他のパッケージの依存関係ではないすべてのパッケージを出力します。

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


EDIT:誰かがjoinの代わりにxargsを使用して、非常によく似たソリューションを提案しました。

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

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

369
Ory Band

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

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

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

27
jfmercer

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

brew tap ggpeti/rmrec
brew rmrec pkgname
18
Timmmm

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

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は削除されません。

12
Chad Skeeters

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

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

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

パッケージを削除する:

brew remove [FORMULA]

足りないライブラリを再インストールします。

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

MeldMergeリリースを発見した後にmeldをアンインストールすることをテストしました

10
vault

これにはUNIXパイプを使用することができます。

brew deps [FORMULA] | xargs brew rm
4
shapeshed

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

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

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

2
lcmgcd

より完全なBourneシェル関数

いくつかの良い答えがすでにありますが、いくつかは時代遅れで、どれも完全に完成したものではありません。特に、それらのほとんどは依存関係を削除しますが、その後も元々のターゲット式を削除するのはあなたに任せます。一度に複数の数式をアンインストールする場合は、投稿されたワンライナーを使用するのも面倒です。

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

unbrew () {
    local formula
    for formula in "[email protected]"; 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)。

2
Todd A. Jacobs

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

brew deps [FORMULA] | xargs brew remove --ignore-dependencies && brew missing | cut -f1 -d: | xargs brew install
0
freytag

次のスクリプトを 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.
$ 
0
Kevin Davies