我有一个服务器,我已经安装了一些perl模块。我通过CPAN安装了前几个,即perl -MCPAN -e'install Module :: Name'作为非root用户。perl cpan模块安装
然后我遇到了一些问题,并开始通过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用户身份运行,只有@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
所以我的问题是,我怎么能我有问题,没有针对不同用户不同环境和@INC值在服务器上配置CPAN。我宁愿它只有一个perl模块的默认系统位置,所有人都可以访问。我假设我需要从CPAN shell运行o conf init,或直接编辑/root/.cpan/CPAN/MyConfig.pm和/home/user/.cpan/CPAN/MyConfig,但不太确定我需要的确切编辑制造。
谢谢
@INC中的大部分在构建时都被硬编码到Perl中。 Env var像PERL5LIB被添加到它。 “cpan”与此无关。 – ikegami
安装它们的位置应该没有关系,因为它们将安装到的路径将位于'@ INC'中(除非您明确地覆盖此位置)。 – ikegami
请注意,您似乎正在使用系统Perl。你应该让系统的软件包管理器添加软件包,而不是'cpan'。否则可能会有风险。 – ikegami