1

我有一个使用模块的 Perl 脚本Net::SSH::Any。由于它不属于“默认” Perl 安装,因此我必须使用该use lib功能将其包含在我的脚本中。

现在,我的驱动器上有目录,我在脚本的开头c:\lib\net\ssh\any\指定了这个:use lib c:/lib;

它“有效”:它没有说模块丢失,但它说它无法找到auto/Net/SSH2/autosplit.ix并且最后no backend available at...

当我在目录中添加auto目录(包含正确的结构)c:\lib\并启动脚本时,我收到此错误:

没有可用的后端...

这是 Net::SSH::Any 的内部错误,提及它无法访问后端目录(已包含:/)

有谁知道如何解决这样的问题?我希望我足够清楚。

4

2 回答 2

1

您需要使用Local::Lib。这将允许您在备用位置安装和加载一大堆库及其依赖项。我使用 cpanm 来管理我的模块和类似这样的命令(我将其放入包装脚本中)。

cpanm -L $cpandir $M --no-skip-installed

$cpandir您的 locallibdir在哪里,是您$M要安装的模块。

然后在您的代码中指定

use local::lib '~/foo'; 

但是,我建议设置一个PERL5LIB环境变量,它会将您的自定义位置附加到@INC并使额外的 use local::lib 行变得不必要。您通常会使用以下行编辑.bashrc.profile在您的主目录中:

export PERL5LIB=/home/myusername/mymods/
于 2013-09-05T14:40:47.910 回答
1

该问题是由于该模块已下载并安装在 32 位 Windows 上,但我尝试在 perl 64 位安装上运行它!所以 Net::SSH2 所需的模块无法正确执行。

恢复:

-如何检测问题:通过执行以下命令:(感谢 Salva)“perl -Ic:\lib -MNet::SSH2 -e1”

-我的脚本中的模块定义: use lib 'c:\lib';

于 2013-09-06T07:53:56.647 回答