【问题标题】:CPAN modules claim to install but dontCPAN 模块声称可以安装但没有
【发布时间】:2015-01-02 02:26:06
【问题描述】:

通过 VirtualBox 运行 UBUNTU 14.04。

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

无法在@INC 中找到 XML/Simple.pm(@INC 包含:... 

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

然后我尝试通过 cpan 安装它

sudo cpan XML::Simple

它告诉我:

XML::Simple 是最新的 (2.20)。

根据perl,这不是真的,因为

perl -e "使用 XML::Simple"

在@INC 中找不到 XML/Simple.pm(@INC 包含:

那么,我错过了什么?

【问题讨论】:

  • 可能是另一个使用perlbrew 安装的 Perl 二进制文件? which perl 返回什么?否则发布脚本。每个脚本都可以在启动时修改@INC,因此可能会发生找不到模块。
  • 您确定要在 virtualbox 客户机中安装模块,而不是在主机中? :)
  • @SidBurn: perl 返回 "/home/qiime/perl5/perlbrew/perls/perl-5.16.0/bin/perl"
  • @ysth:不确定,我怎么知道?
  • 首先修复你以 root 身份将东西安装到你的主目录中获得的错误权限:sudo chown -R qiime:qiime .cpan perl5 然后,尝试cpan XML::Simple(没有sudo

标签: xml perl cpan


【解决方案1】:

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

  1. 将模块名称转换为小写
  2. 将“::”转换为“-”
  3. 添加“lib”前缀和“-perl”后缀

所以 XML::Simple 的包名是:libxml-simple-perl,你可以安装它:

sudo apt-get install libxml-simple-perl

这些规则也有例外,但您始终可以按 Perl 模块名称搜索:

apt-cache search XML::Simple

您不会从发行版的软件包存储库中获得绝对最新版本的模块,但对于像 XML::Simple 这样通常无关紧要的稳定(有些人可能会说“垂死”)模块。

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

【讨论】:

    【解决方案2】:

    一般来说,你不应该乱用系统perl

    使用

    $ 哪个 perl

    $ sudo which perl

    查看每个perl 的住处。

    【讨论】:

      【解决方案3】:

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

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

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

      而且由于所有 Perl 模块通常都依赖于其他 Perl 模块,因此安装命令也可以更新许多其他 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 模块也是如此。如果你想在你的 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。

      【讨论】:

        猜你喜欢
        • 2016-07-11
        • 2011-12-26
        • 1970-01-01
        • 2018-06-19
        • 2014-12-06
        • 2013-11-04
        • 2013-09-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多