[英]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
创建自定义脚本并以用户身份运行它们,则可以使用perlbrew
, local::lib
(您似乎已经安装)和cpanminus
(可以为该用户)创建一个一致的perl环境(或多个)。并排安装,并与perlbrew
无缝配合)。
作为快速解决方案,您可以使用-I
扩展@INC
(但非root用户显然不能访问/root
),并使用其他开关和环境变量来扩展%ENV
。 请参阅perlrun
中的一些perlrun
- 例如 :
-Idirectory
-I指定的目录位于模块( @INC
)的搜索路径之前。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.