pythonbrew を使った環境構築

Intro

Python にモジュールをインストールすることは easy_install などを使えば簡単にできるが、さてそれをアンインストールしようとなると一筋縄ではいかない。一度インストールしたものを消すことができないと、Python を使っていくうちにどんどん環境が肥大化していき、場合によっては相互に干渉しあってモジュールが使えなくなったりしかねない。なので、新しいモジュールを軽く試したいときなどは、仮想的な Python の環境を作ってその上のみで作業し、使い終わった環境はまとめて包んでゴミ箱にポイしたい。それを実現するモジュールとして virtualenv やそのラッパ virtualenvwrapper があるが、それらに加えて複数バージョンの Python を切り替える機能やモジュールを自動的に(バッチ的に)インストールする機能を備えた pythonbrew というソフトがあるのでこれを使いましょう。
pythonbrewのコマンドとオプション一覧 を見て、どんなことができるか知っておくと良い。
流れとしては、

  1. pythonbrew で複数バージョンの Python を切り替え
  2. pythonbrew venv で、上で選択したバージョンの Python 上に仮想環境(汚してもよい環境)を作る
  3. pythonbrew buildout で、上で作った仮想環境上にモジュールを一発で素早くインストール

てな感じである。……だよね? なんか多くの解説で venv より buildout が先に書かれているから不安なんだけど、venv 上に buildout する利用方法が主に想定されているよね?

Install pythonbrew

とりあえず 公式 github の Installation を読むといいと思う。

$ curl -kL http://xrl.us/pythonbrewinstall | bash

としたあとに、.bashrc の末尾に

[[ -s $HOME/.pythonbrew/etc/bashrc ]] && source $HOME/.pythonbrew/etc/bashrc

と書き込む。

pythonbrew

Install Pythons

$ pythonbrew install 2.7.2 3.2

Switch Pythons

$ pythonbrew switch 2.7.2  # ターミナルを落としても、python -> python 2.7.2 を使い続ける。
$ pythonbrew use 3.2  # ターミナルを落とすまでは 3.2 を使う。

Disable pythonbrew

$ pythonbrew off  # Enable するときは switch を使う。

Else

$PATH にシンボリックリンクを張る symlink コマンドとか、1つのコードを複数の Python で動かす py コマンドとかがある。詳細は github の README を参照。

pythonbrew venv

仮想環境を構築する。名前をつけて切り替えることができる。virtualenv 公式 とか virtualenvwrapper 公式 とか virtualenvwrapper 日本語ドキュメント とかも見ておくとよいかもしれない。

$ pythonbrew venv create projectname --no-site-packages  # 既にインストールされているモジュールを含めない。
$ pythonbrew venv list -a  # -a オプションをつけると、すべてのバージョンにおける仮想環境をリストアップする。
$ pythonbrew venv use projectname
$ pythonbrew venv delete projectname
$ deactivate  # 仮想環境から抜ける

とか。
仮想環境を使っている間は、シェルの頭に (projectname) と付く。シェルから抜けると仮想環境からも抜けてしまうので注意*1
ちなみに virtualenv 自体についての解説は、たとえば ここ とかを参照。これを見る限りだと、virtualenv だけでもわりと満足できそうな能力を持っていることがわかる。とくに Windows では pythonbrew は動かないと思うので、virtualenv を使うしかないのかなって感じ。

pythonbrew buildout

Buildout 公式 は若干わかりづらいので、このあたり を参考に。つまり buildout.cfg というファイルに欲しいモジュールを書いてから $ pythonbrew buildout とすると、ひとつひとつのモジュールを手で入れることなく一発で環境が整う、ということだと思う。buildout に関してはちゃんと使ったわけではないので後で追記するかもしれない。

参考

*1:これってたとえば、あるプログラムを動かす環境を venv で作ったとして、そのプログラムを cron か何かで回したい時は、地の環境にもう一度作りなおさないとダメってこと? まぁその手間を省くために buildout があるのだろうけど、「このプログラムをこのバージョンのこの仮想環境上で動かしたい」という要求に答えるような仕組みがあってもいいはずなのでは。たとえば pythonbrew venv use projectname py hoge.py みたいに使えたらいいなーと考えている。どうやらできないっぽいが。