YAMAGUCHI::weblog

海水パンツとゴーグルで、巨万の富を築きました。カリブの怪物、フリーアルバイター瞳です。

pythonbrewで複数バージョンのPython環境を管理する

はじめに

こんにちは、Python界の情弱です。長らくvirtualenv & virtualenvwrapperでやってきたんですが、そろそろPython2系とPython3系を共存させるに当たってvirtualenvでちまちま環境を切り替えたり細かいオプション設定したりするのにつかれたのでpythonbrewを使うことにしました。

設定

上のエントリにあるとおりに設定すれば済む話ではある。

下準備

これまでvirtualenv使ってたので、各環境のパッケージ等をpip freezeしておく。過去にvirtualenv使ってない人はここは飛ばして大丈夫。

% workon dev
(dev) % pip freeze > ~/tmp/tmplist.txt
% cat tmplist.txt | awk '{FS="="}{print $1}' > ~/tmp/dev.txt
pythonbrewのインストール
% git clone https://github.com/utahta/pythonbrew
% cd pythonbrew
% chmod +x pythonbrew-install
% ./pythonbrew-install

これで$HOME/.pythonbrewにインストールされた。次回以降の起動のためにrcファイルに記述を追加。僕は.dotfilesというレポジトリで環境設定ファイルを管理してるので、そんな感じの設定にする。

% cp ./pythonbrew/etc/bashrc ~/.dotfiles/.pythonbrewrc
% ln -s ~/.dotfiles/.pythonbrewrc ~/.pythonbrewrc
% vim .zshrc
+ source .pythonbrewrc
各バージョンのPythonのインストール

すでにPythonをインストールしている場合にはそれにシンボリックリンクを貼ることも出来るみたいだけど、一括管理のために.pythonbrewにインストールすることにした。
まず必要なパッケージ等は準備しておく。Ubuntu 10.04 LTSであればこんな感じ。

% sudo apt-get install zlib1g zlib1g-dev tk-dev tcl-dev libsqlite3-dev libncurses5-dev libgdbm-dev libreadline6-dev libbz2-dev libdb4.6-dev libssl-dev

そしてPythonのインストール。

% pythonbrew install --force 3.2.1
% pythonbrew install --force 2.7.2
% pythonbrew switch 3.2.1
virtualenvを使って仮想環境を作る

pythonbrew内のvirtualenvを使って仮想環境を作ります。サブコマンドのvenvの後にcreateで作成、useでいわゆるworkonになる。ここではdevという名前の仮想環境を作る。

% pybrew venv create dev
% pybrew venv use dev

先程保存しておいたパッケージリストを参照してパッケージをインストールする。

% pip install --upgrade -r ~/tmp/dev.txt

仮想環境から抜けるときはなぜかサブコマンドなしでdeactivateで。
他にもPythonの開発環境については次の書籍が詳しいと思う。ビープラウドの方々、出版おめでとうございます&執筆お疲れ様でした。

エキスパートPythonプログラミング

エキスパートPythonプログラミング

  • 作者: Tarek Ziade,稲田直哉,渋川よしき,清水川貴之,森本哲也
  • 出版社/メーカー: アスキー・メディアワークス
  • 発売日: 2010/05/28
  • メディア: 大型本
  • 購入: 30人 クリック: 696回
  • この商品を含むブログ (83件) を見る

Pythonプロフェッショナルプログラミング

Pythonプロフェッショナルプログラミング

追記

新しいバージョンを入れようとして「ありません」と言われたら、.pythonbrew/etc/config.cfg を更新する必要があるみたいです。たとえばPython2.7.3の場合は

[Python-2.7.3]
url = http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz
latest = True

でもこれURLとバージョンが完全に対応してるからファイルになければ見に行くようにしたらいいのに。パッチ書いてpull requestしよう。

追記2 (2012.05.25)

pythonbrewは作者さんがディスコン宣言してるので、僕はもう使っていません。それにvirtualenvwrapperがPython3対応してるのでそれで十分だと思っています。詳しくは下記のリンクを参考にしてください。