Perl Can';t在@INC中找到Text/Soundex.pm
我安装了repeatsmasker,它看起来很有效,因为它显示“恭喜!RepeatMasker现在可以使用了。” 但当我运行它时,它会报告“找不到Text/Soundex.pm…”。因此,我通过“sudo cpan Text::Soundex”安装了该模块,最后它告诉我“Text::Soundex是最新的(3.05)。”该模块似乎已经安装,但RepeatMasker仍然存在相同的问题,我将在下面的代码中向您展示:Perl Can';t在@INC中找到Text/Soundex.pm,perl,Perl,我安装了repeatsmasker,它看起来很有效,因为它显示“恭喜!RepeatMasker现在可以使用了。” 但当我运行它时,它会报告“找不到Text/Soundex.pm…”。因此,我通过“sudo cpan Text::Soundex”安装了该模块,最后它告诉我“Text::Soundex是最新的(3.05)。”该模块似乎已经安装,但RepeatMasker仍然存在相同的问题,我将在下面的代码中向您展示: fragua@picci:~/RM/RepeatMasker$ sudo cpan
fragua@picci:~/RM/RepeatMasker$ sudo cpan Text::Soundex
Loading internal null logger. Install Log::Log4perl for logging messages
Reading '/home/fragua/.cpan/Metadata'
Database was generated on Fri, 19 Apr 2019 22:17:03 GMT
Text::Soundex is up to date (3.05).
fragua@picci:~/RM/RepeatMasker$ ./RepeatMasker -s -lib /home/fragua/RepeatScout-1.0.5/ObiINK5k_repeats_filtered1.fasta /home/fragua/Documenti/Workdirectory/ObiINC5k.fa
Can't locate Text/Soundex.pm in @INC (you may need to install the Text::Soundex module) (@INC contains: /home/fragua/RM/RepeatMasker /home/fragua/perl5/lib/perl5 /home/fragua/anaconda/lib/site_perl/5.26.2/x86_64-linux-thread-multi /home/fragua/anaconda/lib/site_perl/5.26.2 /home/fragua/anaconda/lib/5.26.2/x86_64-linux-thread-multi /home/fragua/anaconda/lib/5.26.2 .) at /home/fragua/RM/RepeatMasker/Taxonomy.pm line 80.
BEGIN failed--compilation aborted at /home/fragua/RM/RepeatMasker/Taxonomy.pm line 80.
Compilation failed in require at ./RepeatMasker line 310.
BEGIN failed--compilation aborted at ./RepeatMasker line 310.
我在另一台计算机上安装了RepeatMasker,没有任何问题,但我不知道为什么现在遇到了这个问题您安装了两个Perl版本:
/usr/bin/perl
/home/fragua/anaconda/bin/perl
/home/fragua/anaconda/bin/perl
是您的首选路径。这意味着具有以下shebang(#!
)行的程序将使用/home/fragua/anaconda/bin/perl
:
#!/usr/bin/env perl
RepeatMasker
似乎就是这样一个程序
所有这些都很好
问题
/home/fragua/anaconda/bin
包含由/home/fragua/anaconda/bin/perl安装的脚本。作为这些脚本安装过程的一部分,应该重写这些脚本的shebang行,以指定/home/fragua/anaconda/bin/perl
/home/fragua/anaconda/bin/perl /home/fragua/anaconda/bin/cpan Text::Soundex
然而,/home/fragua/anaconda/bin/cpan
的shebang行引用了/usr/bin/perl
。这意味着使用/home/fragua/anaconda/bin/cpan
将为/usr/bin/perl
安装模块,而不是/home/fragua/anaconda/bin/perl
/home/fragua/anaconda/bin/perl /home/fragua/anaconda/bin/cpan Text::Soundex
解决方法
您可以避免依赖shebang行,并显式指定正确的perl
/home/fragua/anaconda/bin/perl /home/fragua/anaconda/bin/cpan Text::Soundex
或者,给定您的$PATH
perl /home/fragua/anaconda/bin/cpan Text::Soundex
修复程序
要以持续的方式解决此问题,需要将脚本的shebang行更改为它们应该的样子。在/home/fragua/anaconda/bin
中的每个文件中(尤其是对于cpan
),替换
与
您可以使用以下方法(对更改的文件进行备份)执行此操作:
看起来您使用的是安装在主目录中的Perl版本,我打赌sudo cpan
正在使用OS Perl安装。因此,模块是为该副本安装的,但不是为您的程序正在使用的副本安装的。好的。。。你能给我一个解决方法吗?如果确实是这个问题,这个模块需要通过你本地的perl副本安装。对不起,我正在学习,所以我不知道怎么做。你能帮我吗?下一步要做什么?取决于您如何安装本地副本。。。perlbrew还是其他什么?使用/usr/bin/env perl
是最佳实践。它使脚本更具可移植性,并允许您在不更改代码的情况下更好地控制运行时。最好是通过指向perl
二进制文件的直接路径来控制这一点,或者在$path
环境变量中向上插入所需的perl路径。在这里更改shebang似乎不是最好的方法。@manchicken,您所谓的最佳实践——事实并非如此——在具有多个perl的系统上失败,例如这一个。最终会出现缺少模块的脚本和使用错误版本模块的脚本。这是ExtUtils::MakeMaker和Module::Build在安装脚本时自动完成的。(它不是特定于cpan
,也与perlbrew
无关)脚本安装不正确,我提出的修复方案只是完成了标准安装过程。
perl -0777ne'print "$ARGV\n" if m{^#!\s*/usr/bin/perl\b}' /home/fragua/anaconda/bin/* \
| xargs perl -i~ -0777pe's{^#!\s*/usr/bin/perl\b}{#!/home/fragua/anaconda/bin/perl}'