rcmdnk's blog
Last update

PiP: Experiencing AIDS in the 80s – a personal story (English Edition)

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が出来ます。

また、uninstallgemサブコマンドを使って、

$ 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の様に 直接アンインストールする方法を使う必要があります。

Sponsored Links
Sponsored Links

« 電力自由化に伴い電力会社を変更してみた Mac Homebrewのbrew tapでも自動アップデートがかかって余計な出力が出るので注意 »

}