【问题标题】:Why is prefix=/path/to/perllib not enough to set PERL5LIB?为什么 prefix=/path/to/perllib 不足以设置 PERL5LIB?
【发布时间】:2012-07-25 02:26:43
【问题描述】:

如果我创建一个 Perl 模块并将其安装为

perl Makefile.PL prefix=/path/to/perllib

然后我希望能够将 PERL5LIB 设置为 /path/to/perllib 并找到该模块。情况似乎并非如此。该模块被安装到 /path/to/perllib/site_perl/5.8.5/,因此 PERL5LIB 必须设置为(或传递给“使用 lib”)。

我在安装模块或如何设置 PERL5LIB 方面做错了吗?

【问题讨论】:

    标签: perl


    【解决方案1】:

    您将 PREFIX= 和 LIB= 混为一谈。

    发行版不仅仅包含模块。一方面,文档没有安装在与模块本身相同的目录中。 PREFIX= 告诉 Perl 所有组件的基本路径。

    LIB= 告诉 Perl 在哪里安装模块。

    使用(例如)

    perl Makefile.PL PREFIX=~ LIB=~/lib/perl5
    

    然后你会使用

    export PERL5LIB=~/lib/perl5
    

    【讨论】:

      【解决方案2】:

      不,它是这样工作的。前缀表示安装的根目录,但库目录通常位于该目录结构的更深处。

      如果您安装多个具有相同前缀的模块,它们应该都可以使用相同的PERL5LIB 值。

      【讨论】:

        【解决方案3】:

        长话短说,使用INSTALL_BASE 而不是PREFIX。它的工作方式更像其他安装程序的--prefix,并创建可预测的安装模式。然后你可以将PERL5LIB设置为<INSTALL_BASE>/lib/perl5然后去。

        ExtUtils::MakeMaker::FAQ 解释:

        PREFIX 的行为很复杂,并且很大程度上取决于您的 Perl 是如何 配置。由此产生的安装位置将因机器而异 甚至在同一台机器上安装不同的 Perl。正因为如此,其 很难记录前缀将放置模块的位置。

        相比之下,INSTALL_BASE 具有可预测、易于解释的安装位置。 现在 Module::Build 和 MakeMaker 都有 INSTALL_BASE 没有什么理由 使用 PREFIX 而非保留现有的安装位置。如果你 正在开始全新的 Perl 安装,我们鼓励您使用 INSTALL_BASE。如果你 通过 PREFIX 安装现有安装,请考虑将其移动到 安装结构匹配 INSTALL_BASE 并改用它。

        【讨论】:

          【解决方案4】:

          什么版本的perl?您应该只需要指定到 'site_perl' 的路径。对于不在 site_perl 下的库,您还应该指定到 'perllib' 的路径。更新的 perl 版本(5.8 或更高版本?)更好地让您只指定这两个目录,而不必指定版本和架构目录。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-03-29
            • 2021-11-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-12-16
            • 1970-01-01
            相关资源
            最近更新 更多