繁体   English   中英

Perl 模块无法使用 CPAN/cpanm 安装

[英]Perl Module fails install with CPAN/cpanm

我正在尝试安装一些 perl 模块,这些模块是我要安装的程序(MEME-suite)的依赖项。 运行“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 中。

您尝试安装的模块包含用 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 编译器配置)。

大概这就是你提到的“miniconda”。 它安装在您的主目录中,并在系统目录之前在您的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

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

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/确实看起来很奇怪,我们不希望 gcc 二进制文件放在这里。 根据这个讨论,问题在于 Conda-forge 上 perl 的默认版本具有编译器的硬编码路径。 @luvaul hack 是使用其他健康的 perl 版本,如下所示: conda install -c conda-forge perl=5.26.2=h470a237_0在我的情况下它解决了这个问题。 不幸的是,至少已经一年了,这个问题仍然没有得到解决。

暂无
暂无

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

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