CPAN模块声称要安装,但不要

时间:2014-11-05 18:58:11

标签: xml perl cpan

通过VirtualBox运行UBUNTU 14.04。

执行脚本时,出现以下错误:

Can't locate XML/Simple.pm in @INC (@INC contains:... 

现在,当我检查@INC中的目录时,它们确实不包含XML/Simple.pm

然后我尝试通过cpan

安装它
sudo cpan XML::Simple

它告诉我:

XML::Simple is up to date (2.20).

,根据perl不正确,因为

的输出
perl -e "use XML::Simple "

Can't locate XML/Simple.pm in @INC (@INC contains:

那么,我错过了什么?

3 个答案:

答案 0 :(得分:3)

在Linux系统上安装Perl模块的另一种方法是从分发存储库。在Debian / Ubuntu系统上,将CPAN分发名称转换为apt包名称的一般规则是:

  1. 将模块名称转换为小写
  2. 将'::'转换为' - '
  3. 添加'lib'前缀和'-perl'后缀
  4. 因此,XML :: Simple的包名称为:libxml-simple-perl,您可以使用以下命令安装它:

    sudo apt-get install libxml-simple-perl
    

    这些规则有例外,但您始终可以通过Perl模块名称进行搜索:

    apt-cache search XML::Simple
    

    您不会从发行版的软件包存储库中获取该模块的绝对最新版本,但是对于稳定的(有些人可能会说“奄奄一息”)模块,例如XML :: Simple,通常无关紧要。

    如果您确实安装了多个版本的Perl,那么从发行版的软件包存储库安装通常只会使软件包可用于/usr/bin

    中的系统Perl

答案 1 :(得分:1)

一般情况下,您不应该混淆系统perl

使用

$ which perl

$ sudo which perl

查看每个perl的生活位置。

答案 2 :(得分:1)

作为系统管理员或应用程序开发人员,您通常会遇到一个常见问题。在开发应用程序时,您可能总是需要最新的和最新的模块,而不是需要分发的模块。但即使您对Linux分发版本中的版本很好,有时您也会遇到需要特定Perl模块的问题,而且它不包含在您的发行版中。

解决该问题的通常方法只是调用let cpan XML::Simple并下载并安装最新模块。

但是当你这样做时,你正在搞乱Linux发行版的软件包系统。假设您已经从包系统安装了XML :: Simple。您的cpan命令现在将更新已安装的版本并将其替换为较新的版本。所有这一切都很好,直到您的Linux发行版为libxml-simple-perl发送更新。可能发生的事情是您的新版本将恢复为旧版本。

因为所有Perl模块通常都依赖于其他Perl模块,所以install命令也可以更新许多其他Perl模块。

所有这些行为都可能导致错误。无论是在您编写的应用程序中,还是在您的发行版中使用的应用程序中。

要“解决”这个问题,通常最好的方法是让系统Perl完全独立。从源代码编译自己的Perl版本。 Perl版本比它有自己的perl库,你可以直接从CPAN安装而不会弄乱System Perl。

现在要做到这一点非常简单,他们存在一个名为Perlbrew

的工具

使用此工具,您可以轻松安装任何Perl版本。例如,只需键入perlbrew install perl-5.16.0,它就会在您的主目录中完全安装Perl 5.16.0!它还会设置所有路径,以便系统中对perl的调用解析为此perlbrew安装。

另一个重要的部分是这个Perl安装位于普通用户帐户下的主目录中。您不需要sudo或root帐户,因为Perl已安装在您的主目录中。

Perl Modules也是如此。如果要在Perlbrew安装中安装Perl模块,只需键入cpan XML::Simple(或cpanm XML::Simple checkout App::cpanminus)。

现在是重要的一部分。在您的系统上,您已经有了Perlbrew的设置。执行安装程序时,使用了Perlbrew安装。但是在这个Perlbrew安装中没有安装XML :: Simple。

然后执行sudo cpan XML::Simple以安装XML :: Simple。问题是所有sudo命令都只是以root用户身份执行。这意味着您使用的系统Perl /usr/bin/perl代替了/home/qiime/perl5/perlbrew/perls/perl-5.16.0/bin/perl中的Perlbrew安装

您在System Perl中成功安装了XML :: Simple。但是你的Perlbrew安装没有安装XML :: Simple,因此它仍然返回一个错误,它无法找到XMl :: Simple。

您真正需要做的唯一事情就是cpan XML::Simple在您的主目录中的perlbrew安装中安装XML :: Simple。