LoginSignup
42
47

More than 5 years have passed since last update.

OSX上のpyenv/ndenvをanyenvにまとめた、direnvは試してない

Last updated at Posted at 2014-06-29

前回(かなり前)書いたMacでpyenv+virtualenvに続いて、ndenv環境も使ってて、あーそういえばと思ってanyenvにまとめたメモです。
諸先輩エントリとかぶってる恒例はお許しください。

*env系の特徴/メリットは、

  1. OSX上にそのまま構築して汚染したくない
  2. でもプロジェクトなりバージョンなりの違いによる複数環境ほしい
  3. けど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は環境変数操作という汎用性
「環境変数」という共通項が包括関係にあるだけで別物だ、と個人的には思いました。

参考

42
47
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
47