为什么安装某些CPAN模块需要root权限?

Hai*_*ang 4 perl cpan

我需要在linux盒子里安装一些CPAN模块,我没有root权限.

安装Spreadsheet::WriteExcel进行得相当顺利.但尝试安装File::Find::Rule失败,警告"您没有安装到.....的权限",并提示"您可能必须su到root才能安装软件包"

我很困惑为什么有些CPAN模块安装需要root权限,而有些则不需要root权限?如果我真的想File::Find::Rule在linux框中使用,我可以选择任何解决方案吗?

谢谢.

Cha*_*ens 13

您是否CPAN已将该用户安装到您控制的目录中?

如果是这样,那么您可以运行使用Extutils::MakeMaker(最旧和最常见的构建/安装系统)的模块之间的差异Module::Build,和Module::Install.他们都有点怪癖.

这就是local::lib创建的原因.一旦你安装并安装它,你就不必再担心它了(除了那些想要把东西写到特定地方的流氓模块,即使它们被告知不要).

  • 为了阐明,构建机制可以全部安装到本地目录(您拥有)而不是系统目录(由于它们影响所有用户而是只读的),但是在新位置安装它们的机制不同.local :: lib知道如何处理它们,并且作为额外的奖励,更新你的Perl包含路径. (2认同)

Ala*_*avi 9

查看local :: lib以安装到其他位置.


bri*_*foy 8

来自perlfaq8:


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

构建模块时,请告诉Perl在哪里安装模块.

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

perl Makefile.PL INSTALL_BASE=/mydir/perl
Run Code Online (Sandbox Code Playgroud)

您可以在CPAN.pm配置中进行设置,以便在使用CPAN.pm shell时模块自动安装在您的私有库目录中:

% cpan
cpan> o conf makepl_arg INSTALL_BASE=/mydir/perl
cpan> o conf commit
Run Code Online (Sandbox Code Playgroud)

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

perl Build.PL --install_base /mydir/perl
Run Code Online (Sandbox Code Playgroud)

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

% cpan
cpan> o conf mbuild_arg --install_base /mydir/perl
cpan> o conf commit
Run Code Online (Sandbox Code Playgroud)