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

我在一台没有root权限的Linux机器上。 我想通过CPAN将一些软件包安装到我的主目录中,以便在运行Perl时能够看到它。

我跑了cpan ,要求一些configuration选项。 它询问了一些目录,它提示~/perl为非root用户。 不过,当我尝试安装一个软件包时,在make install步骤中会失败,因为我没有对/usr/lib/perl5/whatever写权限。

我怎样才能configurationCPAN,使我可以安装软件包到我的主目录?

请参阅local :: lib 。

一旦你安装了,你可以做:

perl -MCPAN -Mlocal::lib -e 'CPAN::install(LWP)'

在perlfaq8中有这样的logging,这就是local :: lib为你所做的。

这也是一个经常被问到的StackOverflow问题:

  • 为什么安装某些CPAN模块需要root权限?
  • 如何在本地安装CPAN模块而无需root权限(DynaLoader.pm第229行错误)?
  • 如何告诉CPAN.pm将所有模块安装在特定的目录中?
  • 我怎样才能安装一个CPAN模块到本地目录?
  • 我怎样才能使用一个新的Perl模块没有安装权限?
  • 我怎样才能使用CPAN作为非root用户?
  • 我如何使用cpan工具安装本地模块?

好奇的是,当我使用你原来的问题标题(这是一个好的标题是寻找你的答案非常重要的原因之一)时,这些都没有build议。


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

当你build立模块时,告诉Perl在哪里安装模块。

如果你想自己安装模块,最简单的方法可能是local :: lib,你可以从CPAN下载。 它为您设置各种安装设置,并在您的程序中使用这些相同的设置。

如果你想要更多的灵活性,你需要configuration你的CPAN客户端为您的特定情况。

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

 perl Makefile.PL INSTALL_BASE=/mydir/perl 

你可以在你的CPAN.pmconfiguration中设置它,这样当你使用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 

你可以configurationCPAN.pm自动使用这个选项:

 % cpan cpan> o conf mbuild_arg "--install_base /mydir/perl" cpan> o conf commit 

INSTALL_BASE告诉这些工具把你的模块放到/ mydir / perl / lib / perl5中。 请参阅如何在运行时将目录添加到包含path(@INC)? 有关如何运行新安装的模块的详细信息。

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