如何在没有安装权限的情况下使用新的Perl模块?

Jer*_*rks 28 permissions installation perl cpan module

这是我的情况:我对Perl几乎一无所知,但它是移植机器上唯一可用的语言.我只有权在我的本地工作区写入,而不是Perl安装位置.我需要使用CPAN 的Parallel :: ForkManager Perl模块

如何在不进行集中安装的情况下使用此Parallel :: ForkManager?是否有我可以设置的环境变量,因此它位于?

谢谢

JD

bri*_*foy 35

perlfaq8:我如何保留自己的模块/库目录?:

构建模块时,请告诉Perl在哪里安装模块.

对于基于C的分发,在生成Makefile时使用INSTALL_BASE选项:

perl Makefile.PL INSTALL_BASE=/mydir/perl
Run Code Online (Sandbox Code Playgroud)

您可以在CPAN.pm配置中进行设置,以便在使用CPAN.pm shell时模块自动安装在您的私有库目录中:

% cpan
cpan> o conf makepl_arg INSTALL_BASE=/mydir/perl
cpan> o conf commit
Run Code Online (Sandbox Code Playgroud)

对于基于C的发行版,请使用--install_base选项:

perl Build.PL --install_base /mydir/perl
Run Code Online (Sandbox Code Playgroud)

您可以配置CPAN.pm以自动使用此选项:

% cpan
cpan> o conf mbuild_arg --install_base /mydir/perl
cpan> o conf commit
Run Code Online (Sandbox Code Playgroud)

INSTALL_BASE告诉这些工具将模块放入F.有关如何运行新安装的模块的详细信息,请参阅L.

但是,INSTALL_BASE有一个警告,因为它的行为与旧版ExtUtils :: MakeMaker所倡导的PREFIX和LIB设置不同.INSTALL_BASE不支持在同一目录下为多个Perl版本或不同体系结构安装模块.您应该考虑是否真的需要它,如果这样做,请使用较旧的PREFIX和LIB设置.有关更多详细信息,请参阅ExtUtils :: Makemaker文档.


mik*_*grb 6

查看Mark Dominus 发表的这篇文章

摘抄:

  • 在构建Makefile时设置PREFIX = X.
  • 在构建Makefile时设置INSTALLDIRS = vendor和VENDORPREFIX = X.
    • 或者可能代替VENDORPREFIX,您需要设置INSTALLVENDORLIB或其他东西
    • 或者也许不是在构建Makefile时设置它们,而是在运行make install目标时需要设置它们
  • 在构建Makefile时设置LIB = X/lib
  • 使用PAR
  • 使用local :: lib

Mark还在他的博客中提供了另一个解决方案,它需要更多的空间来进行desribe,但归结为运行make和make test但不是make install然后使用blib /中的东西.


Cha*_*raG 5

将包形式CPAN下载到文件夹:

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
Run Code Online (Sandbox Code Playgroud)

在此之前在家中创建一个文件夹来存储本地模块,现在进入下载文件夹并运行以下cmmands:

perl Makefile.PL PREFIX=/home/username/myModules
make
make test
make install
Run Code Online (Sandbox Code Playgroud)

从已安装的文件夹/ home/username/myModules获取ForkManager的路径,找到Parallel文件夹并获取完整路径.

现在在你的perl文件中将这些放在开头

use lib '/home/username/myModules/bin.../Parallel';
use parallel::ForkManager;
Run Code Online (Sandbox Code Playgroud)

- 应该这样做.