Perlのperlbrewってツールが凄く使いやすくて羨ましかったので、Pythonで使えるpythonbrewってツールを作ってみました。

perlbrew?

perlbrewとはPerlをバージョン毎にインストールして、それらをswitchして使ったりできるツールのこと。
既存の環境を壊さずに最新のPerlを簡単に試すことができます。
PerlからCPANモジュールまでホームディレクトリ以下に全部インストールしてくれるので、自分専用のPerl環境を構築することができます。
perlbrewの作者の劉康民さんは、本当にすばらしいアイデアの持ち主。

pythonbrewとは

基本的にperlbrewをパクったと同じ思想なツール。
Pythonインタプリタのインストールから、それらの管理まで面倒をみてくれます。

例えば、一からPython2.6.6、2.5.5、2.4.6の環境を構築したいなーってとき、
pythonbrewを使えばたった数コマンドでいとも簡単に実現できます。

コマンドで示すと以下の通り。

# 2.6.6をインストール&2.6.6環境に変更
$ pythonbrew install 2.6.6
$ pythonbrew switch 2.6.6
 
# 2.5.5をインストール&2.5.5環境に変更
$ pythonbrew install 2.5.5
$ pythonbrew switch 2.5.5
 
# 2.4.6をインストール&2.4.6環境に変更
$ pythonbrew install 2.4.6
$ pythonbrew switch 2.4.6 
 
# 2.5.5環境に変える
$ pythonbrew switch 2.5.5
 
# 2.6.6環境に変える
$ pythonbrew switch 2.6.6

easy_installpipも一緒にインストールするので、初っぱなの環境構築するときとかに地味に便利です。

モダンなPythonの開発環境の構築方法さんでいうところの「インストール」〜「easy_installのインストール」までを補うツールって立ち位置な感じ。

virtualenvとの違いは?

一番の違いは、Pythonインタプリタのインストールから、それらの管理まで面倒をみる点です。

virtualenvは、Pythonインタプリタが存在することを前提としています。

pythonbrew と virtualenv の共存といったら烏滸がましいですが、
例えば、pythonbrew で一通りPythonインタプリタをインストールしてから、
virtualenvで環境を構築すると、少し楽・・・かもしれません。

コマンドで示すとこんな感じ。

# 2.6.6 と 2.5.5 をインストール
$ pythonbrew install 2.6.6
$ pythonbrew install 2.5.5
 
# 2.6.6 を標準の環境に設定。
$ pythonbrew switch 2.6.6
$ pip install virtualenv
 
# virtualenv を使って、2.6.6 環境のプロジェクトを作成
$ virtualenv hoge2.6.6-proj
 
# virtualenv を使って、2.5.5 環境のプロジェクトを作成
$ virtualenv -p ~/.pythonbrew/pythons/Python-2.5.5/bin/python hoge2.5.5-proj

1度、virtualenvを使い出したらそれで完結できるので、pythonbrew の出番は劇的に減りそうです。

使い方

インストール〜実行までを、コマンドを使って説明します。

まず、pythonbrew をインストールするために以下のコマンドを実行します。

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

これで、~/.pythonbrew に pythonbrew 一式がインストールされます。

インストール先を変えたい場合は、環境変数 PYTHONBREW_ROOT にパスを設定してから、./pythonbrew-installを実行します。

$ export PYTHONBREW_ROOT=/path/to/pythonbrew
$ ./pythonbrew-install

インストールが成功すると、パス設定用のファイルが作成されるので、画面の指示通りそれらを読み込むよう.bashrcや.cshrcに設定を加えます。

$ vi ~/.bashrc
source $HOME/.pythonbrew/etc/bashrc

保存したら設定を一度読み直します。

$ source ~/.bashrc

パスが通っているか確認します。

$ which pythonbrew
~/.pythonbrew/bin/pythonbrew

ここまでで、インストールは完了です。

続いて、pythonbrewを使ってPython-2.6.6をインストールします。

$ pythonbrew install 2.6.6

完了したら、インストールしたPythonインタプリタを有効にする為に、switch します。

$ pythonbrew switch 2.6.6
Switched to Python-2.6.6

これで、インストールしたPythonが有効になります。

$ python
Python 2.6.6 (r266:84292, Oct  4 2010, 00:38:36) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

後は、ご自由にどうぞ!

別バージョンのPythonインタプリタを使うときも、やることは同じです。

$ pythonbrew install 3.1.2
$ pythonbrew switch 3.1.2
Switched to Python-3.1.2

これで、Python-2.6.6 と Python-3.1.2 環境のできあがり!

Macユーザで

MacPorts を使ってるひとは、python_select てのもあります!

更新履歴

2010.11.13 バージョン 0.5 用に加筆修正しました。
2010.12.3 gitのhttps化に伴い、curlコマンドのオプションを修正しました。

ご意見・ご要望・バグ報告

などなどありましたら、GitHub の Issues やコメント欄やtwitterまでよろしくです。

関連エントリー:

pythonbrewで構築するPython開発環境

PyQtの環境づくり + MacOSX

pythonbrewで構築するPython環境 その2

Flask + Python 基礎

MacPortsで行うPythonのバージョン管理

  4 Responses to “Pythonのバージョンを管理するツール、pythonbrewを作ってみた”

  1. おそらくやりたいことは virtualenv と同様ではないでしょうか?
    http://labs.unoh.net/2009/12/2009python.html

  2. コメントありがとうございます。

    * 2010/10/19 返答内容を修正しました

    やりたいことは、virtualenvの上位層的な部分になります。

    pythonbrewは、Pythonインタプリタのインストールと、その管理をすることを目的としたツールです。

    pythonbrewでPythonインタプリタを一通りインストールしてから、
    virtualenvを使うとさらに便利・・・かもしれません。

  3. [...] This post was mentioned on Twitter by ItSANgo, sugitaro. sugitaro said: B!: / Pythonのバージョンを管理するツール、pythonbrewを作ってみた | NINXIT-BLOG http://htn.to/bz7WBb [...]

  4. こんにちわ。pythonbrewをありがたく利用させていただいているものです。

    バージョン 0.7.2 で

    https://github.com/utahta/pythonbrew/raw/master/stable-version.txt

    のなかに、「¥r」が含まれているようで、それが原因でpythonbrew-installでの
    インストールが巧くいかないという現象がありました。

    http://d.hatena.ne.jp/tell-k/20110503/1304432760

    お暇な時にでも見てもらえると助かります。よろしくお願いいたします。

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt=""> <pre lang="" line="" escaped="" highlight="">