为什么不能perl找到@INC中存在的模块?

问题描述

一段时间以来,我一直在成功地从python运行perl脚本。我刚刚将所有内容移到了一台新计算机(都在运行Windows 10)上,但是遇到了问题。

运行脚本时出现错误

Can't locate DBI.pm in @INC (you may need to install the DBI module) (@INC contains: /usr/lib/perl5/site_perl /usr/share/perl5/site_perl /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5/core_perl /usr/share/perl5/core_perl)

在第一行use DBI;上。

我转而使用Perl (command line),使用脚本选择了文件夹并运行perl <filename>-同样的错误

DBI似乎已正确安装在C:\StrawBerry\perl\vendor\lib中,并且当我通过@INC检查时该目录位于我的perl -V中:

  @INC:
    C:/StrawBerry/perl/site/lib
    C:/StrawBerry/perl/vendor/lib
    C:/StrawBerry/perl/lib

我尝试使用DBI重新安装cpan Module::DBI,但出现错误

Could not expand [Module::DBI]. Check the module name.

我尝试用perl -MCPAN -e "install Bundle::DBI"安装它,但是失败了:

Test Summary Report
-------------------
t/original.t (Wstat: 0 Tests: 27 Failed: 1)
  Failed test:  26
Files=1,Tests=27,1 wallclock secs ( 0.05 usr +  0.01 sys =  0.06 cpu)
Result: FAIL
Failed 1/1 test programs. 1/27 subtests Failed.
gmake: *** [Makefile:863: test_dynamic] Error 255
  NEILB/IO-Tee-0.65.tar.gz
  C:\STRAWB~1\c\bin\gmake.exe test -- NOT OK
//hint// to see the cpan-testers results for installing this module,try:
  reports NEILB/IO-Tee-0.65.tar.gz
Stopping: 'install' Failed for 'IO::Tee'.

在以前的机器上进行设置时,我没有任何问题(两次都是原始安装,没有导入其他模块)。

我尝试几次重新安装StrawBerry,但无济于事。我试过安装perlbrew和ActivePerl,但两者都遇到了问题。我现在也已经用尽了Google寻找潜在的解决方案。

有什么想法吗?


编辑:

遵循建议here,我已经运行perl -e "use DBI;",并且没有错误消息显然表明DBI已正确安装?


编辑2

好吧,所以我设法通过Perl (command line)和Windows cmd使事情正常进行-完全重新安装了MysqL,但这实际上没有任何意义。但是,我仍然无法使用Git Bash执行脚本。我总是收到相同的错误...

解决方法

[更新:IO-Tee 0.66中已修复的错误。]

失败的测试假设sysread遵守Windows中添加到文件句柄的:crlf层。但事实并非如此。这是一个不好的测试,不是模块的问题。因此,由于这是唯一失败的测试,因此您可以使用以下命令安全地强制安装模块:

cpan -f IO::Tee

在测试失败的情况下强制安装模块通常不是一个好主意,因为这意味着您正在强制安装可能损坏的模块。但这没关系,因为已经确定问题出在测试上,而不是模块本身。

我已经提交了bug report,其中包含对该问题的更详尽的说明和解决方案。