Perl-将lib与具有依赖项的Perl模块一起使用
我有一个使用该模块的Perl脚本。由于它不属于“默认”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..
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/