【问题标题】:cpan command gives the error "Can't locate B.pm in @INC"cpan 命令给出错误“Can't locate B.pm in @INC”
【发布时间】:2017-02-07 23:16:25
【问题描述】:

我想使用 CPAN 安装一些 Perl 包,但是当我尝试启动 CPAN shell 时出现以下错误:

paulzierep@naproxen:~$ cpan
Can't locate B.pm in @INC (you may need to install the B module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base /home/paulzierep) at /usr/share/perl/5.22/Safe.pm line 34.
BEGIN failed--compilation aborted at /usr/share/perl/5.22/Safe.pm line 34.
Compilation failed in require at /usr/share/perl/5.22/CPAN.pm line 56.
BEGIN failed--compilation aborted at /usr/share/perl/5.22/CPAN.pm line 56.
Compilation failed in require at /usr/share/perl/5.22/App/Cpan.pm line 273.
BEGIN failed--compilation aborted at /usr/share/perl/5.22/App/Cpan.pm line 273.
Compilation failed in require at /usr/bin/cpan line 9.
BEGIN failed--compilation aborted at /usr/bin/cpan line 9.

我不知道如何在没有 cpan 的情况下安装缺少的 B 模块。我想这应该是默认安装的。

我在 Ubuntu 16.04 上使用 Perl 5.22.1。

更新

所以我设置PERL5LIBPERL5OPT 让它找到/usr/lib/x86_64-linux-gnu/perl/5.22.1/B.pm,CPAN 运行,但由于以下错误我无法安装任何东西

cpan[1]> install Log::Log4perl
Reading '/home/paulzierep/.cpan/Metadata'
Database was generated on Fri, 30 Sep 2016 06:29:02 GMT
Running install for module 'Log::Log4perl'
Checksum for /home/paulzierep/.cpan/sources/authors/id/M/MS/MSCHILLI/Log-Log4perl-1.47.tar.gz ok
Scanning cache /home/paulzierep/.cpan/build for sizes
............................................................................DONE
'YAML' not installed, will not store persistent state
Configuring M/MS/MSCHILLI/Log-Log4perl-1.47.tar.gz with Makefile.PL
Checking if your kit is complete...
Looks good
Have /usr/lib/x86_64-linux-gnu/perl/5.22.1
Want /usr/lib/x86_64-linux-gnu/perl/5.22
Your perl and your Config.pm seem to have different ideas about the
architecture they are running on.
Perl thinks: [5.22.1]
Config says: [x86_64-linux-gnu-thread-multi]
This may or may not cause problems. Please check your installation of perl
if you have problems building this extension.
Generating a Unix-style Makefile
Writing Makefile for Log::Log4perl
Writing MYMETA.yml and MYMETA.json
MSCHILLI/Log-Log4perl-1.47.tar.gz
/usr/bin/perl Makefile.PL INSTALLDIRS=site -- OK
Running make for M/MS/MSCHILLI/Log-Log4perl-1.47.tar.gz
make: *** No rule to make target '/usr/lib/x86_64-linux-gnu/perl/5.22/Config.pm', needed by 'Makefile'.  Stop.
MSCHILLI/Log-Log4perl-1.47.tar.gz
/usr/bin/make -- NOT OK
Failed during this command:
MSCHILLI/Log-Log4perl-1.47.tar.gz            : make NO

所以它修复了它并给我留下了另一个问题。对这个有帮助吗?

这就是我得到的:

paulzierep@naproxen:~$ perl -E 'say for @INC'
/etc/perl
/usr/local/lib/x86_64-linux-gnu/perl/5.22.1
/usr/local/share/perl/5.22.1
/usr/lib/x86_64-linux-gnu/perl5/5.22
/usr/share/perl5
/usr/lib/x86_64-linux-gnu/perl/5.22
/usr/share/perl/5.22
/usr/local/lib/site_perl
/usr/lib/x86_64-linux-gnu/perl-base
.

paulzierep@naproxen:/home$ perl -MFile::Spec -E 'say for 
File::Spec->path'
/home/paulzierep/bin
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games
/snap/bin

【问题讨论】:

  • 你应该显示你的命令行...
  • 不,我已经删除并再次安装了 perl,使用 apt-get install perl 没有错误。
  • 我在 perl-modules-5.22 包中没有看到 B.pm,Ubuntu 似乎在其中放置了核心模块。也许他们搞砸了他们的包裹。
  • 很高兴知道,那我试试旧版本。
  • 最好不要管系统perl,使用perlbrewplenv在你的主目录中安装你自己的版本。使用系统 perl 可能会导致其他问题。

标签: perl ubuntu cpan


【解决方案1】:

因此,在查看了具有非常相似设置的不同系统之后,我发现我的 perl 安装有什么问题。它总是困扰着我,5.22 文件夹是空的,但似乎仍然是 perl 正在寻找的文件夹。

paulzierep@naproxen:/usr/lib/x86_64-linux-gnu/perl$ ls
5.22  5.22.1 cross-config-5.22.1  debian-config-data-5.22.1

在具有类似设置的系统中,我发现 5.22 链接到 5.22.1,设置此链接解决了问题,perl 再次运行,就像一个魅力。

我还想指出,在我的研究中,我发现工作目录“。”默认情况下似乎在@INC,(http://www.perlmonks.org/bare/?node_id=375341)因此我想知道为什么对某些人(@Borodin)来说似乎很奇怪,我的主目录在那里(只要你从那里启动cpan,任何目录都在那里) .

我也看不出 perlbrew 在这里有什么帮助,除了你不能在没有工作 perl 的情况下安装它之外,当你的系统 perl 不能正常工作时,我看不出它会有什么帮助。

【讨论】:

  • 安装 pleenv 不需要 perl。
  • 另外,@INC 通常包含.,而不是当前工作目录的绝对路径。例如,perl -E'say "@INC"' 在我的系统上打印 /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .
  • 我看不到你要去哪里@ThisSuitIsBlackNot
  • 我在回答你的两件事:1)“我看不出 perlbrew 在这里有什么帮助,除了事实上,你不能在没有工作 perl 的情况下安装它,我当您的系统 perl 无法正常工作时,看不到它有什么帮助。” 如果系统 perl 完全损坏,甚至 perlbrew 安装脚本也无法运行(您尝试过吗?),您仍然可以安装pleenv。 perlbrew 和 pleenv 的重点是安装完全独立于系统 perl 的您自己的 perl 版本。 (续)
  • 2) “我想知道为什么有些人(@Borodin)觉得我的主目录在那里很奇怪” @INC 应该包含文字 . ,而不是/home/paulzierep,如初始错误消息所示。我不确定这是否真的与您的问题有关,我只是在解释为什么 Borodin 认为错误消息很奇怪。
【解决方案2】:

我遇到了同样的问题。不知为何,/usr/lib/x86_64-linux-gnu/perl 目录为空。我的解决方案是重新安装libperl5.22 包。

sudo apt-get install --reinstall libperl5.22

【讨论】:

    【解决方案3】:
    $ cpan
        Can't locate File/Spec.pm:   /usr/local/lib/x86_64-linux-gnu/perl/5.22.1/File/Spec.pm: Permission denied at /usr/share/perl/5.22/CPAN.pm line 10.
        BEGIN failed--compilation aborted at /usr/share/perl/5.22/CPAN.pm line 10.
        Compilation failed in require at /usr/share/perl/5.22/App/Cpan.pm line 273.
        BEGIN failed--compilation aborted at /usr/share/perl/5.22/App/Cpan.pm line 273.
        Compilation failed in require at /usr/bin/cpan line 9.
        BEGIN failed--compilation aborted at /usr/bin/cpan line 9.
    

    Perl 不查找 @INC 中的模块。

    【讨论】:

    • 请添加更多详细信息,说明您的答案如何解决 OP 的问题...
    猜你喜欢
    • 1970-01-01
    • 2015-03-19
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 2013-06-13
    • 2018-06-08
    相关资源
    最近更新 更多