如何将 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 模块安装到本地目录中?的主要内容,如果未能解决你的问题,请参考以下文章