【问题标题】:Can't locate perl module in @INC after install the module安装模块后无法在 @INC 中找到 perl 模块
【发布时间】:2019-07-27 12:43:11
【问题描述】:

我对 perl 真的很陌生,并试图在 CentOS 7 上使用带有 apache2 的 BioPerl 模块。在我成功安装模块后,程序仍然报错在@INC 中找不到Bio/SeqIO.pm。

完整的错误跟踪:

Cant locate Bio/SeqIO.pm in @INC (@INC contains: .. ../ /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at superpose/seqAlign.pm line 39.
BEGIN failed--compilation aborted at superpose/seqAlign.pm line 39.
Compilation failed in require at superpose/superposeController.pm line 38.
BEGIN failed--compilation aborted at superpose/superposeController.pm line 38.
Compilation failed in require at /var/www/cgi-bin/superpose.cgi line 11.
BEGIN failed--compilation aborted at /var/www/cgi-bin/superpose.cgi line 11.

这是我找到 bioperl 模块的位置:

/root/.cpan/build/BioPerl-1.007002-oajj3K/Bio
/root/.cpan/build/BioPerl-1.007002-oajj3K/blib/lib/Bio
/root/perl5/lib/perl5/x86_64-linux-thread-multi/auto/Bio
/root/perl5/lib/perl5/Bio
/root/.cpanm/work/1551466691.17906/BioPerl-1.007002/Bio
/root/.cpanm/work/1551466691.17906/BioPerl-1.007002/blib/lib/Bio
/root/.cpanm/work/1551734157.15167/BioPerl-1.007002/Bio
/root/.cpanm/work/1551734157.15167/BioPerl-1.007002/blib/lib/Bio
/root/.cpanm/work/1551825394.27587/BioPerl-1.007002/Bio
/root/.cpanm/work/1551825394.27587/BioPerl-1.007002/blib/lib/Bio

@INC 和 %ENV 来自 perl -V

%ENV:
PERL5LIB="/root/perl5/lib/perl5:"
PERL_LOCAL_LIB_ROOT=":/root/perl5"
PERL_MB_OPT="--install_base /root/perl5"
PERL_MM_OPT="INSTALL_BASE=/root/perl5"
@INC:
/root/perl5/lib/perl5/5.16.3/x86_64-linux-thread-multi
/root/perl5/lib/perl5/5.16.3
/root/perl5/lib/perl5/x86_64-linux-thread-multi
/root/perl5/lib/perl5
/usr/local/lib64/perl5
/usr/local/share/perl5
/usr/lib64/perl5/vendor_perl
/usr/share/perl5/vendor_perl
/usr/lib64/perl5
/usr/share/perl5

我意识到我的@INC 不包含“/root/perl5/lib/perl5/Bio”的路径,但我认为只要 PERL5LIB 包含“/root/perl5/lib/perl5”,它应该能够找到模块。

对于 seqAlign.pm 脚本,它像这样链接 perl 库:

....
use lib qw(..);
use strict;
use Data::Dumper;

use Bio::SeqIO;
use Bio::PrimarySeq;
.... 

感谢您的帮助!

【问题讨论】:

  • 您是否以 root 身份运行该程序?您是否有权阅读该模块?你是如何安装模块的?
  • Bio/SeqIO.pm 在哪里?
  • 您在与运行脚本的环境不同的环境中展示了 @INC%ENV
  • 提示:use lib qw(..); 查看当前工作目录的父目录,而不是脚本目录的父目录。为此,您需要use FindBin qw( $RealBin ); use lib "$RealBin/..";。这不会解决您所询问的问题。

标签: perl


【解决方案1】:

您已经证明将PERL5LIB 设置为/root/perl5/lib/perl5 会导致以下内容被添加到@INC

/root/perl5/lib/perl5/5.16.3/x86_64-linux-thread-multi
/root/perl5/lib/perl5/5.16.3
/root/perl5/lib/perl5/x86_64-linux-thread-multi
/root/perl5/lib/perl5

但是,这些在给出错误消息的perl@INC 中不存在,因此在您运行脚本的环境中,PERL5LIB 显然没有设置为/root/perl5/lib/perl5。在那个环境中适当地设置它会解决你的问题。

【讨论】:

    猜你喜欢
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多