28

Here is my situation: I know almost nothing about Perl but it is the only language available on a porting machine. I only have permissions to write in my local work area and not the Perl install location. I need to use the Parallel::ForkManager Perl module from CPAN

How do I use this Parallel::ForkManager without doing a central install? Is there an environment variable that I can set so it is located?

Thanks

JD

brian d foy
  • 129,424
  • 31
  • 207
  • 592
Jeroen Dirks
  • 7,705
  • 12
  • 50
  • 70
  • possible duplicate of [How can I install CPAN modules locally without root access (DynaLoader.pm line 229 error)?](http://stackoverflow.com/questions/102850/how-can-i-install-cpan-modules-locally-without-root-access-dynaloader-pm-line-2) – martin clayton Nov 06 '11 at 12:37

11 Answers11

37

From perlfaq8: How do I keep my own module/library directory?:

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

For C-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 C-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 F. See L for details on how to run your newly installed moudles.

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.

brian d foy
  • 129,424
  • 31
  • 207
  • 592
7

Download package form CPAN to a folder:

wget http://search.cpan.org/CPAN/authors/id/S/SZ/SZABGAB/Parallel-ForkManager-1.06.tar.gz
gunzip Parallel-ForkManager-1.06.tar.gz
tar -xvf Parallel-ForkManager-1.06.tar

before this create a folder in home to store your local modules, now go into downloaded folder and run follwing cmmands:

perl Makefile.PL PREFIX=/home/username/myModules
make
make test
make install

get the path to ForkManager from the installed folder,/home/username/myModules and locate Parallel folder and get the full path to this.

Now in your perl file put these at the beggining

use lib '/home/username/myModules/bin.../Parallel';
use parallel::ForkManager;

--That should do it.

CSchulz
  • 10,882
  • 11
  • 60
  • 114
ChathuraG
  • 160
  • 2
  • 11
6

Check out this post from Mark Dominus

Excerpt:

  • Set PREFIX=X when building the Makefile
  • Set INSTALLDIRS=vendor and VENDORPREFIX=X when building the Makefile
    • Or maybe instead of VENDORPREFIX you need to set INSTALLVENDORLIB or something
    • Or maybe instead of setting them while building the Makefile you need to set them while running the make install target
  • Set LIB=X/lib when building the Makefile
  • Use PAR
  • Use local::lib

Mark also gives another solution in his blog which takes a bit more space to desribe but boils down to running make and make test but not make install and then using the stuff in blib/.

mikegrb
  • 1,183
  • 5
  • 13
  • There's no reason to mess with vendor stuff. You should leave INSTALLDIRS as it is, "site" is correct for locally installed modules. And use INSTALL_BASE, not PREFIX/LIB. – Schwern Nov 06 '08 at 06:36
4

There's the PERL5LIB environment variable, and -I on the command line when it comes to using the module. There are mechanisms for telling CPAN and CPANPLUS.

There is information in question 5 of the CPAN manual (perldoc CPAN, or look at CPAN itself).

brian d foy
  • 129,424
  • 31
  • 207
  • 592
Jonathan Leffler
  • 730,956
  • 141
  • 904
  • 1,278
3
use lib 'directory';
use Parallel::ForkManager;
brian d foy
  • 129,424
  • 31
  • 207
  • 592
dexedrine
  • 169
  • 2
  • This is too minimalistic. As a beginner, I tried using the `module-starter` from https://perldoc.perl.org/perlnewmod. I created a module Test-Module and for the love of everything that's holy I cannot use this module using this syntax, and I would expect it to be `use lib 'Test-Module'; use Test::Module;` – ashrasmun Jul 17 '23 at 12:22
2
perl Makefile.PL LIB=/my/perl_modules/lib/
make
make install
PERL5LIB=$PERL5LIB:/my/perl_modules/lib/
perl myperlcode.pl
Viraj
  • 21
  • 1
2

You can use the -I (capital i) command-line switch followed by the directory where you'll place the module; or try the "use lib" directive followed by the directory.

brian d foy
  • 129,424
  • 31
  • 207
  • 592
Alex
  • 2,366
  • 1
  • 15
  • 10
2

Yes Even You Can Use CPAN

daxim
  • 39,270
  • 4
  • 65
  • 132
Corion
  • 109
  • 1
  • 2
2

use cpanm -l $DIR_NAME option.

Tasos K.
  • 7,979
  • 7
  • 39
  • 63
1

perlbrew lets you use a local perl and installs it's packages to a local directory.

\curl -L https://install.perlbrew.pl | bash

perlbrew init  # put this in .bash_profile etc

perlbrew install 5.27.11

perlbrew switch 5.27.11

See also https://opensource.com/article/18/7/perlbrew.

serv-inc
  • 35,772
  • 9
  • 166
  • 188
0

Consider using cpanminus, a suggested on this other thread

Community
  • 1
  • 1
Juan A. Navarro
  • 10,595
  • 6
  • 48
  • 52