plenvとpyenvに乗り換えた

今までPerlはperlbrew、Pythonはpythonbrewを使っていたのだけど、最近なんとかenvみたいなのが流行ってるらしいので乗り換えてみた。


乗り換え動機

  • pythonbrewはメンテナンスされなくなったらしい*1
  • Rubyでrbenvを使ってるので同じようなやつで揃えたい

plenv

https://github.com/tokuhirom/plenv


基本的にはINSTALLATIONの通りにやればいい。rbenvなんかと同じ。
ただ、CentOS6に入れようとしたら、plenvを動かしてるシステムのPerlModule::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

https://github.com/yyuu/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なのかな?