perl cpan模块安装

时间:2015-01-08 18:20:55

标签: perl module cpan

我有一台服务器,我已经安装了一些perl模块。我通过CPAN安装了前几个,即perl -MCPAN -e'安装Module :: Name'作为非root用户。

然后我遇到了一些问题,刚开始通过sudo或root安装它们。

我昨晚通过cron作业的一些输出发现,有些脚本失败了,因为他们无法在@INC数组中找到模块。

我发现在相关服务器上,perl -V显示以下内容:

以root身份:

%ENV:
  PERL5LIB="/root/perl5/lib/perl5:"
  PERL_LOCAL_LIB_ROOT=":/root/perl5"
  PERL_MB_OPT="--install_base /root/perl5"
  PERL_MM_OPT="INSTALL_BASE=/root/perl5"
@INC:
  /root/perl5/lib/perl5/x86_64-linux-thread-multi
  /root/perl5/lib/perl5
  /usr/local/lib64/perl5
  /usr/local/share/perl5
  /usr/lib64/perl5/vendor_perl
  /usr/share/perl5/vendor_perl
  /usr/lib64/perl5
  /usr/share/perl5

以及作为非root用户:

%ENV:
  PERL5LIB="/home/user/perl5/lib/perl5:"
  PERL_LOCAL_LIB_ROOT=":/home/user/perl5"
  PERL_MB_OPT="--install_base /home/user/perl5"
  PERL_MM_OPT="INSTALL_BASE=/home/user/perl5"
@INC:
  /home/user/perl5/lib/perl5/x86_64-linux-thread-multi
  /home/user/perl5/lib/perl5
  /usr/local/lib64/perl5
  /usr/local/share/perl5
  /usr/lib64/perl5/vendor_perl
  /usr/share/perl5/vendor_perl
  /usr/lib64/perl5
  /usr/share/perl5

我检查了另一台服务器,其中perl模块的安装从未出现过问题,并且它显示相同的输出,无论是以非root用户还是root运行,并且只有@INC,没有$ ENV定义。

@INC:
  /usr/local/lib64/perl5
  /usr/local/share/perl5
  /usr/lib64/perl5/vendor_perl
  /usr/share/perl5/vendor_perl
  /usr/lib64/perl5
  /usr/share/perl5

所以我的问题是,如何在服务器上配置CPAN我遇到问题,因为不同的用户没有不同的环境和@INC值。我更确切地说它只有一个可由所有人访问的perl模块的默认系统位置。我假设我需要从CPAN shell运行o conf init,或直接编辑/root/.cpan/CPAN/MyConfig.pm和/home/user/.cpan/CPAN/MyConfig,但不太确定我需要哪些精确的编辑制作。

谢谢,

1 个答案:

答案 0 :(得分:0)

因为cron任务可以被定义为" system"相关的我会像@ikegami建议并坚持使用系统perl并使用包管理器来保持用户之间的环境一致。最好将 root /root排除在外:如果 root 正在安装到他们的$ HOME,那么您也可以使用系统包

如果您要为cron创建自定义脚本并以用户身份运行它们,那么您可以使用perlbrewlocal::lib为该用户创建一致的perl环境(或多个)你似乎已经安装了)和cpanminus(可以与perlbrew一起安装并与之无缝地工作)。

作为快速解决方案,您可以使用@INC扩展您的-I(但非root用户显然无法访问/root)和%ENV与其他开关和环境变量。有关其中的一些内容,请参阅perlrun - 例如

  • -Idirectory

    -I指定的目录前置于模块的搜索路径(@INC)。