Homebrewの中でpip
に関するパッケージも管理できる様にする
brew-pipというコマンドがあるのですが、
これに関してパッケージを削除する時にこれまで通りの方法では
削除出来なくなっています。
brew-pip/brew-gem
brew-pipは
Homebrewでインストールするとbrew pip
というコマンドが使える様になり、
続けてpip
でインストール出来るパッケージを入れると
pip
でインストールし、かつHomebrewの管理下におかれます。
具体的には、例えばdjango
をインストールする場合、
brew pip django
とすると、pip install django
が実行され、
かつ、/usr/local/Cellar/pip-djangoというディレクトリ(Keg)が作成されます。
brew list
などはこのKegを見てリストを作るので、brew list
してみると
pip-django
というパッケージが現れる様になります。
ただし、Formulaは無いので(インストール時には一時的に作ってHomebrewに渡している)、brew info pip-django
とかするとエラーが出ます。
このパッケージを削除する際には、これまで
$ brew uninstall pip-django
とすればpip uninstall django
が実行され、Kegが削除されてました。
同様に
brew-gemというコマンドもあり、
こちらはgem
でインストールするパッケージを管理するものです。
brew-pip
とちょっと違って、こちらはインストールする時には
$ brew gem install heroku
の様にinstall
サブコマンドをさらに入れます。
これで、gem-heroku
というKegが出来ます。
また、uninstall
もgem
サブコマンドを使って、
$ brew gem uninstall heroku
の様に出来ます。
$ brew uninstall gem-heroku
としても同様に削除することが出来ます。
こちらもFormulaはインストール時に一時的に作ってHomebrewに渡しています。
Homebrewのアップデート
追記: 2017/01/17
下で言ってる最新のHomebrewはstable versionではなくmasterブランチを追っていたバージョンでした。 実際、この変更はstable versionにはそのまま入らなかったのでstable versionを使っていた限りは この様な問題は出なかったはずです。
追記ここまで
これが、最新のHomebrewでは
$ brew uninstall pip-django
Error: No available formula with the name "pip-django"
というエラーが出るようになりました。
これは下のアップデートによるもの:
Merge pull request #1082 from alyssais/uninstall_dependancy_error · Homebrew/brew@2ce17a1
このアップデートは、uninstall
コマンドをする時に
パッケージ依存性をチェックして、もしアンインストールしようとしているパッケージに
依存しているパッケージが存在する場合、アンインストールを中止する、というアップデートです。
依存しているパッケージがあると、
$ brew rm python
Error: Refusing to uninstall /usr/local/Cellar/python/2.7.12 because it is required by mercurial, which is currently installed.
You can override this and force removal with `brew uninstall --ignore-dependencies python`.
こんな感じで何が依存しているか教えてくれて、もしどうしてもしたいなら--ignore-dependencies
オプションを使ってね、と言われます。
で、このチェックをする時にFormulaを見てチェックするので、Formulaの存在をチェックし、
ここでpip-django
などのFormulaが無いのでエラーが出てしまいます。
brew/uninstall.rb at 2ce17a11379a45e5de7e09a57681006aca5206bd · Homebrew/brew
逆に言うと、この部分を回避できれば良いので、
$ brew uninstall --ignore-dependencies pip-django
とすると丁度この部分を回避してくれるので成功します。
brew-pip自体、最近ほとんどアクティビティが無く、
またちょっと特殊な方法でHomebrewを使ってることもあるので
多分この辺回避するようなPull RequestをHomebrewの方に送っても
入れて貰えない気がするので、使うとしたら--ignore-dependencies
で回避するしか無いかな、と言う感じです。
homebrew-fileの方では、
brew-wrap
の中でpip-*
/gem-*
といったパッケージを削除しようとする場合、
自動でこのオプションを追加する様にしてみました。
added –ignore-dependencies for pip uninstall in brew-wrap · rcmdnk/homebrew-file@35699b8
brew-wrapを読み込んでおけば、 これまで通り、
$ brew uninstall pip-django
だけで削除出来る様になっています。
brew-gemの方に関してはbrew gem uninstall
とした場合に今のままではエラーが出るので
それを回避するようなPull Requestを作っておきました。
added –ignore-dependencies option to uninstall by rcmdnk · Pull Request #37 · sportngin/brew-gem
Mergeされるまではbrew gem uninstall
ではbrew uninstall
に関するオプションを渡せないので
brew uninstall --ignore-dependencies gem-heroku
の様に
直接アンインストールする方法を使う必要があります。