Macにpythonbrew+virtualenvでPython環境を作ってみた

RubyPerlときたので残るPythonについてもpythonbrewとvirtualenvで環境を整えてみた。いい加減内容がテンプレ的で飽きてきたけどw
PythonSnow Leopardでは2.6.1なので2.7とか3.2が使いたいよねーってことで。
タイトルには「Macで〜」って入ってるけど、pythonbrew自体はUNIX系の環境で使えます。


pythonbrewっていうのは、複数のPythonバージョンを簡単にインストールしたり切り替えたりできるようにするツールで、RubyでいえばRVM、Perlでいえばperlbrewみたいなもん。*1
これを使えばOS標準の環境も汚さないし、2.6系、2.7系、3系とかプロジェクトで使用中のバージョンと最新版とか色々な複数の環境を簡単に共存させて使い分けることができる。ステキ!


pythonbrewを使うとこんな感じでサクサク環境を使い分けることができるようになる。

pythonbrew install 2.7.2  ←Python-2.7.2をインストール
pythonbrew install 3.2    ←Python-3.2をインストール

pythonbrew switch 2.7.2   ←Python-2.7.2に切り替え
pythonbrew switch 3.2     ←Python-3.2に切り替え


virtualenvっていうのは、Pythonの新しい独立した環境を構築して自由に切り替えて使えるようにするツール。
pythonbrewと何が違うのかというと、pythonbrewはPythonのインストールから管理してくれるのに対して、virtualenvは既存の実行環境を元にして新しい仮想環境を作ってくれる点が異なる。


virtualenvと、あとそれを便利にするvirtualenvwrapperっていうのを使うとこんな感じでサクサク環境を使い分けることができるようになる。

mkvirtualenv -p /path/to/python-2.6 foo       ←2.6をベースにfooという環境を作成
mkvirtualenv -p /path/to/python-2.6 foo2      ←2.6をベースにfoo2という環境を作成
mkvirtualenv -p /path/to/python-3.2 bar       ←3.2をベースにbarという環境を作成

workon foo     ←foo環境に切り替え
workon bar     ←bar環境に切り替え
deactivate     ←virtualenvの環境から抜けてOS標準に戻る


どっちかでいいんじゃないかって気もするけど、そう思うんならそれでいいんだと思う。
とりあえずpythonbrewで新しいインタプリタをインストールして、virtualenvで用途別にぽこぽこ環境を増やしていくというのが流行りらしい(?)のでそれに倣ってみる。

pythonbrewのインストール

pythonbrewのインストール方法は公式サイトに書いてあるコマンドを叩けば簡単に入る。


GitHub - utahta/pythonbrew: Python Environment manager

curl -kLO https://github.com/utahta/pythonbrew/raw/master/pythonbrew-install
chmod +x pythonbrew-install
./pythonbrew-install


流れとしてはこんな感じ。

  1. インストールスクリプトを落としてシェルで実行
  2. $HOME/.pythonbrew/etc/bashrcを.bash_profileとか.bashrcで読み込むようにする

perlbrewと同じだね。
これで$HOME/.pythonbrewにpythonbrewの環境ができあがる。

pythonbrewに関するコマンド

pythonbrewで入れることのできるバージョン一覧

pythonbrew list -k


pythonbrewのアップデート

pythonbrew update

これでpythonbrewが最新になる。

Pythonのインストール

Pythonのインストール

pythonbrew install 2.7.2

これでPython-2.7.2がインストールされる。


別名をつけてインストール

pythonbrew install --as=mypython 2.7.2

これでPython-2.7.2がmypythonという名前でインストールされる。


configureオプションを指定する

pythonbrew install --configure="CC=gcc_4.1" 2.7.2


アンインストール

pythonbrew uninstall 2.7.2

Pythonbrewを切り替える

入ってるPython一覧

pythonbrew list

これでインストールされているPythonの一覧が表示される。


Pythonを切り替える

pythonbrew switch 2.7.2

これで2.7.2を使うためのPATHとかその他の環境変数が切り替わったので、今すぐPython-2.7.2が使える状態になる。
RVMとは逆、perlbrewと同じで永続的に切り替わった状態になる。


現在のシェルだけ切り替える

pythonbrew use 2.7.2

切り替え状態はこのシェルだけ。


OS標準のPythonに戻す

pythonbrew off

これでperlbrewで入れたやつじゃない環境に戻る。

複数のPythonでまとめて実行

pythonbrewにはインストールしてあるPythonでまとめて実行する機能がある。
これを利用すると書いたプログラムが他のバージョンでもちゃんと動くか一発でテストできる。


まとめて実行

pythonbrew py hello.py

pythonbrewでインストールした全Pythonで実行される。


特定のバージョンで実行

pythonbrew py -p 2.6.6 -p 2.7.2 hello.py

2.6.6と2.7.2で実行される。


リンクを張る

pythonbrew symlink

こうするとpy2.6とかpy2.7.2みたいなリンクが.pythonbrew/binに出来るので手軽に実行出来るようになる。
ただしpythonbrew offするとリンクも消えてしまうみたい。


あと、実はpythonbrewはpybrewというコマンド名でも実行できる。

virtualenvとvirtualenvwrapper

続けてvirtualenvのインストール。
とりあえずどれでもいいのでvirtualenvを入れたい環境にswitchする。

pythonbrew switch 2.7.2


pipでvirtualenvとvirtualenvwrapperをインストール。
pythonbrewによってeasy_installとpipもインストールされている。

pip virtualenv virtualenvwrapper


.bashrcとかに環境変数VIRTUALENVWRAPPER_PYTHONを設定する。

VIRTUALENVWRAPPER_PYTHON=$HOME/.pythonbrew/pythons/Python-2.7.2/bin/python

pythonbrew symlinkでできたpy2.7.2とかを指定するのがいいっぽいんだけど、pythonbrew offすると消えちゃうので直に指定してみた。


.bashrcとかでvirtualenvwrapper.shを読み込む。

source $HOME/.pythonbrew/pythons/Python-2.7.2/bin/virtualenvwrapper.sh

これもpythonbrew symlink -d 2.7.2 virtualenvwrapper.shとかでできたのを指定するっぽいんだけど(ry

virtualenvで環境を操作する

まー、冒頭のサンプルの通り。
それ以外に一覧を表示するlsvirtualenvとか、環境を削除するrmvirtualenvとか色々ある。
詳しくは公式ドキュメントのコマンドリファレンスを参照。

*1:perlbrewにインスパイアされてできたらしい。