如何在没有安装权限的情况下使用新的 Perl 模块?
Posted
技术标签:
【中文标题】如何在没有安装权限的情况下使用新的 Perl 模块?【英文标题】:How can I use a new Perl module without install permissions? 【发布时间】:2010-09-20 02:01:43 【问题描述】:这是我的情况:我对 Perl 几乎一无所知,但它是移植机器上唯一可用的语言。我只有在我的本地工作区而不是 Perl 安装位置的权限。我需要使用 CPAN 中的 Parallel::ForkManager Perl 模块
如何在不进行集中安装的情况下使用此 Parallel::ForkManager?是否有我可以设置的环境变量以便找到它?
谢谢
京东
【问题讨论】:
How can I install CPAN modules locally without root access (DynaLoader.pm line 229 error)?的可能重复 【参考方案1】:来自perlfaq8: How do I keep my own module/library directory?:
当你构建模块时,告诉 Perl 将模块安装在哪里。
对于基于 C 的发行版,使用 INSTALL_BASE 选项 生成 Makefile 时:
perl Makefile.PL INSTALL_BASE=/mydir/perl
您可以在 CPAN.pm 配置中进行设置,以便自动安装模块 当您使用 CPAN.pm shell 时,在您的私有库目录中:
% cpan
cpan> o conf makepl_arg INSTALL_BASE=/mydir/perl
cpan> o conf commit
对于基于 C 的发行版,使用 --install_base 选项:
perl Build.PL --install_base /mydir/perl
您也可以将 CPAN.pm 配置为自动使用此选项:
% cpan
cpan> o conf mbuild_arg --install_base /mydir/perl
cpan> o conf commit
INSTALL_BASE 告诉这些工具将您的模块放入 F. 有关如何运行新的详细信息,请参阅 L 已安装的模块。
不过,INSTALL_BASE 有一个警告,因为它的作用是 不同于旧版本的 PREFIX 和 LIB 设置 ExtUtils::MakeMaker 提倡。 INSTALL_BASE 不支持 为多个版本的 Perl 或不同版本安装模块 同一目录下的架构。你应该考虑如果你 真的想要那个,如果你这样做,使用旧的 PREFIX 和 LIB 设置。有关详细信息,请参阅 ExtUtils::Makemaker 文档。
【讨论】:
【参考方案2】:从 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
在此之前在 home 中创建一个文件夹来存储您的本地模块,现在进入下载的文件夹并运行以下命令:
perl Makefile.PL PREFIX=/home/username/myModules
make
make test
make install
从安装的文件夹中获取 ForkManager 的路径,/home/username/myModules 并找到 Parallel 文件夹并获取此文件夹的完整路径。
现在在你的 perl 文件中把这些放在开头
use lib '/home/username/myModules/bin.../Parallel';
use parallel::ForkManager;
--应该可以的。
【讨论】:
【参考方案3】:查看 Mark Dominus 的 this post
摘录:
在构建 Makefile 时设置 PREFIX=X 在构建 Makefile 时设置 INSTALLDIRS=vendor 和 VENDORPREFIX=X 或者您可能需要设置 INSTALLVENDORLIB 或其他东西来代替 VENDORPREFIX 或者也许不是在构建 Makefile 时设置它们,而是在运行 make install 目标时设置它们 在构建 Makefile 时设置 LIB=X/lib 使用 PAR 使用本地::lib
Mark 在他的博客中还提供了另一个解决方案,它需要更多的空间来描述,但归结为运行 make 和 make test 而不是 make install 然后使用 blib/ 中的东西。
【讨论】:
没有理由乱搞供应商的东西。您应该保留 INSTALLDIRS 原样,“站点”对于本地安装的模块是正确的。并使用 INSTALL_BASE,而不是 PREFIX/LIB。【参考方案4】:在使用模块时,有 PERL5LIB 环境变量和命令行上的-I
。有告诉 CPAN 和 CPANPLUS 的机制。
CPAN手册的问题5中有信息(perldoc CPAN,或查看CPAN本身)。
【讨论】:
【参考方案5】:use lib 'directory';
use Parallel::ForkManager;
【讨论】:
【参考方案6】:您可以使用-I
(大写i)命令行开关,后跟放置模块的目录;或尝试使用“use lib”指令,后跟目录。
【讨论】:
【参考方案7】:Yes Even You Can Use CPAN
【讨论】:
【参考方案8】:perl Makefile.PL LIB=/my/perl_modules/lib/
make
make install
PERL5LIB=$PERL5LIB:/my/perl_modules/lib/
perl myperlcode.pl
【讨论】:
【参考方案9】:使用cpanm -l $DIR_NAME
选项。
【讨论】:
【参考方案10】:perlbrew
允许您使用本地 perl 并将其包安装到本地目录。
\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
另见https://opensource.com/article/18/7/perlbrew。
【讨论】:
【参考方案11】:考虑使用 cpanminus,this other thread 上的建议
【讨论】:
以上是关于如何在没有安装权限的情况下使用新的 Perl 模块?的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 root 访问权限的情况下安装 python 模块?
非[无]root权限 服务器 下安装perl以及perl模块--转载