【问题标题】:Cannot locate modules in the lib folder Spreadsheet::WriteExcel and DBI despite they exist [duplicate]无法在 lib 文件夹 Spreadsheet::WriteExcel 和 DBI 中找到模块,尽管它们存在 [重复]
【发布时间】:2017-08-20 22:44:00
【问题描述】:

如何检查 Spreadsheet::WriteExcel 在我的 Perl 中是否可用?

我跑了

  perldoc -v Spreadsheet::WriteExcel 

并得到以下输出,表明我的 perl 上没有 Spreadsheet::WriteExcel

/usr/local/bin/perldoc => Pod::Perldoc v3.13

Formatter class Pod::Perldoc::ToMan successfully loaded!
Will format with the class Pod::Perldoc::ToMan
Searching for Spreadsheet::WriteExcel
Looking for Spreadsheet/WriteExcel in /opt/SYSperl/bin /opt/SYSperl/lib/5.8.6/sun4-solaris /opt/SYSperl/lib/5.8.6 /opt/SYSperl/lib/site_perl/5.8.6/sun4-solaris /opt/SYSperl/lib/site_perl/5.8.6 /opt/SYSperl/lib/site_perl . /opt/pgti/ixp/bin /opt/pgti/ixp/bin /opt/pgti/ixp/bin /opt/CA/uajm/elp/autosys/bin /usr/openwin/bin /usr/bin /usr/ccs/bin /usr/local/bin /opt/RFMadmin/exe /opt/RFMadmin/bin . /apps/risk/bin
No documentation found for "Spreadsheet::WriteExcel".

但我看到一个代码使用下面的行和其他功能,在我的系统上运行良好

$workbook = Spreadsheet::WriteExcel->new($file);`enter code here`

【问题讨论】:

  • 检查是否已安装的最简单方法是运行$ perl -MSpreadsheet::WriteExcel\ 999。它要么抱怨它不能加载它,要么抱怨它不能加载版本 999,然后告诉你它有哪个版本。注意反斜杠后面的空格。
  • 我很确定我已经看到带有VERSION 数字的模块作为某种形式的日期,类似于“2016_12_04”,这不会抱怨。我使用你上面提到的方法,但多了一堆 9。
  • @SinanÜnür 是的,这样可以节省一个丑陋的角色。 :)
  • @SinanÜnür = 更容易出错,因为它仅在模块的 import() 函数在看到版本时进行版本检查时才有效(如 Exporter 所做的那样)。空格让Perl除了import之外还要调用VERSION,这是最正确的做法
  • @ysth 谢谢指正。

标签: perl


【解决方案1】:

您的系统上可能存在多个版本的 perl,每个版本的外观不同,安装的模块集也不同。

使用与您的代码相同的 perl 解释器,您应该能够验证它是否存在:

/path-to-that-perl/perl -le'use Spreadsheet::WriteExcel; print $INC{"Spreadsheet/WriteExcel.pm"}'

那里还应该安装一个 perldoc,它会在相同的地方查看:

/path-to-that-perl/perldoc -lm Spreadsheet::WriteExcel

也有可能,虽然不太可能,有问题的代码正在向@INC 添加额外的目录,说明 perl 将在哪里寻找模块,通过 -I 开关,use libPERL* 环境变量,一个sitecustomize脚本,或者直接修改@INC

【讨论】:

  • 我能够找到所有已安装模块的位置,PATHLIB 变量中提到了路径,当我回显它时,我得到了位置,可以执行我认为需要执行的任何 perl 程序在我的系统上执行之前初始化 PATHLIB。
【解决方案2】:

运行perl -e "use Spreadsheet::WriteExcel" 如果已安装,则不会出现错误。

【讨论】:

  • 我知道了Can't locate Spreadsheet/WriteExcel.pm in @INC (@INC contains: /usr/perl5/5.8.4/lib/sun4-solaris-64int /usr/perl5/5.8.4/lib /usr/perl5/site_perl/5.8.4/sun4-solaris-64int /usr/perl5/site_perl/5.8.4 /usr/perl5/site_perl /usr/perl5/vendor_perl/5.8.4/sun4-solaris-64int /usr/perl5/vendor_perl/5.8.4 /usr/perl5/vendor_perl .) at -e line 1. BEGIN failed--compilation aborted at -e line 1.
  • 那就没有安装
  • 我不这么认为,因为我运行 perl -e "use DBI" 并且我得到了同样的错误 Can't locate DBI.pm in @INC is not the DBI 默认情况下带有珀尔?我去了我的 perl 的 lib 文件夹,但在那里没有看到 DBI。作为 perl 学习的新手,我完全糊涂了
  • @Vicky 不,DBI 不附带标准的 perl 发行版。
  • @melpomene:你能帮我找到它吗?我知道它已安装在我的系统中,但我无法找到它?
猜你喜欢
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
  • 2019-09-26
  • 2012-05-28
  • 1970-01-01
  • 2012-07-03
相关资源
最近更新 更多