plenvとpyenvに乗り換えた
今までPerlはperlbrew、Pythonはpythonbrewを使っていたのだけど、最近なんとかenvみたいなのが流行ってるらしいので乗り換えてみた。
乗り換え動機
plenv
https://github.com/tokuhirom/plenv
基本的にはINSTALLATIONの通りにやればいい。rbenvなんかと同じ。
ただ、CentOS6に入れようとしたら、plenvを動かしてるシステムのPerlのModule::Metadataversion.pmが古かったらしくてエラーが出たので、それだけ新しく入れ直す必要があった。(23:11訂正)
# CentOS6の場合 $ sudo yum install perl-CPAN $ sudo cpan version # cloneしてきてシェルの設定に追加 $ git clone git://github.com/tokuhirom/plenv.git ~/.plenv $ echo 'export PATH="$HOME/.plenv/bin:$PATH"' >> ~/.zprofile $ echo 'eval "$(plenv init -)"' >> ~/.zshrc # シェルを起動し直す $ exec $SHELL -l
設定部分は模範的な感じで書いたけど、各自の環境に合わせて設定する。
自分の場合.zshenvとかで色々仕掛けしてたりするので上記のようにはしなかった。
んで、とりあえず使ってみる。
$ plenv available
perl-5.17.8
perl-5.16.2
perl-5.14.3
perl-5.12.5
perl-5.10.1
perl-5.8.9
perl-5.6.2
perl5.005_04
perl5.004_05
perl5.003_07
$ plenv install 5.16.2
$ plenv global 5.16.2
# cpanmもコマンド一発で入れてくれるようだ
$ plenv install-cpanm
$ plenv rehash
plenv migrate-modulesでモジュールを別環境に移行できたり便利そう。
carton
https://github.com/miyagawa/carton
RubyでいうところのBundlerのようなやつ。
プロジェクト(ディレクトリ)毎にモジュールのインストールとバージョンの固定ができる。
$ cpanm Module::Install carton $ plenv rehash
で、なんかこんなMakefile.PLを書いといて、
use inc::Module::Install; name 'MyApp'; version '1.0'; requires 'Plack', 0.9980; requires 'Starman', 0.2000; WriteAll;
$ carton install
とかすると./local以下にインストールされて、carton.lockが生成される。
$ carton install JSON
みたいに直接インストールすることもできる。
pyenv
つづいてPython。こちらもインストール手順はほぼ同じ。
# cloneしてきてシェルの設定に追加 $ git clone git://github.com/yyuu/pyenv.git .pyenv $ echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.zprofile $ echo 'eval "$(pyenv init -)"' >> ~/.zshrc # シェルを起動し直す $ exec $SHELL -l
使ってみる。
$ pyenv install -l Available versions: 2.5 2.5.1 2.5.2 : : # インストール。distributeとpipも入れてくれる $ pyenv install 3.3.0 $ pyenv gloabl 3.3.0
virtualenv
https://github.com/yyuu/pyenv-virtualenv
あとvirtualenvをpyenvのプラグイン化したやつがあるので、ついでに入れておく。
$ cd ~/.pyenv/plugins
$ git clone git://github.com/yyuu/pyenv-virtualenv.git
pyenv virtualenvコマンドが増えるので、これで環境が作れるようになる。
$ pyenv virtualenv --distribute 3.3.0 env330
.pyenv/versionsの下に指定した名前でできるので、それに切り替えて使うことになるみたい。
$ ls ~/.pyenv/versions 3.3.0/ env330/ $ mkdir projA $ cd projA $ pyenv local env330
似たようなの増えてきた
というわけで、rbenv, plenv, pyenvの環境が出来上がった。
rbenvとpyenvは似てるけど、plenvは中身は結構違ってる印象。
しかし、この手のやつどんどん増えてくるけど、統合的な仕組み作って、各言語用のレイヤを追加していって……みたいな形にできないかなぁ。
Twitterで誰かが「llenv init ruby perl pythonみたいに出来ればいいのに」みたいなこと言ってたし。
*1:今はpythonzっていうforkなのかな?