如何在没有安装权限的情况下使用新的 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 模块?的主要内容,如果未能解决你的问题,请参考以下文章

在不安装的情况下使用/加载新的python模块

如何在没有 root 访问权限的情况下安装 python 模块?

非[无]root权限 服务器 下安装perl以及perl模块--转载

如何在没有任何附加模块的情况下在迷你 Web 服务器中返回 json?

perl 下使用非root用户安装模块

python -- 在没有管理员权限的情况下手动安装下载的模块