Documentation/Perl modules/library without root

From systems
Jump to: navigation, search

See | local::lib
Once you have it installed, you can do following to install LWP for example:

   perl -MCPAN -Mlocal::lib -e 'CPAN::install(LWP)'

There's the way documented in perlfaq8, which is what local::lib is doing for you.

It's also a frequently asked StackOverflow question:

   Why does installing certain CPAN modules require root privilege?
   How can I install CPAN modules locally without root access (DynaLoader.pm line 229 error)?
   How do I tell CPAN.pm to install all modules in a specific directory?
   How can I install a CPAN module into a local directory?
   How can I use a new Perl module without install permissions?
   How can I use CPAN as a non-root user?
   How can I install local modules with the cpan tool?

Here is more details on how else this can be done.

How do I keep my own module/library directory?

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

If you want to install modules for your own use, the easiest way might be local::lib, which you can download from CPAN. It sets various installation settings for you, and uses those same settings within your programs.

If you want more flexibility, you need to configure your CPAN client for your particular situation.

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

INSTALL_BASE tells these tools to put your modules into /mydir/perl/lib/perl5. See How do I add a directory to my include path (@INC) at runtime? for details on how to run your newly installed modules.

There is one caveat with INSTALL_BASE, though, since it acts differently than the PREFIX and LIB settings that older versions of ExtUtils::MakeMaker advocated. INSTALL_BASE does not support installing modules for multiple versions of Perl or different architectures under the same directory. You should consider if you really want that , and if you do, use the older PREFIX and LIB settings. See the ExtUtils::Makemaker documentation for more details.