如何将 CPAN 模块安装到本地目录中?

Posted

技术标签:

【中文标题】如何将 CPAN 模块安装到本地目录中?【英文标题】:How can I install a CPAN module into a local directory? 【发布时间】:2010-10-07 03:21:12 【问题描述】:

我使用的是托管 Linux 机器,所以我没有写入权限 进入/usr/lib目录。

当我尝试照常安装 CPAN 模块时:

perl Makefile.PL
make test
make install

该模块被提取到blib/lib/ 文件夹。我保留了use blib/lib/ModuleName,但编译器仍然说模块不能 成立。我尝试将 .pm 文件复制到本地目录并保留 require ModuleName 但它仍然给我一些错误。

如何将模块安装到其他目​​录并使用它?

【问题讨论】:

一般来说,您应该提供错误信息。 “一些错误”没有多大帮助。 How can I use a new Perl module without install permissions?的可能重复 IMPORTANT.. 某些模块使用 Build.PL 而不是 Makefile.PL(或用其中一种或另一种包装),在某些情况下,(如测试运行时),从/到安装带有空格的路径会混淆 MANIFEST 并导致测试失败,通常这只会在设置 RELEASE_TESTING 时发生,因此请确保它不在您的机器上。如果有这样的 MANIFEST 错误,那么可能还有其他人潜伏着,坚持使用没有空格的路径(空格、制表符、unispace 等) 【参考方案1】:

local::lib 会帮助你。它会说服“make install”(和“Build install”)安装到您可以写入的目录,它会告诉perl 如何获取这些模块。

一般来说,如果你想使用 blib/ 目录中的模块,你想说perl -Mblib ... 其中... 是你通常调用脚本的方式。

【讨论】:

真的建议您使用 local::lib。它会处理所有的小细节。 不幸的是,当我尝试安装它时,它未能通过“make test”。【参考方案2】:

我遇到了类似的问题,我什至无法安装 local::lib

我创建了一个安装程序,将模块安装在相对于 .pl 文件的某个位置

安装过程如下:

perl Makefile.PL PREFIX=./modulos
make
make install

然后,在需要模块的.pl文件中,在./中

use lib qw(./modulos/share/perl/5.8.8/); # You may need to change this path
use module::name;

其余文件(makefile.pl、module.pm 等)无需更改。

您可以调用 .pl 文件只需

perl file.pl

【讨论】:

没有理由修改您的脚本——设置 PERL5LIB 而不是使用use lib。 local::lib 会为你处理这些——按照它的指示,你应该没问题。 使用 INSTALL_BASE 而不是 PREFIX。 perl Makefile.PL INSTALL_BASE=/home/irraju/PadWalker 给了我这个错误“'INSTALL_BASE' 不是已知的 MakeMaker 参数名称。”甚至 PREFIX 选项也给了我同样的效果 "INSTALL_BASE 可以传递到 Makefile.PL 以更改模块的安装位置。INSTALL_BASE 更像其他人所说的“前缀”而不是 PREFIX。" ——perldoc.perl.org/ExtUtils/MakeMaker.html#INSTALL_BASE Perl v5.8.8 (perldoc.perl.org/5.8.8/ExtUtils/MakeMaker.html) 不支持 INSTALL_BASE 参数,它出现在 v5.8.9 (perldoc.perl.org/5.8.9/ExtUtils/MakeMaker.html) 中。【参考方案3】:

*** 上已有其他答案:

How do I install modules locally without root access... How can I use a new Perl module without install permissions?

来自 perlfaq8:


How do I keep my own module/library directory?

当你构建模块时,告诉 Perl 将模块安装在哪里。

对于基于 Makefile.PL 的发行版,在生成 Makefile 时使用 INSTALL_BASE 选项:

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

对于基于 Build.PL 的发行版,使用 --install_base 选项:

perl Build.PL --install_base /mydir/perl

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

% cpan
cpan> o conf mbuildpl_arg '--install_base /mydir/perl'
cpan> o conf commit

【讨论】:

我认为你应该加上引号:o conf mbuild_arg '--install_base /mydir/perl' 布莱恩,一个问题 - 你提供的链接告诉--install_base 参数被传递给perl Build.PL;但是mbuild_arg 是关于./Build 的参数。也许你的意思是mbuildpl_arg?还是perlfaq有错误? 我不再维护 perlfaq,所以你必须通过现在的任何过程来修补它。不过看起来你是对的。 我注意到 perlfaq 还没有修复,所以本着修复错误in the docs 的精神,当发现问题时,我只是创建了a pull request 来修补它。 ;) @trutane:如果有人还没有完成我的答案,也可以修补我的答案!通过编辑获取一些 *** 活动!【参考方案4】:

我强烈推荐Perlbrew。它允许您运行多个版本的 Perl、安装软件包、如果您愿意,可以破解 Perl 内部结构,以及所有常规用户权限。

【讨论】:

链接失效了吗?【参考方案5】:

对于基于 Makefile.PL 的发行版,在生成 Makefile 时使用 INSTALL_BASE 选项:

perl Makefile.PL INSTALL_BASE=/mydir/perl

【讨论】:

以上是关于如何将 CPAN 模块安装到本地目录中?的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在使用 perlbrew 时安装 CPAN 模块?

安装 CPAN 模块时如何指定外部库文件位置

如何安装PAMIE模块

我如何知道谁在 Centos 6 上安装了哪个 CPAN 模块以及何时安装?

卸载 cpan 安装的所有 perl 模块