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いままでありがとう。

created:

Back to top