GrowthForecastとか羨ましすぎるので、最近のPerlの環境はどうやってつくるのか調べた。
今回はplenv+cpanm+cartonという環境を構築します。
Rubyでいうところのplenv+gem+bundleという感じである。
環境はUbuntu 12.04.2 LTSとMac(Mountain Lion)での確認をしています。
plenv
まず、OSに付属しているPerlなどを利用して、わけわからないことになって、挫折するのがいつものパターン。
そこで、Perlを複数バージョンインストールして、OS付属のPerlとは別で管理できるplenvをインストールする。
Rubyでいうところのrbenvのようなもの。
CPANからインストールできるらしいけど、今回はGitでcloneしてインストールすることにする。
$ git clone git://github.com/tokuhirom/plenv.git ~/.plenv
次にplenvのコマンドなどにPATHを通す。利用しているshellにあわせて設定を追加する。
~/.zshrc
export PATH="$HOME/.plenv/bin:$PATH"
eval "$(plenv init -)"
以上を設定して、shellを再起動すればplenvコマンドが利用できます。
shellを再起動せずに、そのまま利用する為には
$ exec $SHELL -l
とする。
Perlのインストール
ここまででplenvコマンドが利用できるようになっているはずなので、導入できるPerlのバージョンを確認する。
$ plenv available
perl-5.17.8
perl-5.16.2
perl-5.14.3
perl-5.12.5perl-5.10.1
perl-5.8.9perl-5.6.2
perl5.005_04
perl5.004_05
perl5.003_07
Perlはx.y.zのy番号が奇数が開発版で偶数が安定版とのことなので、今回は5.16.2をインストールする。
$ plenv install 5.16.2 -Dusethreads
Creating /tmp/perl-build-20130216-13051013140(building directory)
Install 5.16.2 to /home/hirocaster/.plenv/versions/5.16.2
Fetching 5.16.2 as /tmp/XR9A5hH1Z9/perl-5.16.2.tar.bz2
..... 省略 .....
特に指定がなければ、今後は今回インストールした5.16.2を利用する設定をする。
$ plenv global 5.16.2
shellを再起動すれば…
$ perl -v
This is perl 5, version 16, subversion 2 (v5.16.2) built for i686-linux-thread-multi
無事に5.16.2が利用できる環境が構築できました。
Mac(Mountain Lion)の場合はエラーするので…
MacにOSに付属しているPerlのモジュールModule::Metadataのバージョンが低いため、plenv install中に下記の様にエラーを発生する。(homebrewからのインストールだったら、この辺の問題は解決してくれているのかな…?)
$ plenv install 5.16.2 -Dusethreads
Creating /var/folders/jg/kx4b7v1d2x792nk4kyrk7kx00000gn/T/perl-build-20130216-23142597760(building directory)
Install 5.16.2 to /Users/hirocaster/.plenv/versions/5.16.2
Fetching 5.16.2 as /var/folders/jg/kx4b7v1d2x792nk4kyrk7kx00000gn/T/Qi677TqPu3/perl-5.16.2.tar.bz2
Downloaded http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/perl-5.16.2.tar.bz2 to /var/folders/jg/kx4b7v1d2x792nk4kyrk7kx00000gn/T/Qi677TqPu3/perl-5.16.2.tar.bz2.
rm -f config.sh Policy.sh
/usr/bin/perl -Mlib=/Users/hirocaster/.plenv/bin/../share/plenv//lib/perl5/ /Users/hirocaster/.plenv/bin/../share/plenv/bin/patchperl
version version 0.87 required--this is only version 0.82 at /Users/hirocaster/.plenv/bin/../share/plenv//lib/perl5//Module/Metadata.pm line 20.
BEGIN failed--compilation aborted at /Users/hirocaster/.plenv/bin/../share/plenv//lib/perl5//Module/Metadata.pm line 20.
Compilation failed in require at /Users/hirocaster/.plenv/bin/../share/plenv//lib/perl5//Module/Load/Conditional.pm line 14.
BEGIN failed--compilation aborted at /Users/hirocaster/.plenv/bin/../share/plenv//lib/perl5//Module/Load/Conditional.pm line 14.
Compilation failed in require at /Users/hirocaster/.plenv/bin/../share/plenv//lib/perl5//IPC/Cmd.pm line 50.
BEGIN failed--compilation aborted at /Users/hirocaster/.plenv/bin/../share/plenv//lib/perl5//IPC/Cmd.pm line 50.
Compilation failed in require at /Users/hirocaster/.plenv/bin/../share/plenv//lib/perl5//Devel/PatchPerl.pm line 13.BEGIN failed--compilation aborted at /Users/hirocaster/.plenv/bin/../share/plenv//lib/perl5//Devel/PatchPerl.pm line 13.
Compilation failed in require at /Users/hirocaster/.plenv/bin/../share/plenv/bin/patchperl line 12.
BEGIN failed--compilation aborted at /Users/hirocaster/.plenv/bin/../share/plenv/bin/patchperl line 12.
Installation failure: /usr/bin/perl -Mlib=/Users/hirocaster/.plenv/bin/../share/plenv//lib/perl5/ /Users/hirocaster/.plenv/bin/../share/plenv/bin/patchperl at /Users/hirocaster/.plenv/bin/../share/plenv/lib/perl5/Perl/Build.pm line 208.
しかたないので、CPANモジュールをOS付属側にインストールする。
$ sudo /usr/bin/cpan
(省略)
cpan > install Module::Metadata
cpanm
最近はCPANのモジュールをcpanmで導入するらしいので、plenv環境で利用できるようにする。
plenvで専用のコマンドが用意されているので実行する。
$ plenv install-cpanm
Installing cpanm to current perl
--> Working on App::cpanminus
Fetching http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.5021.tar.gz ... OK
Configuring App-cpanminus-1.5021 ... OK
Building and testing App-cpanminus-1.5021 ... OK
Successfully installed App-cpanminus-1.5021
1 distribution installed
$ cpanm -v
cpanm (App::cpanminus) 1.5021 on perl 5.016002 built for i686-linux-thread-multi
Work directory is /home/hirocaster/.cpanm/work/1360988857.2069
You have make /usr/bin/make
You have /usr/bin/wget
You have /bin/tar: tar (GNU tar) 1.26
carton
RubyでいうところのBundlerのように、ディレクトリ以下に記述されたバージョンのCPANモジュールを管理してくれるcartonを導入する。
$ plenv exec cpanm Module::Install
$ plenv exec cpanm carton
$ plenv exec carton
Usage: carton <command>
where <command> is one of:
bundle, check, exec, help, install, list, show, tree, uninstall, update, usage, version
Run carton -h <command> for help.
cartonでModule::Installを利用するようなので、一緒にインストールする。
$ plenv exec cpanm Module::Install
plenv+cpanm+carton
これでplenv+cpanm+cartonで環境ができた。
plenvで好きなバージョンのPerlを利用して、cartonで指定した必要なCPANモジュールを導入すれば、OSのPerl環境に依存することなくPerlを動作させることができる。
Randal L. Schwartz、brian d foy、Tom Phoenix、近藤 嘉雪 |