【问题标题】:Manual installation of a Perl Module手动安装 Perl 模块
【发布时间】:2011-11-24 08:33:25
【问题描述】:

我已下载模块Digest::SHA1 并将其解压缩到目录 (../Digest-SHA1-2.13/) ,然后将所有 SHA1.* 文件复制到 (../Digest-SHA1-2.13/Digest)

在 perl 脚本中,我做了:使用 Digest::SHA1; 像这样启动脚本:

perl -I ../Digest-SHA1-2.13/Digest perlscriptname.pl

我收到此错误:

Can't locate loadable object for module Digest::SHA1 in @INC

我认为它与共享库 (*.so) 有关?,我不知道如何从这里继续。

我可以使用 CPAN (-MCPAN) 模块直接安装它,因为我在该服务器上没有执行此操作的权限,并且只能在本地安装(应用程序正在运行的地方)。 我的最终目标是使用依赖于Digest::SHA1Algorithm::CouponCode

奇怪的是,我安装了 Digest::SHA1perl -MDigest::SHA1 -e 'print $Digest::SHA1::VERSION' 显示版本 2.11),仍然是 Algorithm::CouponCode(安装方式与我对 Digest::SHA1 的安装方式相同)抱怨它可以在 @987654332 中找到它@

谢谢!

【问题讨论】:

标签: perl perl-module


【解决方案1】:

使用此配方手动安装 perl 模块:

tar zxf Digest-SHA1-2.13.tar.gz
cd Digest-SHA1-2.13
perl Makefile.PL
make
make test
make install

请注意,某些发行版会有Build.PL 文件而不是Makefile.PL。在这种情况下,请使用以下配方:

tar zxf ...
cd ...
perl Build.PL
./Build
./Build test
./Build install

(您可能只需要运行make install./Build install。)

如果您需要更改安装目录,请使用:

perl Makefile.PL INSTALL_BASE=...

perl Build.PL --install_base ...

取决于模块的种类。

有关详细信息,请参阅ExtUtils::MakeMaker::FAQModule::Build 的 perldoc

【讨论】:

    【解决方案2】:

    有两种 Perl 模块:纯 Perl 和 XS。 Pure-Perl 模块完全用 Perl 编写,通常只需将 .pm 文件复制到适当的目录即可安装。 XS 模块是用 Perl 和 C 编写的(XS 被 ExtUtils::ParseXS 模块处理成 C 代码)并且需要 C 编译器来安装它们。

    正如 dsolimano 所说,当您没有 root 访问权限时,为系统 Perl 安装 Perl 模块的最简单方法是使用local::lib。 (你可以做与local::lib 自己做的事情一样的事情,但为什么要麻烦呢?)

    Digest::SHA1 单独工作但在您使用Algorithm::CouponCode 时不能工作的原因是系统 Perl 已经安装了 Digest::SHA1 的 2.11 版本。当您使用-I ../Digest-SHA1-2.13/Digest 时,use Digest::SHA1 会从 ../Digest-SHA1-2.13/Digest 中获取 Perl 代码,但是将从 XS 代码构建的共享库不在相应的位置。

    【讨论】:

    • local::lib 似乎坏了......它试图从非工作 URL 中获取模块......因此我无法安装任何东西
    • @soulSurfer2010,你应该问另一个问题(更多细节)。在 cmets 中讨论听起来太复杂了。
    • 好的,我将收集所有问题并发布一个新问题。与此同时,我接受的答案解决了这个问题,但现在我宁愿尝试挖掘为什么 local::lib 不起作用,它似乎是一个非常方便的模块
    【解决方案3】:

    有什么理由不能使用local::lib

    使用 PERL5LIB 为 perl 模块创建和使用本地 lib/

    它基本上是一个帮助您使用私有(非系统范围)目录作为 Perl 库目录的工具。

    设置完成后,你可以运行类似的命令

    perl -MCPAN -Mlocal::lib -e 'CPAN::install(Algorithm::CouponCode)'
    

    然后您的脚本将使用您在本地安装的 Algorithm::CouponCode) 副本。

    【讨论】:

      猜你喜欢
      • 2020-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      相关资源
      最近更新 更多