【问题标题】:Not able to use Net::SFTP module in Perl无法在 Perl 中使用 Net::SFTP 模块
【发布时间】:2014-05-30 16:13:07
【问题描述】:

我在我的 Linux Ubuntu 机器上使用 perl,v5.10.1。我尝试通过cpan 提示安装Net::SFTP 模块,但它在过去2 天内给出了以下错误。

警告:

Warning: no success downloading
'/root/.cpan/sources/authors/01mailrc.txt.gz.tmp19821'. Giving up on
it. at /usr/share/perl5/CPAN/Index.pm line 225

错误:

Connecting to www.perl.org|207.171.7.51|:80... failed: Connection
timed out.

Connecting to www.perl.org|207.171.7.41|:80... failed: Connection
timed out.

然后我通过 CPAN 站点通过 tar 文件方法安装了它。现在当我运行下面的示例脚本时,它会抛出错误。

脚本:

use Net::SFTP;

my $host = "169.144.106.231";
my %args = ( 
        user => "root",
        password => "******" );

my $sftp = Net::SFTP->new($host, %args);

错误:

Can't locate Net/SSH/Perl/Buffer.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/local/share/perl5/Net/SFTP/Buffer.pm line 6.
BEGIN failed--compilation aborted at /usr/local/share/perl5/Net/SFTP/Buffer.pm line 6.
Compilation failed in require at /usr/local/share/perl5/Net/SFTP/Attributes.pm line 7.
BEGIN failed--compilation aborted at /usr/local/share/perl5/Net/SFTP/Attributes.pm line 7.
Compilation failed in require at /usr/local/share/perl5/Net/SFTP.pm line 8.
BEGIN failed--compilation aborted at /usr/local/share/perl5/Net/SFTP.pm line 8.
Compilation failed in require at ankur_sftp.pl line 6.
BEGIN failed--compilation aborted at ankur_sftp.pl line 6.

我没有安装Net/SSH/Perl/Buffer.pm,并且很少有像Buffer.pm 这样的模块位于其他路径。

/root/Net-SFTP-0.10/blib/lib/Net/SFTP/Buffer.pm
/root/Net-SFTP-0.10/lib/Net/SFTP/Buffer.pm

我的@INC 包含

/usr/local/lib64/perl5
/usr/local/share/perl5
/usr/lib64/perl5/vendor_perl
/usr/share/perl5/vendor_perl
usr/lib64/perl5
/usr/share/perl5

有人可以帮忙吗?为什么cpan prompt 方法会抛出该错误?接下来是 tar 文件方法,如果存在模块依赖性问题,那么如何使用 CPAN tar 文件方法解决它?还有如何在正确的路径上安装模块,因为我不想在脚本开头的@INC 路径中添加所有必需的模块路径。我是这里的root用户。

【问题讨论】:

  • 您没有正确安装 Net::SFTP 模块。修复阻止 CPAN 工作的问题,然后使用它。
  • 使用 Net::SFTP::Foreign 在 Ubuntu 中作为 libnet-sftp-foreign-perl 可用。它还提供了一个模仿 Net::SFTP 的兼容性 API (Net::SFTP::Foreign::Compat)。

标签: linux perl net-sftp


【解决方案1】:

找不到 Net/SSH/Perl/Buffer.pm

这意味着缺少Net::SSH::Perl::Buffer 模块。你需要安装它。

Net/SFTP/Buffer.pm 与 Net::SSH::Perl::Buffer 不同。

你正面临依赖问题,要么你必须去 CPAN 并下载 tar 文件并安装模块,你必须为每个缺少的模块执行此操作。我建议您尝试 CPAN 客户端或 App::cpanminus 以便可以自动安装依赖项。

为此,请参阅:Installing perl dependency automatically in perl

我不想在@INC 路径中添加所有必需的模块路径 我的剧本的开头

然后确保@INC 包含安装模块的路径。你可以告诉它

export PERL5LIB=/home/foobar/code(适用于 Linux)(将此添加到 ~/.bashrc 以使其在您登录时始终可用。)

set PERL5LIB = c:\path\to\dir(适用于 Windows)

【讨论】:

  • 谢谢......我按照你说的做了......我的 @INC 现在包含所需的路径(/roo/Net-SSH-Perl-1.37/blib/lib & /root/Net-SFTP- 0.10/blib/lib) 但它仍然显示错误。 – BEGIN failed--compiled aborted at /root/Net-SSH-Perl-1.37/blib/lib/Net/SSH/Perl/Util/SSH2MP.pm line 6. Compilation failed in require at /root/Net-SSH-Perl -1.37/blib/lib/Net/SSH/Perl/Util.pm 第 56 行。还有更多其他模块...
  • 检查出错的行。我认为一个模块会有一个 require/use 行,这将丢失。所以你也需要安装它。
猜你喜欢
  • 1970-01-01
  • 2019-09-23
  • 1970-01-01
  • 1970-01-01
  • 2018-06-24
  • 1970-01-01
  • 1970-01-01
  • 2020-08-04
  • 2013-10-08
相关资源
最近更新 更多