【问题标题】:Perl Module fails install with CPAN/cpanmPerl 模块无法使用 CPAN/cpanm 安装
【发布时间】:2019-04-11 07:15:05
【问题描述】:

我正在尝试安装一些 perl 模块,这些模块是我要安装的程序(MEME 套件)的依赖项。 运行“perl dependencies.pl”给了我以下信息:

Checking Required Perl Modules:
HTML::PullParser missing.
HTML::Template missing.
HTML::TreeBuilder missing.
XML::Simple missing. On Ubuntu, you may need to first run 'sudo apt-get install libexpat-dev'
XML::Parser::Expat missing.

Checking Optional Modules:
Log::Log4perl missing. Used for logging and debugging by developers.
Math::CDF missing. Only required for fasta-enriched-center script (which is not called by the web scripts).
XML::Compile::SOAP11 missing. Used for downloading sequence databases from RSAT.
On Ubuntu, you may first need to run 'sudo apt-get install libxml2-dev'
XML::Compile::WSDL11 missing. Used for downloading sequence databases from RSAT
XML::Compile::Transport::SOAPHTTP missing. Used for downloading sequence databases from RSAT

但是,当我尝试安装缺少的 perl 模块时,使用:“cpan HTML::PullParser”或“cpanm HTML::PullParser”我收到一条失败消息和以下数据日志:

cpanm (App::cpanminus) 1.7044 on perl 5.026002 built for x86_64-linux-thread-multi
Work directory is /home/weilii/.cpanm/work/1541617377.2551
You have make /usr/bin/make
You have /usr/bin/wget
You have /bin/tar: tar (GNU tar) 1.29
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by John Gilmore and Jay Fenlason.
You have /usr/bin/unzip
Searching HTML::PullParser () on cpanmetadb ...
--> Working on HTML::PullParser
Fetching http://www.cpan.org/authors/id/G/GA/GAAS/HTML-Parser-3.72.tar.gz
-> OK
Unpacking HTML-Parser-3.72.tar.gz
Entering HTML-Parser-3.72
Checking configure dependencies from META.json
Checking if you have ExtUtils::MakeMaker 6.58 ... Yes (7.24)
Configuring HTML-Parser-3.72
Running Makefile.PL
Checking if your kit is complete...
Looks good
Generating a Unix-style Makefile
Writing Makefile for HTML::Parser
Writing MYMETA.yml and MYMETA.json
-> OK
Checking dependencies from MYMETA.json ...
Checking if you have XSLoader 0 ... Yes (0.27)
Checking if you have HTML::Tagset 3 ... Yes (3.20)
Checking if you have ExtUtils::MakeMaker 0 ... Yes (7.24)
Building and testing HTML-Parser-3.72
cp Parser.pm blib/lib/HTML/Parser.pm
cp lib/HTML/TokeParser.pm blib/lib/HTML/TokeParser.pm
cp lib/HTML/LinkExtor.pm blib/lib/HTML/LinkExtor.pm
cp lib/HTML/HeadParser.pm blib/lib/HTML/HeadParser.pm
cp lib/HTML/Filter.pm blib/lib/HTML/Filter.pm
cp lib/HTML/Entities.pm blib/lib/HTML/Entities.pm
cp lib/HTML/PullParser.pm blib/lib/HTML/PullParser.pm
Running Mkbootstrap for Parser ()
chmod 644 "Parser.bs"
"/home/weilii/miniconda3/bin/perl" -MExtUtils::Command::MM -e 'cp_nonempty' -- Parser.bs blib/arch/auto/HTML/Parser/Parser.bs 644
"/home/weilii/miniconda3/bin/perl" "/home/weilii/miniconda3/lib/5.26.2/ExtUtils/xsubpp"  -typemap '/home/weilii/miniconda3/lib/5.26.2/ExtUtils/typemap' -typemap '/home/weilii/.cpanm/work/1541617377.2551/HTML-Parser-3.72/typemap'  Parser.xs > Parser.xsc
mv Parser.xsc Parser.c
"/home/weilii/miniconda3/bin/perl" mkhctype >hctype.h
"/home/weilii/miniconda3/bin/perl" mkpfunc >pfunc.h
/tmp/build/80754af9/perl_1527832170752/_build_env/bin/x86_64-conda_cos6-linux-gnu-gcc -c   -D_REENTRANT -D_GNU_SOURCE --sysroot=/tmp/build/80754af9/perl_1527832170752/_build_env/x86_64-conda_cos6-linux-gnu/sysroot -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2 -O2   -DVERSION=\"3.72\" -DXS_VERSION=\"3.72\" -fPIC --sysroot=/tmp/build/80754af9/perl_1527832170752/_build_env/x86_64-conda_cos6-linux-gnu/sysroot "-I/home/weilii/miniconda3/lib/5.26.2/x86_64-linux-thread-multi/CORE"  -DMARKED_SECTION Parser.c
/bin/sh: 1: /tmp/build/80754af9/perl_1527832170752/_build_env/bin/x86_64-conda_cos6-linux-gnu-gcc: not found
Makefile:357: recipe for target 'Parser.o' failed
make: *** [Parser.o] Error 127
-> FAIL Installing HTML::PullParser failed. See /home/weilii/.cpanm/work/1541617377.2551/build.log for details. Retry with --force to force install it.

我似乎无法安装这个或一些其他 MEME 依赖项。 我对 linux 很陌生,我在这个论坛和其他各种论坛上的搜索并没有让我找到任何解决方案。

我已经尝试过使用“sudo cpan HTML::PullParser”,当我这样做时,它声称“HTML::PullParser 是最新的 (3.57)”。但是当我运行“perl dependencies.pl”来检查 MEME 的依赖项时,它仍然被列为未安装。

我也安装了 miniconda,并且认为问题可能与 cpan 指向我的系统 perl 安装有关,而 MEME 正在检查 miniconda 安装中的依赖关系?

安装这些模块以便我安装 MEME 的任何帮助都会非常有帮助,因为我需要该程序来进行研究,并且已经将我的头撞到这堵墙上好几个星期了,我的顾问开始对我感到慌张.

我对如何解决问题感到很迷茫。

【问题讨论】:

    标签: perl bioinformatics cpan


    【解决方案1】:

    问题出在你使用的 perl 上。

    您尝试安装的模块包含用 C 编写的部分。要编译这些部分,perl 会调用它自己编译的相同 C 编译器。也就是说,C 编译器的路径是在 perl 本身配置(然后编译)时设置的。

    您的 perl 正在尝试使用 /tmp/build/80754af9/perl_1527832170752/_build_env/bin/x86_64-conda_cos6-linux-gnu-gcc 的 C 编译器,它看起来像一个临时构建路径,而不是您自己的系统上存在的东西。

    您还可以看到正在使用的 perl 是 /home/weilii/miniconda3/bin/perl,而不是系统 perl(它可能具有有效的 C 编译器配置)。

    大概这就是你提到的“迷你康达”的东西。它安装在您的主目录中,并在系统目录之前的PATH 中列出自己,因此首先在那里找到 perl。通过执行sudo cpan ...,您正在以root 身份运行cpan(它没有您的PATH 设置),因此它找到了系统perl,它不仅有一个工作的C 编译器,而且还有一组完全不同的已安装模块.

    也就是说,HTML::PullParser 安装在您的系统 perl 中(“最新”),但是当您以普通用户身份运行 perl 时,将执行 miniconda perl,它具有一组不同的模块目录(以及损坏的 C 编译器配置)。

    我对 miniconda 一无所知。从 perl 的角度来看,我尝试解决问题的方法是:

    • 永远不要使用sudo cpan。在系统目录中安装新模块(或升级旧模块)是个坏主意。
    • 决定使用哪个 perl。 miniconda perl 看起来坏了,所以它已经出局了。我们的选择是 1) 系统 perl 或 2) 我们主目录中的自定义 perl(通过 perlbrew 轻松安装)。
    • 如果自定义 perl:Plain cpan HTML::PullParser(或任何其他模块)应该可以正常工作。它将安装~/perl5/perlbrew 下的所有内容。
    • 如果系统perl:设置local::lib。这包括两部分:

      • 安装local::lib。通常它有一个系统包(例如,使用 Debian apt-get install liblocal-lib-perl 应该可以工作)。
      • eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)" 添加到您的.bashrc 并启动一个新的shell。

      现在普通的cpan HTML::PullParser(或任何其他模块)应该可以正常工作了。

    无论如何,您都必须从您的PATH 中删除~/miniconda3/bin

    【讨论】:

      【解决方案2】:

      查看您提供的日志,我可以看到您的第一个块中提到的两个缺失的依赖项。

      sudo apt-get install libexpat-dev
      sudo apt-get install libxml2-dev
      

      这些似乎是必需的,运行以上将确认它们存在。

      在第二块我注意到了

      /bin/sh: 1: /tmp/build/80754af9/perl_1527832170752/_build_env/bin/x86_64-conda_cos6-linux-gnu-gcc: not found
      

      这表明您缺少gcc

      Ubuntu 提供了一堆预构建的软件包,其中包含从源代码构建所需的基本工具,包括 gcc。有关完整列表,请参阅 https://packages.ubuntu.com/trusty/build-essential

      sudo apt-get install build-essential
      

      一旦安装了上面的,再给 Perl 安装一次,这应该可以解决问题。

      【讨论】:

      • 能否请我给出拒绝投票的理由,以便我可以修改我的答案并改进?谢谢
      • /tmp/build/80754af9/perl_1527832170752/_build_env/bin/x86_64-conda_cos6-linux-gnu-gcc/tmp 下的路径。系统包无法提供该文件。
      • 错误是由于尝试安装不需要 expat 或 libxml2 的 HTML::PullParser。
      • 所以尝试这些命令似乎没有完成任何事情。 “注意,选择 'libexpat1-dev' 而不是 'libexpat-dev' libexpat1-dev 已经是最新版本(2.2.5-3)。”和“E:无法找到软件包 libxm12-dev”和“build-essential 已经是最新版本(12.4ubuntu1)。build-essential 设置为手动安装。”至于否决票,不是我这么想。
      • 感谢您的回复。非常感谢:)
      【解决方案3】:

      我也遇到过这个问题。路径/tmp/build/80754af9/perl_1527832170752/_build_env/bin/ 确实看起来很奇怪,我们不希望将 gcc 二进制文件放在此处。 根据这个discussion,问题在于 Conda-forge 上的默认版本的 perl 具有编译器的硬编码路径。 @luvaul hack 是使用其他健康的 perl 版本,如下所示: conda install -c conda-forge perl=5.26.2=h470a237_0 在我的情况下,它解决了这个问题。不幸的是,至少已经一年了,这个问题仍然没有得到彻底解决。

      【讨论】:

        猜你喜欢
        • 2020-05-07
        • 2011-06-15
        • 2014-02-22
        • 2017-08-28
        • 2014-09-30
        • 2013-06-30
        • 2020-01-02
        • 2021-05-13
        • 1970-01-01
        相关资源
        最近更新 更多