Perl模块无法通过CPAN / cpanm安装

时间:2018-11-07 19:35:28

标签: perl bioinformatics cpan

我正在尝试安装一些perl模块,这些模块是我要安装的程序(MEME-suite)的依赖项。 运行“ perldepends.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)”。但是当我运行“ perldependents.pl”以检查MEME的依赖项时,它仍被列为未安装。

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

安装这些模块的任何帮助,以便我可以安装MEME,将非常有帮助,因为我需要该程序进行研究,并且已经将脑袋砸了好几个星期,而我的顾问也开始变得心慌意乱

我对解决问题感到非常迷茫。

3 个答案:

答案 0 :(得分:3)

问题出在您使用的perl中。

您要安装的模块包含用C编写的部分。要编译这些部分,perl调用与它本身一起编译的C编译器。也就是说,在配置(然后编译)perl时设置了C编译器的路径。

您的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编译器配置)。

大概这是您提到的“ miniconda”。它安装在您的主目录中,并在系统目录之前的PATH中列出其自身,因此首先在此处找到perl。通过执行sudo cpan ...,您以root用户身份运行cpan(它没有PATH设置),因此它会找到系统perl,它不仅具有有效的C编译器,而且还具有完全不同的已安装模块集。

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

我对迷你康达一无所知。我尝试从perl角度修复问题的方法是:

  • 请勿使用sudo cpan。在系统目录中安装新模块(或升级旧模块)不是一个好主意。
  • 确定要使用的Perl。 miniconda perl看起来坏了,所以出来了。我们的选择是1)系统perl或2)我们主目录中的自定义perl(可通过perlbrew轻松安装)。
  • 如果使用自定义perl:Plain cpan HTML::PullParser(或任何其他模块)应该可以正常工作。它将所有内容安装在~/perl5/perlbrew下。
  • 如果系统运行:设置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(或任何其他模块)应该可以正常工作。

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

答案 1 :(得分:0)

我也遇到了这个问题。路径/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 以我的情况,它解决了这个问题。不幸的是,已经至少一年了,这个问题仍然没有解决。

答案 2 :(得分:-1)

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

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安装一次,这应该可以解决问题。

相关问题