Reputation: 3114
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?
Upvotes: 69
Views: 139625
Reputation: 1230
I strongly recommend Perlbrew. It lets you run multiple versions of Perl, install packages, hack Perl internals if you want to, all regular user permissions.
Upvotes: 3
Reputation: 132913
Other answers already on Stackoverflow:
From perlfaq8:
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 mbuildpl_arg '--install_base /mydir/perl'
cpan> o conf commit
Upvotes: 72
Reputation: 156
For Makefile.PL-based distributions, use the INSTALL_BASE option when generating Makefiles:
perl Makefile.PL INSTALL_BASE=/mydir/perl
Upvotes: 3
Reputation: 594
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
Upvotes: 45
Reputation: 42684
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.
Upvotes: 20