HomeBrewで依存関係を確認しパッケージを削除する
intel版とarm版の両方にgccが入ってしまったため、intel版を削除したい
背景
vscodeでC++の開発環境構築しよーと思って調べてたら、コンパイラのgccをbrewで入れた。
brew install gcc
# 以下略
入れた情報を確認するか。
brew info gcc
==> gcc: stable 13.2.0 (bottled), HEAD
GNU compiler collection
https://gcc.gnu.org/
/opt/homebrew/Cellar/gcc/13.2.0 (1,489 files, 364.3MB) *
Poured from bottle using the formulae.brew.sh API on 2024-03-20 at 10:27:40
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/g/gcc.rb
License: GPL-3.0-or-later with GCC-exception-3.1
==> Dependencies
Required: gmp ✔, isl ✔, libmpc ✔, mpfr ✔, zstd ✔
==> Options
--HEAD
Install HEAD version
==> Analytics
install: 109,842 (30 days), 306,411 (90 days), 1,212,445 (365 days)
install-on-request: 37,405 (30 days), 111,388 (90 days), 556,780 (365 days)
build-error: 1,451 (30 days)
うん。arm版のではいってるねー
/opt/homebrew/Cellar/gcc/13.2.0 (1,489 files, 364.3MB) *
場所はどこかな
which gcc-13
/usr/local/bin/gcc-13
え?intel版...になってる....だと
arm版とintel版のパッケージ一覧の確認
brew list
==> Formulae
gcc gmp isl
libmpc libmpc mpfr
zstd
/usr/local/bin/brew list
==> Formulae
gcc gmp isl
libmpc libmpc mpfr
zstd
arm版とintel版の両方にgccがインストールされてしまっている。
なんか、前にintel版使ってたときのすでに入れてたのか。
よし、intel版消して、arm版を使うようにしようっと。
intel版のgccを削除する
/usr/local/bin/brew uninstall gcc
Error: Refusing to uninstall /usr/local/Cellar/gcc/13.1.0
because it is required by gdal, hdf5, netcdf, numpy, openblas and postgis, which are currently installed.
You can override this and force removal with:
brew uninstall --ignore-dependencies gcc
「依存してるライブラリがあるからだめよ。」と怒られる
依存関係を確認する
gccが依存しているパッケージ一覧を確認する
方法①: brew depsを使用する
/usr/local/bin/brew deps gcc
gmp
isl
libmpc
lz4
mpfr
xz
zstd
方法②: brew info を使用する
/usr/local/bin/brew info gcc
==> gcc: stable 13.1.0, HEAD
GNU compiler collection
https://gcc.gnu.org/
/usr/local/Cellar/gcc/13.1.0 (1,590 files, 426.9MB) *
Poured from bottle using the formulae.brew.sh API on 2023-06-22 at 23:22:03
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/gcc.rb
License: GPL-3.0-or-later with GCC-exception-3.1
==> Dependencies
Required: gmp ✔, isl ✔, libmpc ✔, mpfr ✔, zstd ✔
==> Options
--HEAD
Install HEAD version
==> Analytics
install: 109,842 (30 days), 306,411 (90 days), 1,212,445 (365 days)
install-on-request: 37,405 (30 days), 111,388 (90 days), 556,780 (365 days)
build-error: 1,451 (30 days)
👇の箇所が依存しているパッケージ
Required: gmp ✔, isl ✔, libmpc ✔, mpfr ✔, zstd ✔
gccに依存してるパッケージ一覧を確認する
--installedオプションを付けることで、現在インストールされているパッケージに限定して依存しているパッケージが表示される。
/usr/local/bin/brew uses --installed gcc
gdal hdf5 netcdf numpy openblas postgis
gccに依存してるパッケージが依存してるパッケージも確認する
/usr/local/bin/brew uses --installed gcc
gdal hdf5 netcdf numpy openblas postgis
/usr/local/bin/brew uses --installed gdal
postgis
/usr/local/bin/brew uses --installed hdf5
gdal netcdf postgis
/usr/local/bin/brew uses --installed netcdf
gdal postgis
/usr/local/bin/brew uses --installed numpy
gdal postgis
/usr/local/bin/brew uses --installed openblas
gdal numpy postgis
/usr/local/bin/brew uses --installed postgis
どうやらpostgisをいれる際に関連するパッケージがたくさん入れられてしまっているっぽい。
ので、postgisから順に削除していく
パッケージ削除
/usr/local/bin/brew uninstall postgis
Uninstalling /usr/local/Cellar/postgis/3.3.3_1... (718 files, 41.9MB)
/usr/local/bin/brew uninstall gdal
Uninstalling /usr/local/Cellar/gdal/3.6.4_7... (466 files, 27.6MB)
/usr/local/bin/brew uninstall netcdf
Uninstalling /usr/local/Cellar/netcdf/4.9.2_1... (31 files, 3.7MB)
/usr/local/bin/brew uninstall numpy
Uninstalling /usr/local/Cellar/numpy/1.25.0... (1,766 files, 47.1MB)
/usr/local/bin/brew uninstall openblas
Uninstalling /usr/local/Cellar/openblas/0.3.23... (23 files, 130.5MB)
/usr/local/bin/brew uninstall hdf5
Uninstalling /usr/local/Cellar/hdf5/1.14.1... (284 files, 18.4MB)
よし。全部消した。
これで、gcc消せるはず。
/usr/local/bin/brew uninstall gcc
Uninstalling /usr/local/Cellar/gcc/13.1.0... (1,590 files, 426.9MB)
できた!!!
参照もOK
which gcc-13
/opt/homebrew/bin/gcc-13
[番外編]パッケージ全部一括で消せばいいんじゃないの?
一応、brew uninstall [パッケージ名1] [パッケージ名2] [パッケージ名3] ...で削除はできるそう。
ただし、依存関係が複雑な場合は手間だけど、ひとつづつ確認して消す方が安全そう。
(他のパッケージへの影響やヒューマンエラーのリスクもあるし)
brew uninstall gcc gdal hdf5 netcdf numpy openblas postgis
依存関係ある状態で通るかは試してはないが、
強制的に抹消してやんよ。って場合は、--ignore-dependenciesのオプションつければ消せるとは思う。