MacのHomebrewは我々のようなクリエイティブな人間にとっては必須とされるツールだ。
だが、ちょっとした悩みも生じるんですよね。
Macには最初からPythonとかが入っているんですけど、Homebrewにもpythonがある。2系と3系があって、共存できるようになっている。ただPython使ってる人はシステムに最初から入ってるPythonを使うか、pyenvで入れるだろう。pyenvで入れとけばsudoしなくても済むし、いろんなバージョンを切り替えて使える。pyenvからpypyを使ってもいいしJythonやIronPythonを使ってもいい。私も普段はpyenvで普通のCPythonを使っている。pyenv自体はHomebrewで入れている。つまり、以下の3つがあるわけだ。
- システムのPython
- HomebrewのPython
- pyenvで入れたPython
pyenvはpyenvで問題はあって、やれzlibだのreadlineのヘッダがないとかで新しいバージョンのインストールがコケることが多発するのだが、それは置いておいて、問題はHomebrewのPythonだ。
ansibleやmercurialもHomebrewに入っているんだけど、こいつがHomebrewのPythonに依存しているのだ。つまりHomebrewのPythonを使わずにpyenvを使い、ansibleやmercurialはHomebrewで入れたい、と言ったことができない。pyenvならpyenvにどっぷり入って、pyenvが用意しているpipでpip install ansibleだのpip install Mercurialだのする必要があるわけ。
私はbrew update ; brew upgrade ; brew cleanupを毎日実行していて、パッケージをなるたけ最新に近い形で保っている。そこにgemだのpipだのnpmだのは入ってきてほしくないんだ。開発するモジュールに依存したpackage.jsonだのGemfileだのrequirements.txtは開発するモジュール側に入っているわけで、アップグレードして古いのを消す、みたいなのを回すとやばいと直感が俺にささやく。
だけどさ、ansibleやmercurialは最新に保ちたいんだよ!
つまり、、、
HomebrewのansibleやmercurialがシステムのPythonを使ってくれると助かるのに…
という話でした。gitの勝利が確定した今となってはmercurialを使うことは少ないけど、ansibleはマジで困る。
システムのPythonを使う場合にややこしいのは、普段使ってるPythonは3系のpyenvで入れたやつなんで、一時的にpyenv shell systemでシステムのpythonを使うようにしてから、sudo pip install …する必要があるのだが、sudoでpyenvがshellで使うPYENV_VERSIONが消えてしまうので、sudoersのenv_keepにPYENV_VERSIONを追加する必要があるのだ。それをしないと無意味にpyenv側のpipが使われてしまうんだよね。sudo -Eを使えばいいんだけど、大抵初回は忘れる。
参考リンク→https://github.com/Homebrew/legacy-homebrew/issues/29079