perlモジュールのinstallにcpanmを使う
当サイトのblogのエントリーで検索ワードが多いのはCPANなんですがこの古い記事はperl5.6時代に書いた記事(多分10年近く前だと思う)で今時のperl使いにお勧めできるものではありません。
2010年2月にあの miyagawa さんが書いた cpanminus が非常に素晴らしいので CPAN::shell を捨てて App-cpanminus を積極的に利用しましょう。
と言うことでcpanに関連して新しい記事を書いてみました。
CPAN::shell の欠点
- 設定が面倒
- 動作が遅い(cpanmと比較して)
- 多くのメモリが必要(制約のきついレンタルサーバで使うのは無理)
- 依存するモジュールが多い
- 基本root権限が必要
cpanm の利点
- 一枚岩のプログラムで可搬性に優れる
- 高速で小メモリでも動作可能
- pluginで拡張できる
- local::lib と組み合わせるとユーザーランドに簡単にモジュールがinstallできる
cpanmが登場する以前はCPAN::shellを使うかtarballを取ってきてmakeするしか方法がありませんでしたが誰がどう見てもcpanm使わないと損だよね。
install方法
$ mkdir bin && cd ~/bin $ curl -LOk http://xrl.us/cpanm $ chmod +x cpanm
cpanm と合わせて local::lib も入れておくと便利です
$ cpanm local::lib
cpanm自身のupgrade
現在作者のmiyagawaさんがもの凄い勢いでcpanmのupgradeを行ってますので頻繁に行うことになります
$ cpanm --self-upgrade
cpanm を使ってモジュールの install
非常に多彩な方法で install ができます モジュール名だけを指定するとCPANと同じ動作をします 直接 tarball を指定できるのは便利かも
cpanm Module cpanm MIYAGAWA/Plack-1.0000.tar.gz cpanm ~/mydists/MyCompany-Framework-1.0.tar.gz cpanm http://example.com/MyModule-0.1.tar.gz cpanm http://github.com/miyagawa/Tatsumaki/tarball/master cpanm --interactive Task::Kensho
cpanm のオプション
# cpanm -h Usage: cpanm [options] Module [...] Options: -v,--verbose Turns on chatty output --interactive Turns on interactive configure (required for Task:: modules) -f,--force force install -n,--notest Do not run unit tests -S,--sudo sudo to run install commands --installdeps Only install dependencies --skip-installed Skip installation if you already have the latest version installed --disable-plugins Disable plugin loading Commands: --self-upgrade upgrades itself --look Download the tarball and open the directory with your shell --info Displays distribution info on CPAN --recent Show recently updated modules Examples: cpanm CGI # install CGI cpanm MIYAGAWA/Plack-0.99_05.tar.gz # full distribution name cpanm http://example.org/LDS/CGI.pm-3.20.tar.gz # install from URL cpanm ~/dists/MyCompany-Enterprise-1.00.tar.gz # install from a local file cpanm --interactive Task::Kensho # Configure interactively cpanm . # install from local directory cpanm --installdeps . # install all the deps for the current directory
build時のlogを見る
rootでcpanmを使った場合
# tail -f /root/.cpanm/build.log
ユーザ権限でcpanmを使った場合
$ tail -f ~/.cpanm/build.log
cpanm を使いユーザ権限でlocalにモジュールをインストール
ここでは
- デフォルトのモジュールのインストール先を指定 ~/extlib
- perlにライブラリの検索pathを指定 ~/extlib/lib/perl5等
- 追加したらログインし直すか $ source .bash_profile します
bash な方は .bash_profile 等に以下を追加
export PERL_CPANM_OPT="--local-lib=~/extlib" export PERL5LIB="$HOME/extlib/lib/perl5:$HOME/extlib/lib/perl5/i386-freebsd-64int:$PERL5LIB"
以降このユーザ権限でcpanm MODULE すると ~/extlib 以下に全てのモジュールがinstallされます
これ以外のディレクトリに入れたい場合は
$ cpanm -l /path/to/dirname MODULE
-lオプションで場所を指定する事で /path/to/dirname 以下に install できます
最後に
App-cpanminus の登場により CPAN::shell の役目はもう終えたと思われるので perlに標準で付くようになるといいなぁ・・・
CPAN::shellいままでありがとう。