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


自己レスです。少し前に

なんてものを書いてたんですが、結局その後ノータッチ...


ホントやるやる詐欺はよくないですね。


で、ちょっとだけ言い訳をしておくと、思いついた直後、Pythonistaな友人に数点気になるところを教えてもらいました。

とりあえず、あまりconfigureをいじってPythonをビルドすることはなさそう、とのことで、"--as"オプションの需要はレアだろうというのが個人的結論です。

その後、Rubyのバージョン別管理ツール(という言葉が正しいかはおいといて)のrvmも試してみましたが、こちらもperlbrew同様に

source $HOME/.rvm/scripts/rvm

だけやればよかったので、環境変数PYTHONBREW_ROOTをツール側で設定する機能の方はあってもいいのかなと思います。


まぁ必要に迫られたらやる方向で...

気づいたら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を吐くだけなら影響範囲小さそうですね(勘)。

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

Homebrewな人がMercurialインストール時にカッとなった場合の対処方法

2連投、いい調子のy_echoです。こんばんは。

プライベートのとあるリポジトリを触るために必要なMercurialMacPortsやめたので、こいつも再インストールです。

brew install hg...あれ??

brew install mercurial · Issue #3825 · Homebrew/legacy-homebrew · GitHubとのことです。

ググるといくつか解決策が見つかるんですが、

  • もろもろを~/homebrewで管理するべく心に決めたばかり
  • Perlはperlbrewで~/perl5に気持ちよく管理中

なので、何の考えもなしに普通にインストールはしたくありません。よもや禿コマンドなんぞ...

ここらへんでカッとなったわけです。

pythonbrewでPython環境を管理すればよさそう

UTAHTAさん、素晴らしすぎます。

Pythonistaな方々はすでにご存知のツールかもしれませんが、ぼくはPython疎いので知りませんでした...perlbrewと同じ感覚で管理できるのであれば、学習コスト分もお得なので、今回はこいつで解決することにします。

pythonbrewをインストール

詳細なインストール手順は作者UTAHTAさんの記事など参考にしてもらうとして、ここではざっとログるのみとします。

[y_echo@MacBook ~]% curl -kLO https://github.com/utahta/pythonbrew/raw/master/pythonbrew-install
[y_echo@MacBook ~]% chmod +x ./pythonbrew-install
[y_echo@MacBook ~]% mkdir -p ~/python/pythonbrew    # perlbrewのdir構成と同じにする
[y_echo@MacBook ~]% export PYTHONBREW_ROOT=~/python/pythonbrew 
[y_echo@MacBook ~]% ./pythonbrew-install

これで~/python/pythonbrew/配下にごっそりインストールされたのを確認した後、.zshrcに以下を追記しておきます。

### .zshrc
...
## perlbrew
source $HOME/perl5/perlbrew/etc/bashrc    # 元からあるperlbrew用の設定

## pythonbrew
source $HOME/python/pythonbrew/etc/bashrc    # 今回新しく追加したpythonbrew用の設定

設定をzshに反映して確認してみます。

[y_echo@MacBook ~]% source ~/.zshrc
[y_echo@MacBook ~]% which pythonbrew 
pythonbrew () {
        __pythonbrew_find_command "$@"
        case $command_name in
                (use) __pythonbrew_use "$@" ;;
                (switch) __pythonbrew_switch "$@" ;;
                (off) __pythonbrew_off "$@" ;;
                (update) __pythonbrew_update "$@" ;;
                (*) command pythonbrew "$@" ;;
        esac
        builtin hash -r
}

よさそうです。

PythonMercurialをインストール

とりあえずPythonは2.7.1にしました。

[y_echo@MacBook ~]% pythonbrew install 2.7.1
[y_echo@MacBook ~]% pythonbrew switch Python-2.7.1
[y_echo@MacBook ~]% which python
/Users/y_echo/python/pythonbrew/pythons/Python-2.7.1/bin/python

今更ながらですが、インストール時perlbrewみたいにas指定できるのであれば、適宜しておいた方が良さそうですね。switch時のタイプ量減りますし、「pythonbrew switch Python-x.x.x」って何か許せない...
追記です。githubのマニュアル読むと、switchするときはバージョン指定(つまり数字のみ)だけでもいけるみたいですね。ごめんなさいです。

最後にMercurialをインストールします。

[y_echo@MacBook ~]% which pip
/Users/y_echo/python/pythonbrew/pythons/Python-2.7.1/bin/pip
[y_echo@MacBook ~]% pip install Mercurial
[y_echo@MacBook ~]% which hg
/Users/y_echo/python/pythonbrew/pythons/Python-2.7.1/bin/hg

ということで、だいぶ寄り道した感がありますが、気持ちよく管理したいという目的は達成することができました。

補足

Pythonistaな方々はこの後virtualenvで仮想環境を構築するようです。

Term::ReadLine::Gnu...というよりperlshのインストールメモ

サッカーアジア杯、日本優勝しましたね。サッカー観戦日に記事を書くy_echoです。どうもこんばんは。

最近~/homebrew、~/perl5/perlbrewな開発環境に再構築したんですが、perlshインストール時に少し手作業が必要だったのでメモっときます。

perlshはPerlインタラクティブシェル

perl interactive shell」でググるといくつか他のものも発見できますが、ぼくはWEB-DB PRESS*1の記事(by id:naoyaさん)でその存在を知ったperlshを使ってます。

[y_echo@MacBook ~]% perlsh
main[1]$ use Data::Dumper;
main[2]$ $dumped = { foo => 'bar' };
HASH(0x10093edc8)
main[3]$ print Dumper($dumped);
$VAR1 = {
          'foo' => 'bar'
        };
1
main[4]$ 

こんな感じです。たまーに使う程度ですが、あったらあったで便利なときもあります。

このperlsh、Term::ReadLine::Gnuのサンプルとしてディストリビューションに含まれているので、まずはTerm::ReadLine::Gnuをインストールします。

Term::ReadLine::Gnuのインストール

とりあえずcpanmすると

[y_echo@MacBook ~]% cpanm perlsh
! Finding perlsh on cpanmetadb failed.
--> Working on perlsh
Fetching http://search.cpan.org/CPAN/authors/id/H/HA/HAYASHI/Term-ReadLine-Gnu-1.20.tar.gz ... OK
Configuring Term-ReadLine-Gnu-1.20 ... N/A
! Configure failed for Term-ReadLine-Gnu-1.20. See /Users/y_echo/.cpanm/build.log for details.
[y_echo@MacBook ~]% 

通りません。「perlshでも検索してくれるんですね。かしこい!」というのは置いておいてbuild.logを見ると

...
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
The libreadline you are using is the libedit library.  Use the GNU Readline Library.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
...

ということで、GNU Readlineが入っていませんでした。GNU ReadlineのHombrew Formulaはデフォルトで含まれているので

[y_echo@MacBook ~]% brew install readline
[y_echo@MacBook ~]% brew link readline

とします。なお、インストール時に「BSDのlibreadlineが云々...もし必要なら云々」と言われるため、brew linkして~/homebrew/libにライブラリのリンクを貼っておきます*2

ここで再びcpanmするのですが、GNU Readlineがいわゆるデフォルトパスにないので、途中で自前configureします。

[y_echo@MacBook ~]% cpanm --prompt Term::ReadLine::Gnu
--> Working on Term::ReadLine::Gnu
Fetching http://search.cpan.org/CPAN/authors/id/H/HA/HAYASHI/Term-ReadLine-Gnu-1.20.tar.gz ... OK
Configuring Term-ReadLine-Gnu-1.20 ... Configuring Term-ReadLine-Gnu failed.
You can s)kip, r)etry or l)ook ? [s] l
Entering /Users/y_echo/.cpanm/work/1296331256.12924/Term-ReadLine-Gnu-1.20 with /bin/zsh
[y_echo@MacBook ~/.cpanm/work/1296331256.12924/Term-ReadLine-Gnu-1.20]% 

INSTALLを読むとprefixだけいじればよさそうです。

[y_echo@MacBook ~/.cpanm/work/1296331256.12924/Term-ReadLine-Gnu-1.20]% perl Makefile.PL --prefix=~/homebrew/
...
Writing Makefile for Term::ReadLine::Gnu
[y_echo@MacBook ~/.cpanm/work/1296331256.12924/Term-ReadLine-Gnu-1.20]% exit
Configuring Term-ReadLine-Gnu failed.
You can s)kip, r)etry or l)ook ? [s] s
...
Successfully reinstalled Term-ReadLine-Gnu-1.20

perlshをディストリビューションからサルベージ

perlsh自体は自分でcpとかします。ちなみに、ぼくは以下の場所に置くことにしました。

[y_echo@MacBook ~]% cp ~/.cpanm/latest-build/Term-ReadLine-Gnu-1.20/eg/perlsh ~/perl5/perlbrew/perls/5.12.2/bin/perlsh

最後に、perlshのshebangを/usr/local/bin/perlから適当なものへ変更します。

#!/usr/bin/env perl

perlbrewを使ってる場合のshebangについては、@lestrratさんのエントリhttp://mt.endeworks.jp/d-6/2010/08/perlbrew.htmlなどを読んでみてください。

*1:だいぶ前のやつです

*2:後々不要ならbrew unlinkしてください

zshでCtrl-AとかCtrl-Eとか急に効かなくなって発狂しそうになったのでメモ

おとといくらいから困ってました

日韓戦のPKではらはらしてます*1。y_echoです、こんばんは。


zsh でいつの間にか Ctrl+R とか Ctrl+A とかきかなくなっていた - 肉とビールとパンケーキ by @sotarok


そうですか

bindkey -e

ですか。でも、今使ってる.zshrcでわざわざ設定してなかったんだけどなぁ...まったくどのタイミングで変わっちゃったんだろう。

*1:勝ちましたね! 川島が神過ぎた...

Homebrew formula for tscreen

こんばんは

Homebrew使い始めました。y_echoです。

ググればどこかにありそうですが、Homebrew覚えるついでに書いたのでさらしておきます。

# tmuxはデフォでformula入ってたけど、GNU Screenやtscreenは入ってないようですね

注意

なお、初回実行時はmake install中にこけます。それ以降はヌルっと通ります。明日直すので許してください。
追記: brew uninstall後、~/Library/Caches/Homebrewのキャッシュを消去し再現を試みたところ、普通にヌルっと通りました。tscreen.rbに手は入れてないんだけどな...何が差分なんでしょう...

tscreen.rb

require 'formula'

class Tscreen <Formula
  url 'http://www.steve.org.uk/Software/tscreen/dist/tscreen-0.4.9.tar.gz'
  md5 '12303c84a93a78f1c44441323ba38845'
  homepage 'http://www.steve.org.uk/Software/tscreen/'

  def install
    system "./configure", "--prefix=#{prefix}", "--enable-colors256"
    system "make"
    system "make install"
  end
end

OSXを10.6.6にアップデートしたのでApp Store管理に移行したアプリたちメモ

なんか年末から急激に寒くなりましたね。y-echoです、こんにちは。

移行じゃないものもありますが、とりあえず自分用にメモ。あとあと追記で増えるかもです。

へー、インストールするとそのままアプリケーション配下に入って、Dockにも自動登録ですか。