【问题标题】:Can't locate Bio/SeqIO.pm in @INC在@INC 中找不到 Bio/SeqIO.pm
【发布时间】:2026-01-06 11:20:06
【问题描述】:

您好,我正在尝试使用 docker 安装 VelvetOptimizer。它说在@INC 中找不到Bio/SeqIO.pm。它需要安装以下内容: Velvet >= 0.7.51 ,Perl >= 5.8, BioPerl >= 1.4 我已经安装了它们

请找到 Dockerfile:

FROM amazonlinux



WORKDIR /shared
    RUN yum -y install gcc
    ADD http://www.cpan.org/src/5.0/perl-5.16.1.tar.gz /shared
    RUN tar -xzf perl-5.16.1.tar.gz
    WORKDIR /shared/perl-5.16.1
    RUN ./Configure -des -Dprefix=/shared/perl-5.16.1/localperl
    RUN make
    RUN make test
    RUN make install
    RUN echo “Perl Installation Complete”
    ENV PATH=/shared/perl-5.16.1/localperl/bin/:${PATH}

WORKDIR /shared
ADD http://www.ebi.ac.uk/~zerbino/velvet/velvet_latest.tgz .
RUN tar -xvf /shared/velvet_latest.tgz
WORKDIR /shared/velvet_1.2.10/
RUN make
ENV PATH=${PATH}:/shared/velvet_1.2.10/

WORKDIR /shared
RUN echo "BIO PERL INSTALLATION"
RUN \wget -O - https://install.perlbrew.pl | bash
ENV PATH=${PATH}:/root/perl5/perlbrew/bin/
RUN perlbrew install-cpanm
RUN cpanm Bio::Perl

WORKDIR /shared
ADD http://www.vicbioinformatics.com/VelvetOptimiser-2.2.5.tar.gz .
RUN tar zxvf VelvetOptimiser-2.2.5.tar.gz
ENV PATH=${PATH}:/shared/VelvetOptimiser-2.2.4

当我运行命令/shared/VelvetOptimiser-2.2.5/VelvetOptimiser.pl 我收到以下错误:

错误:

Can't locate Bio/SeqIO.pm in @INC (@INC contains: /shared/VelvetOptimiser-2.2.5 /shared/vcftools/src/perl /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 /shared/VelvetOptimiser-2.2.5/VelvetOpt/Assembly.pm line 238.
BEGIN failed--compilation aborted at /shared/VelvetOptimiser-2.2.5/VelvetOpt/Assembly.pm line 238.
Compilation failed in require at /shared/VelvetOptimiser-2.2.5/VelvetOptimiser.pl line 37.
BEGIN failed--compilation aborted at /shared/VelvetOptimiser-2.2.5/VelvetOptimiser.pl line 37.

但是当我使用“查找”命令时:我能够找到文件。

./root/.cpanm/work/1501770319.1/BioPerl-1.007001/blib/lib/Bio/SeqIO.pm
./root/.cpanm/work/1501770319.1/BioPerl-1.007001/Bio/SeqIO.pm
./shared/perl-5.16.1/localperl/lib/site_perl/5.16.1/Bio/SeqIO.pm

我认为它在 Perl 的包含路径中找不到,它由名为 @INC 的变量表示。 谁能告诉我如何解决这个问题。如何在 perls 包含路径中添加它。

【问题讨论】:

  • .cpanm/work 目录是安装模块时使用的临时工作目录。忽略那些。
  • 请注意,您的perlbrew 安装不完整。安装程序会指示您将一些代码添加到您的登录脚本中。也就是说,这可能与手头的问题无关。
  • head -1 /shared/VelvetOptimiser-2.2.5/VelvetOptimiser.pl 的输出是什么?

标签: perl bioperl vcftools


【解决方案1】:

很明显,/shared/VelvetOptimiser-2.2.5/VelvetOptimiser.pl

#!/usr/bin/env perl

作为它的shebang线。因此,它将使用在$PATH 中找到的第一个perl

您可能在/usr/bin 中有一个perl。在您的 Docker 文件中,您有:

ENV PATH=${PATH}:/root/perl5/perlbrew/bin/

也就是说,您可能会将/usr/bin 放在perlbrew 目录之前。所以,/usr/bin/env perl 正在接收 /usr/bin/perl,而不是您通过 perlbrew 安装的 perl(这也是您安装新 perl 的位置)。

所以,试试

ENV PATH=/root/perl5/perlbrew/bin/:${PATH}

另外,我没有看到你通过perlbrew实际安装了perl

你需要

perlbrew install 5.xx.x
perlbrew switch 5.xx.x

在安装cpanm 和安装Bio::Perl 之前。

【讨论】:

  • 我试过你说的,但是没有用。 echo $PATH =/root/perl5/perlbrew/bin/:/shared/perl-5.16.1/localperl/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/ bin:/sbin:/bin:/shared/samtools-0.1.18/:/shared/velvet_1.2.10/:/shared/VelvetOptimiser-2.2.4
  • 我在 dockerfile 中添加了 perl 安装步骤。