2010年8月 5日

Perlのモジュールを色んな場所にインストールする - 続き

  1. モジュールのインストール先を指定する

  2. モジュールの読み込み先を指定する方法は前回の記事で解説しました。次はモジュールのインストール先の指定のお話です。

    自分で作成したモジュールであれば、自分で読み込みたいパスにモジュールを配置すればOKです。では、CPANなどで配布されているモジュールを、任意の場所にインストールにはどうすれば良いのでしょう。

    いくつか方法が有ります。順に説明していきます。

    1. INSTALL_BASE引数を指定する

    2. 最初はモジュールのビルド時にINSTALL_BASEという引数でパスを指定する方法です。

      CPANモジュールのJSONモジュールを例に説明します。

      $ wget http://search.cpan.org/CPAN/authors/id/M/MA/MAKAMAKA/JSON-2.21.tar.gz
      $ tar xvf JSON-2.21.tar.gz 
      $ cd JSON-2.21
      $ perl Makefile.PL INSTALL_BASE=~/perl5/
      $ make
      $ make install
      JSON.pmは、「INSTALL_BASE引数で指定したパス」+「lib/perl5/」配下にインストールされています。
      この指定例でいけば「~/perl5/lib/perl5/JSON.pm」になります。

      JSON.pmが、Makefileを作成する際に「INSTALL_BASE」で指定したパス配下(~/perl5/lib/perl5/lib/JSON.pm)にインストールされました。

      JSONモジュールはMakefile.PLからMakefileを作成するのに、ExtUtils::MakeMakerというモジュールを使っています。モジュールのインストール時にINSTALL_BASE引数が指定されていれば、ExtUtils::MakeMakerがその場所にインストールしてくれるという訳です。

      Perlのモジュールインストールには、makeコマンドを使わないModule::Buildというモジュールもよく使われますが、こちらもINSTALL_BASE引数を参照してくれます(なぜか小文字で指定する様です)。

      Module::Buildの場合は、Buildコマンドの引数に指定します。

      $ ./Build install_base=~/perl5/
      の様な指定方法になります。

      ExtUtils::MakeMakerでINSTALL_BASEがサポートされたのはバージョン6.31以降なのでそれより古いバージョンを使っている場合はバージョンアップが必要です。ExtUtils::MakeMakerでは昔からインストール先を指定するのにPREFIXという引数も使う事ができましたが、こちらはバージョン番号や、site_perl等のディレクトリを作るというPerl標準のライブラリ構成に合わせたインストールが行われます。しかし、FAQを読むとこれから学ぶ人は使わない方がいいと書かれていますので、ExtUtils::MakeMakerが古い場合はバージョンアップした方が良さそうです。

    3. cpanコマンドでインストール先を指定する

    4. CPANモジュールをインストールする時にはやはりcpanコマンドを使った方が依存関係も自動的に解決してくれるので便利です。

      ExtUtils::MakeMakerとModule::Buildは、それぞれ専用の環境変数が指定されていると、インストール先をそこに変える事ができます。CPANコマンドでは、上記のモジュールがインストールに使われているので、環境変数を設定する事でインストール先を指定することができます。

      ExtUtils::MakeMakerの場合は、PERL_MM_OPTという環境変数に設定します。

      bashだったら、

      $ export PERL_MM_OPT='INSTALL_BASE=~/perl5/'
      となります。

      Module::Buildの場合は、.modulebuildrcというファイルにインストール先を指定し、.modulebuildrc自体の場所を環境変数に設定します。

      例えば、.modulebuildrc の中身は、

      install  --install_base  /Users/{ユーザー名}/perl5
      
      になっています。この場所を環境変数で
      export MODULEBUILDRC="/Users/{ユーザー名}/.modulebuildrc"
      
      の様に指定します。

      ただ、2種類の環境変数を自分でメンテナンスするのは少し面倒です。そこで最近はもっと便利な方法がいくつか有ります。cpanmと、local::libです。

というところで、やっぱり書ききれなかった。また次回...

トラックバックURL

このエントリーのトラックバックURL:
http://ash.roova.jp/mt/mt-tb.cgi/207

コメントする