MacとHomebrewとPythonの悩み

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です