cpanの使い方の整理

cpanのモジュール群を使いたいというのでperlを使い始めたんですが、肝心のcpanの使い方がイマイチ解っていなくて、いつも恐る恐る使っていたので、メモ代わりにまとめる事にしました。

まずはcpanコマンド自体の使い方等

  • 最初にする事

      # 最初にcpanコマンドを叩いた時にプロンプトに従って設定をした後に
      cpan> install Bundle::CPAN
      cpan> reload cpan
      

    これでヒストリとタブ補完が可能になる。

  • cpanの設定

    • 初期設定 (最初にcpanコマンド叩いた時のプロンプトを再度実行する)
        cpan> o conf init
        
    • 書込み

        cpan> o conf commit
        
    • 設定確認

        cpan> o conf
        
    • 個別設定

        cpan> o conf item $value
        
  • モジュールの更新

    • インストール済みモジュール一覧の表示

      $ find `perl -e 'print "@INC"'` -name '*.pm' -print
      
    • インストールされているモジュールのバージョンを調べる

        # .bashrc, .zshrcなどに以下の関数を追加する。
        function cpanv () {
          perl -M$1 -le "print \$$1::VERSION"
        }
        $ cpanv $module
      
    • 更新可能モジュール表示

         cpan> r # 一覧
       cpan> r module # 特定モジュール
       
    • 更新

          cpan> upgrade # すべて
        cpan> upgrade $module # 特定モジュール
      
  • 検索

    •    cpan> i /検索語/
       cpan> m /モジュール名/
       cpan> a /Author/
        
  • インストール

    • 通常インストール

        cpan> install $module (通常インストール)
      cpan> force install $module (強制インストール)
      cpan> (バージョンを指定してインストール)
        
    • バージョンを指定してインストール

      1. cpansearchで存在するバージョンを確認
      2. cpan> i module で表示されるCPAN_FILEのtar玉のバージョンを書換える
      3. cpan> install $CPAN_FILE

これでパッケージ管理コマンドとしてはある程度使えますが、まだ不十分です。

cpanモジュールが、頻繁に新しいバージョンがリリースされることもあり、特定のモジュールの複数のバージョンを使い分けたいという事がよくあります。

  • 特定のバージョンに依存したモジュールが存在している
  • 自分でモジュールを書き換えたい
  • 新しいバージョンのモジュールをテストしたい

先日あるモジュールをアップデートしたら、運用しているシステムが全く動かなくなったのでいよいよこの複数バージョンの使い分けは必須であると感じて、はてな人力検索で質問してみたところlocal::libというモジュールを紹介頂きました。以下ではlocal::libの使い方を書きます。

[ local::libの使い方 ]
簡易な使い方は以下になります。

  1. local::libを使用して必要な環境変数の出力とディレクトリの作成する
  2. 1で出力された環境変数を.bashrc, .zshrc等に書いて設定を反映させる
$ perl -Mlocal::lib
Attempting to create directory /home/taichino/perl5
Attempting to create file /home/taichino/perl5/.modulebuildrc
export MODULEBUILDRC="/home/taichino/perl5/.modulebuildrc"
export PERL_MM_OPT="INSTALL_BASE=/home/taichino/perl5"
export PERL5LIB="/home/taichino/perl5/lib/perl5:/home/taichino/perl5/lib/perl5/i386-linux-thread-multi"
export PATH="/home/taichino/perl5/bin:$PATH"
$ vim ~/.zshrc # これで上のexport文をすべてペーストする
$ source ~/.zshrc

要はcpanモジュールのインストールディレクトリを別に用意して、そのディレクトリをサーチパスの先頭に追加しているだけですね。別にlocal::libの代わりに手で同じ作業をしてもいいです。デフォルトでは~/perl5が新しいcpanのルートディレクトリといて設定されますが、-Mlocal::lib=~/path/to/dir で任意のディレクトリをインストールディレクトリに設定できます。これを利用すると1ユーザに対して複数のcpanディレクトリを作る事が出来ます。

動作確認の為、試しにArchive::Tarの更新をしてみました。

$ cpanv Archive::Tar
1.48
$ cpan
cpan> upgrade Archive::Tar
cpan> q
$ cpanv Archive::Tar
1.52
$ su -
# cpanv Archive::Tar
1.48

確かにローカルユーザでのみ新しいバージョンを使用できています。

1 thought on “cpanの使い方の整理”

Leave a Reply

Your email address will not be published. Required fields are marked *