繁体   English   中英

perl cpan模块安装

[英]perl cpan module installation

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

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

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

我发现有问题的服务器上,perl -V显示以下内容:

作为根:

%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运行conf init,或者直接编辑/root/.cpan/CPAN/MyConfig.pm和/home/user/.cpan/CPAN/MyConfig,但不太确定我需要什么确切的编辑做。

谢谢,

由于可以将cron任务定义为与“系统”相关的任务,因此我将按照@ikegami的建议进行操作,并坚持使用系统perl并使用程序包管理器来保持用户之间环境的一致性。 最好不要使用root/root :如果root正在安装到其$ HOME,则最好使用系统软件包。

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

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

  • -Idirectory

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM