繁体   English   中英

为什么即使我安装了perl-DateTime RPM,当我使用DateTime模块时,“无法在@INC中找到Sub / Identify.pm”?

[英]Why do I get “Can't locate Sub/Identify.pm in @INC” when I use the DateTime module even though I installed the perl-DateTime RPM?

我试图在CentOS中使用模块DateTime所以我安装它像这样:

yum install perl-DateTime

然后添加use DateTime到我的脚本,但我收到此错误:

Can't locate Sub/Identify.pm in @INC (@INC contains:
/root/perl5/lib/perl5/5.16.3/x86_64-linux-thread-multi
/root/perl5/lib/perl5/5.16.3
/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 .) at
/root/perl5/lib/perl5/namespace/autoclean.pm line 200. Compilation
failed in require at /root/perl5/lib/perl5/DateTime/Locale.pm line 11.
BEGIN failed--compilation aborted at
/root/perl5/lib/perl5/DateTime/Locale.pm line 11. Compilation failed
in require at /usr/lib64/perl5/vendor_perl/DateTime.pm line 45. BEGIN
failed--compilation aborted at
/usr/lib64/perl5/vendor_perl/DateTime.pm line 45. Compilation failed
in require at myscript.pl line 8. BEGIN failed--compilation aborted
at myscript.pl line 8.

我不知道发生了什么事。 我已经通过CPAN安装了几个软件包。 这是我第一次尝试yum install并且它不起作用。 有任何想法吗?

TL; DR

这就是混合通过包管理器和CPAN安装的模块的一个坏主意。


看起来你用yum安装了DateTime,但是用CPAN安装了DateTime :: Locale。 您可以通过在错误消息中跟踪依赖关系链来看到这一点:

/root/perl5/lib/perl5/namespace/autoclean.pm --> CPAN
/root/perl5/lib/perl5/DateTime/Locale.pm     --> CPAN
/usr/lib64/perl5/vendor_perl/DateTime.pm     --> yum

最新版本的namespace :: autoclean依赖于Sub :: Identify,它似乎在@INC缺失。

那么yum安装了一个缺少依赖项的包吗? 不,当namespace :: autoclean不是依赖项时,它安装了旧版本的DateTime :: Locale:

$ cpan -D DateTime::Locale | grep -oP '[\d.]+(?=\s+up)'     # newest version
1.14
$ yum info perl-DateTime-Locale | grep -oP 'Version\D+\K.+' # yum version
0.45
$ rpm -q --requires perl-DateTime-Locale | grep autoclean
$

但是由于你将/root/perl5/lib/perl5放在@INC的系统perl目录之前,你正在加载CPAN安装的版本,它需要namespace :: autoclean和Sub :: Identify。 当然,百胜没有办法知道这一点。

我不确定为什么Sub :: Identify丢失了......你可能已经删除了它,或者它可能只是安装在@INC之外。 可以尝试使用CPAN重新安装它,但最好是:

  • @INC删除/root/perl5/*并仅使用yum在系统perl中安装模块
  • 使用perlbrewplenv创建的perl您自己的本地安装,并安装有CPAN模块

暂无
暂无

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

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