【问题标题】:Force perl to use module-version if more are installed如果安装了更多,则强制 perl 使用模块版本
【发布时间】:2015-03-05 21:59:33
【问题描述】:

在我正在使用 perl 的服务器上安装。我无法在此安装中更改任何内容,因此我安装了 cpanm 来创建我自己的 cpan 模块存储库。我在那里定义了 install-dir 并安装了模块。

问题是,有些模块已经安装在另一个版本的 server-perl 上。所以我收到以下错误消息(例如,我也为其他带有其他 pl 脚本的模块收到此错误消息)

Digest::MD5 object version 2.39 does not match bootstrap parameter 2.53 at /usr/lib64/perl5/DynaLoader.pm line 223.

在 /usr/lib64/perl5 中安装了 server-perl 模块。我的在另一个目录中。

如果他发现更多版本,我如何强制 perl 使用我的模块?这就是问题的根源吗?

谢谢!

【问题讨论】:

    标签: perl cpanm


    【解决方案1】:

    @INC 中的路径顺序很重要。将您的目录放在默认目录之前。你可以设置环境变量PERL5LIB指向你的目录来实现。

    【讨论】:

    • 我读到过,但我忘了提到,一旦设置了 PERL5LIB,就会发生错误。是否有可能在不设置 PER5LIB 的情况下将我的目录设置为 @INC 的头部?
    • 等等,DynaLoader?似乎涉及到两个不同版本的 Perl。
    • @choroba,不,Digest::MD5 是 @INC 中不应该出现的模块
    【解决方案2】:

    版本只能通过执行(加载)模块来确定,所以继续寻找其他版本是有问题的。

    带有二进制组件的模块安装在arch 目录中(例如.../x86_64-linux-gnu-thread-multi/...)。使用 INSTALL_BASE(由 local::lib 使用)在外部目录中安装也会创建特定于体系结构的库。您不应该在一个 Perl 安装中包含另一个 Perl 版本的 arch 目录。撤消您为添加它所做的一切。一个不恰当的PERL5LIB,也许吧?

    【讨论】:

    • 我安装了 local::lib 并将目录设置为~/lib/perl/cpan/locallib。我还设置了PERL5LIB,并认为我必须将其设置为~/lib/perl/cpan/locallib/lib/perl5。如果我这样做,它会自动将~/lib/perl/cpan/locallib/lib/perl5~/lib/perl/cpan/locallib/lib/perl5/x86_64-linux-thread-multi 添加到@INC。 PERL5LIB 的正确值是什么?只是本地::lib 目录?
    • 关于“PERL5LIB 的正确值是多少?” ~/lib/perl/cpan/locallib 如果您只使用了您当前用于将模块安装到该目录的 perl 构建。不是~/lib/perl/cpan/locallib(例如空),否则
    猜你喜欢
    • 1970-01-01
    • 2021-03-23
    • 2015-05-20
    • 2012-10-07
    • 2012-03-09
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多