virtualenvwrapperでプロンプトに仮想環境名を表示させないようにする(暫定版)

virtualenv + virtualenvwrapperをデフォルトで使っている場合、アクティブな仮想環境がプロンプトに表示されます。


仮想環境名が python27-env の場合
(python27-env)[lapislazuli]%

今使っている仮想環境名が分かってこれはこれで便利だけど、自分はプロンプトに余計なものが表示されるのが好きではないです。
なので、表示させないようにしました。

その方法を紹介。

環境変数で設定しているだろうと思ったので、envコマンドを実行してみたら、PS1に仮想環境名を含めた名前を設定しているようでした。


(python27-env)[lapislazuli]% env                                                  [~/.virtualenvs]
...
(中略)
...
VIRTUAL_ENV=/Users/lapislazuli/.virtualenvs/python27-env
PS1=(python27-env)[%n]%(!.#.%%) 
...

virtualenvwrapperが提供しているコマンドはスクリプトなので、$WORKON_HOME配下にそれっぽいスクリプトがあると思い、grepしてみたらやっぱりありました。


(python27-env)[lapislazuli]% find . -name "*" -exec grep -Hn "PS1" {} \;          [~/.virtualenvs] 
./python27-env/bin/activate:24:    if [ -n "$_OLD_VIRTUAL_PS1" ] ; then
./python27-env/bin/activate:25:        PS1="$_OLD_VIRTUAL_PS1"
./python27-env/bin/activate:26:        export PS1
./python27-env/bin/activate:27:        unset _OLD_VIRTUAL_PS1
./python27-env/bin/activate:56:    _OLD_VIRTUAL_PS1="$PS1"
./python27-env/bin/activate:58:        PS1="$PS1"
./python27-env/bin/activate:63:        PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1"
./python27-env/bin/activate:65:        PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1"
./python27-env/bin/activate:68:    export PS1

どうやら、activateっていうスクリプトの中でPS1環境変数に仮想環境名入りの文字列を設定しているみたいです。

PS1に代入しているところをコメントアウトしたらプロンプトに仮想環境名が表示されなくなりました。


(python27-env)[lapislazuli]% workon python27-env                                               [~] 
[lapislazuli]%                                                                                 [~] 

追記

ブログ記事を書きながら少し調べていたら、activateスクリプトを修正するのではなく、$WORKON_HOME直下にあるpostactivateやpostmkvirtualenvあたりをいじるのがもっと適切な方法らしいことが分かったので、記事を書きました。