気づいたらpythonbrewをプチハックしていて月曜の明け方に突入した件

なんか雨振ってきましたね。y_echoです、こんばんは。

先日

なんてエントリを書いた訳ですが、pythonbrewについて個人的に気になったことを調べてみました。

perlbrewの--asオプション相当のものが欲しいかも

同じバージョンでConfigureが異なる環境を用意したいパワーユーザさんはいそうですね。

先日のエントリを書いた後、あらためて

のマニュアルを読んでみたのですが、やはりそのようなオプションは今のところありませんでした。

環境変数PYTHONBREW_ROOT「を」pythonbrewで管理して欲しいかも

少し試してみたのですが、pythonbrewを

% export PYTHONBREW_ROOT=~/python/pythonbrew
% ./pythonbrew-install

のようにインストールした場合、自分でも.zshenvなどに

# .zshenv
export PYTHONBREW_ROOT=~/python/pythonbrew

しておく必要がありそうです。

一方、perlbrewはinitコマンドにて自動作成される~/.perlbrew/init

export PERLBREW_ROOT=/Users/y_echo/perl5/perlbrew

にインストール時設定の環境変数が保存され、.zshrcなどに取り込む${PERLBREW_ROOT}/etc/bashrcで

if [[ -f $HOME/.perlbrew/init ]]; then
    source $HOME/.perlbrew/init
fi

しているため、自前でexportする必要がありません。

...ちょっと待てよ、と

pythonbrewはperlbrewにインスパイアされたツールであり、ある程度同じことをやっているはずです。

なんで自前でやる必要があるんだーッ、とまたしてもカッとなりました。

まず、${PYTHONBREW_ROOT}/scripts/pythonbrew/define.pyのこの部分

import os

VERSION = "0.6.7"

if os.environ.has_key("PYTHONBREW_ROOT"):
    ROOT = os.environ["PYTHONBREW_ROOT"]
else:
    ROOT = os.path.join(os.environ["HOME"],".pythonbrew")

環境変数PYTHONBREW_ROOTがスクリプト全体に効いてきます。

また、perlbrew同様に.zshrcなどに取り込むための${PYTHONBREW_ROOT}/etc/bashrc

PATH_ROOT="/Users/y_echo/python/pythonbrew"
PATH_ETC="$PATH_ROOT/etc"

#...

__pythonbrew_set_current_path()
{
    if [[ -s "$PATH_ETC/current" ]] ; then
        source "$PATH_ETC/current"
    else
        __pythonbrew_set_default
    fi
    __pythonbrew_set_path
}

#...

# main
__pythonbrew_set_current_path

には、確かにインストール時設定の環境変数が反映されていますし、

# $PATH_ETC/current
PATH_PYTHONBREW="/Users/y_echo/python/pythonbrew/bin"

に関してもそうです。

...で、結局何が悪そうか

個人的な結論ですが、PYTHONBREW_ROOTをexportし忘れているのではないかと。

もちろん、どこかでexportするつもりで実装していたのに、という意味です。patchるとしたら、$PATH_ETC/currentにpythonbrewインストール時のPYTHONBREW_ROOTを吐くだけなら影響範囲小さそうですね(勘)。

ダメもとで書いて送ってみようかな...