Thursday, March 31, 2011

How can I install a CPAN module into a local directory?

I'm using a hosted Linux machine so I don't have permissions to write into the /usr/lib directory.

When I try to install a CPAN module by doing the usual:

perl Makefile.PL
make test
make install

That module is extracted to a blib/lib/ folder. I have kept use blib/lib/ModuleName but it still the compiler says module can not be found. I have tried copying the .pm file into local directory and kept require ModuleName but still it gives me some error.

How can I install a module into some other directory and use it?

From stackoverflow
  • local::lib will help you. It will convince "make install" (and "Build install") to install to a directory you can write to, and it will tell perl how to get at those modules.

    In general, if you want to use a module that is in a blib/ directory, you want to say perl -Mblib ... where ... is how you would normally invoke your script.

    melo : I **really** recommend that you use local::lib. It takes care of all the little details.
  • I had a similar problem, where I couldn't even install local::lib

    I created an installer that installed the module somewhere relative to the .pl files

    The install goes like:

    perl Makefile.PL PREFIX=./modulos
    make
    make install
    

    Then, in the .pl file that requires the module, which is in ./

    use lib qw(./modulos/share/perl/5.8.8/); # You may need to change this path
    use module::name;
    

    The rest of the files (makefile.pl, module.pm, etc) require no changes.

    You can call the .pl file with just

    perl file.pl
    
    jrockway : There is no reason to modify your script -- set PERL5LIB instead of using `use lib`. local::lib takes care of this for you -- follow its instructions and you should be fine.
    brian d foy : use INSTALL_BASE instead of PREFIX.
    ram : perl Makefile.PL INSTALL_BASE=/home/irraju/PadWalker gave me this error "'INSTALL_BASE' is not a known MakeMaker parameter name." Even PREFIX option gave me the same
  • Other answers already on Stackoverflow:

    From perlfaq8:


    How do I keep my own module/library directory?

    When you build modules, tell Perl where to install the modules.

    For Makefile.PL-based distributions, use the INSTALL_BASE option when generating Makefiles:

    perl Makefile.PL INSTALL_BASE=/mydir/perl
    

    You can set this in your CPAN.pm configuration so modules automatically install in your private library directory when you use the CPAN.pm shell:

    % cpan
    cpan> o conf makepl_arg INSTALL_BASE=/mydir/perl
    cpan> o conf commit
    

    For Build.PL-based distributions, use the --install_base option:

    perl Build.PL --install_base /mydir/perl
    

    You can configure CPAN.pm to automatically use this option too:

    % cpan
    cpan> o conf mbuild_arg --install_base /mydir/perl
    cpan> o conf commit
    

0 comments:

Post a Comment