【问题标题】:Why can't perl debugger find module that script finds?为什么 perl 调试器找不到脚本找到的模块?
【发布时间】:2011-05-26 05:11:43
【问题描述】:

使用 CPAN,我安装了 GD::Graph 来制作水平堆叠条形图。 CPAN 将模块安装在 /root/.cpan/build/GD-2.45-4PSn9K 中,而 @INC 中没有。在我的脚本中,我可以通过添加来访问模块

use lib "/root/.cpan/build/GD-2.45-4PSn9K"

脚本现在可以毫无问题地生成图表。我想使用 perl 调试器(“perl -d myscript.pl”),但它抱怨无法找到 GD.pm(位于该路径中)。我添加了 PERL5LIB 的路径,用“perl -V”验证,但调试器仍然找不到它。

也许解决这个问题的一种方法是在@INC 路径之一中安装GD,但是a)我不知道该怎么做,b)我真的很想了解发生了什么。

这是在 Fedora Core 12 上。

我不知道是否会有所不同,但 GD::Graph 实际上用于我的主脚本包含的模块中。主脚本不使用它。

更新:按照以下建议,我重新进入 CPAN 并强制安装。 CPAN 说它在 /root/.cpan/ (etc) 找到了安装,并将该路径预先添加到@INC。然后我从 .cpan 目录中手动删除了 GD 并再次安装。这次 CPAN 把它放在同一个地方,也放在 /usr/local/lib/perl5/GD-2.45PSn9K" 中。它在两个路径前面加上@INC。我已经验证它在那里,perl 调试器声称正在寻找那里,但 仍然 找不到 GD.pm( 在那里)并且不会运行脚本。

@INC:
 /usr/local/lib/perl5/GD-2.45-4PSn9K/
  (and others)

来自 perl -d:

Can't locate loadable object for module GD in @INC (@INC contains:   

... 并在其他路径中列出该路径。它确实存在:

[root /]# find . -name "GD.pm"
./usr/local/lib/perl5/GD-2.45-4PSn9K/GD.pm
./usr/local/lib/perl5/GD-2.45-4PSn9K/blib/lib/GD.pm
 (and the /root/.cpan paths)

【问题讨论】:

  • 这是一个 CPAN 构建目录,它应该也将文件安装在 PERL5LIB 的某个位置。 CPAN 在构建结束时列出了它安装文件的目录
  • 你也可以试试 'perldoc -lm GD::Graph' 来找到安装位置。

标签: linux perl debugging cpan fedora


【解决方案1】:

关于 bourne 兼容:

export PERL5LIB=$PERL5LIB:/root/.cpan/build/GD-2.45-4PSn9K

这不是最好的解决方案。您实际上应该通过cpan 安装它。如果它工作正常并且无法安装,那么您可能需要force 它。

force install GD::Graph

还有

perl -I/root/.cpan/build/GD-2.45-4PSn9K -d myscript.pl

【讨论】:

  • @jasper77:它可能没有通过测试,或者是在发布开发人员设置的一些不太可靠的条件下运行的。
【解决方案2】:

不要使用那个位置 - cpan 可能很快就会把它扔掉(正如 Eric 在他的评论中提到的,这只是一个构建目录,一段时间后这些会被清理掉)。

如果您可以在没有 use lib 行的情况下从脚本中访问它,则可以通过

找到另一个(可能已正确安装)版本
use GD;
warn $INC{"GD.pm"};

或查看@INC 路径以查看它可能隐藏的潜在位置

warn join, "\n", @INC;

史努比的perldoc lm 技巧也不错,但如果您在脚本中使用@INC 进行其他操作,可能并不完全准确。

如果您确实需要 use lib 行让它在脚本版本中工作,那么大概它没有正确安装,所以 Axeman 的 force install 建议可能值得一试(这应该告诉你它在哪里放置文件)。

【讨论】:

  • 强制安装只会导致 /root/.cpan 位置被添加到 PERL5LIB,而不是将其安装在不同的位置。所以我从那里删除它并再次尝试安装,这次是强制安装。 CPAN 将其放回原处。如果 cpan 会丢弃该位置,我该怎么办?
猜你喜欢
  • 2013-04-24
  • 1970-01-01
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
  • 2019-05-24
  • 2019-11-19
  • 1970-01-01
相关资源
最近更新 更多