Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl-将lib与具有依赖项的Perl模块一起使用_Perl_Ssh_Perl Module - Fatal编程技术网

Perl-将lib与具有依赖项的Perl模块一起使用

Perl-将lib与具有依赖项的Perl模块一起使用,perl,ssh,perl-module,Perl,Ssh,Perl Module,我有一个使用该模块的Perl脚本。由于它不属于“默认”Perl安装,因此我必须使用use lib功能将其包含在脚本中 现在,我的驱动器上有目录c:\lib\net\ssh\any\,我指定了这个目录:use lib c:/lib在我的脚本开头 它“起作用”:它没有说模块丢失了,但它说它找不到auto/Net/SSH2/autosplit.ix,最后没有后端在… 在c:\lib\目录中添加auto目录(包含正确的结构)并启动脚本时,出现以下错误: No backend available at..

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

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

它“起作用”:它没有说模块丢失了,但它说它找不到
auto/Net/SSH2/autosplit.ix
,最后
没有后端在…

c:\lib\
目录中添加
auto
目录(包含正确的结构)并启动脚本时,出现以下错误:

No backend available at... 在…没有可用的后端。。。 这是Net::SSH::Any的内部错误,它无法访问后端目录(已包括:/)

有人知道如何解决这样的问题吗?我希望我说得够清楚。

您需要使用。 这将允许您在另一个位置安装和加载一整套库及其依赖项。我使用cpanm来管理我的模块和类似这样的命令(我把它放在包装器脚本中)

其中,
$cpandir
是您的locallibdir,
$M
是您试图安装的模块

然后在代码中指定

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

export PERL5LIB=/home/myusername/mymods/

这个问题是由于模块是在32位windows上下载和安装的,但我尝试在perl 64位安装上运行它!因此无法正确执行Net::SSH2所需的模块

恢复:

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

-我的脚本中的模块定义:
使用lib'c:\lib'

您不能使用
cpan
程序正常安装模块吗?您是否安装了
Net::SSH2
Net::OpenSSH
?两者之一似乎是
Any
module.Net::SSH2需要libssh2库,而IIRC需要openssl库。检查是否可以加载Net::SSH2:
perl-Ic:\lib-MNet::SSH2-e1
。否则,请尝试使用一些工具,如
procmon
,找出失败的原因。谢谢Salva!您的命令似乎表明无法加载SSH2.dll文件。可能是因为我的windows不兼容(在我的旧xp 32位计算机上下载并安装了模块,但服务器是基于64位的),我将使用“完全”相同的配置重新安装它,然后返回给您!谢谢你,我把“如何解决”作为一个帖子回复。谢谢你的帮助和提示!Brainbuz,谢谢你的回复。实际上,PERL5LIB的工作方式与“使用lib”相同。PERL5LIB只是脚本之外的一个环境变量。我试过了,但结果是一样的。否则,使用这个“技巧”是因为我不能使用包管理器。我没有从相关服务器访问internet的权限,也没有修改公司标准perl包的权限。这就是为什么我必须只为这台服务器在另一个位置添加模块的原因。我有一个类似的情况——我将模块安装到具有相同操作系统和Internet访问架构的服务器上的另一个位置,然后使用tar和scp将目录复制到目标服务器。我在Windows上处理Perl已经有一段时间了,您有3个问题需要解决--让本地lib工作(我会做一些测试以确保它工作,并且问题在其他地方)、模块本身的问题,windows环境和您正在使用的特定windows perl的问题正在影响您的脚本。我想我或多或少已经是这样了。我已经在本地计算机上用我的“官方perl公司版本”+Net::SSH::Any模块开发了这个脚本,它正在工作。唯一的区别是,在我的计算机上,环境变量是由perl设置的,我不必处理PERL5LIB或使用lib功能。我试图将我的整个perl文件夹从我的计算机放到服务器上,但结果是一样的
export PERL5LIB=/home/myusername/mymods/