前回(かなり前)書いたMacでpyenv+virtualenvに続いて、ndenv環境も使ってて、あーそういえばと思ってanyenvにまとめたメモです。
諸先輩エントリとかぶってる恒例はお許しください。
*env系の特徴/メリットは、
- OSX上にそのまま構築して汚染したくない
- でもプロジェクトなりバージョンなりの違いによる複数環境ほしい
- けどVirtualBox/Vagrant等でがんばりたくない
というわがままを$HOME以下にまるくおさめることで解決を試みるいいものだと個人的には思います。
環境
- OSX 10.9.3
anyenv
インストール
※既存の*envとかあれば削除しておきます。
$ git clone https://github.com/riywo/anyenv ~/.anyenv
設定
.bashrcとか.zshrcとかそのあたりに
# anyenv
if [ -d $HOME/.anyenv ] ; then
export PATH="$HOME/.anyenv/bin:$PATH"
eval "$(anyenv init -)"
# tmux対応
for D in `\ls $HOME/.anyenv/envs`
do
export PATH="$HOME/.anyenv/envs/$D/shims:$PATH"
done
fi
tmux対応と銘打ってる箇所、ls
で環境探してますが、私は下記のようなエイリアス貼ってるので、コマンド名にバックスラッシュつけて、このときだけエイリアスを無効化してます。
こうしないと私の場合、エイリアスが先に定義される順序になってて、echo $PATH
が大惨事になってたので。
$ alias ls
ls='ls -alG'
最後に一応シェルを再起動しておきます。
$ exec $SHELL -l
プラグインインストール
*envのupdateプラグインもインストールしておくことにしました。
$ mkdir -p $(anyenv root)/plugins
$ git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update
アップデート方法は
$ anyenv update
使い方
*envっていうけど具体的にどれが網羅されているのでしょう。
$ anyenv install -l
Available **envs:
Renv
crenv
denv
erlenv
exenv
goenv
hsenv
jenv
luaenv
ndenv
nenv
nodenv
phpenv
plenv
pyenv
rbenv
sbtenv
scalaenv
だそうです。
ひとまずPythonとNode.jsの環境があればいいので、
$ anyenv install pyenv
$ anyenv install ndenv
$ exec $SHELL -l
これで*env環境そろったので、各言語の必要バージョンをインストールしていきます。ここではなんとなくそれぞれ2バージョンくらい。
$ pyenv install 2.7.7
$ pyenv install 3.4.1
$ ndenv install 0.10.29
$ ndenv install 0.11.13
$ anyenv versions
ndenv:
0.10.29
0.11.13
pyenv:
* system (set by ~/.anyenv/envs/pyenv/version)
2.7.7
3.4.1
pyenv/ndenvそれぞれマルチバージョン環境ができました。
あとはサブコマンドglobal/localを使ってそれぞれ適用する範囲を決めていけばいいのかなと。
ひとまずシステムワイドだけ宣言しちゃいます。
$ pyenv global 2.7.7; ndenv global 0.10.29
$ anyenv versions
ndenv:
* 0.10.29 (set by ~/.anyenv/envs/ndenv/version)
0.11.13
pyenv:
system
* 2.7.7 (set by ~/.anyenv/envs/pyenv/version)
3.4.1
pipやnpmも大丈夫。
$ which pip npm
~/.anyenv/envs/pyenv/shims/pip
~/.anyenv/envs/ndenv/shims/npm
今回メモしたかった主内容はこれでおしまいです。
[おまけ]pyenv-virtualenvは?
Macでpyenv+virtualenvのようにHomebrew経由でインストールするのと違うので、yyuu/pyenv-virtualenvを直接インストールします。
$ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.anyenv/envs/pyenv/plugins/pyenv-virtualenv
$ exec $SHELL -l
使えるようになりました。
$ pyenv virtualenv --version
pyenv-virtualenv 20140615 (virtualenv unknown)
[おまけ]ndenvのvirtualenv相当のものは?
npmが元々-gオプション有りでシステムワイド、無しでディレクトリ単位で構築という方法取れるので、これでいいかなと。
環境コピー、よりは少し手間ですけど、少しなので今回は妥協です。
感想
anyenv
一度覚えた*env系コマンドほぼそのまま使い回せるのでなんら苦労なく入り込めました。数も少ないですし。
しかしphpenvだけは腰が重い・・・
direnv
わざわざお題に書いて己を煽ってみたものの、direnvは結局試せてません。
ディレクトリ個別に環境変数を持つものらしく、cd
するたびに発動はかっこいい。
推測込みの個人感ですが、両者の得意とする領域が微妙に違っていて、比較とか無理っぽいです。
anyenvはマルチバージョン構築という目的特化
direnvは環境変数操作という汎用性
「環境変数」という共通項が包括関係にあるだけで別物だ、と個人的には思いました。