【问题标题】:How can I tell cpan to change the target for the module installation?如何告诉 cpan 更改模块安装的目标?
【发布时间】:2010-03-29 02:40:06
【问题描述】:

当我从源代码安装 perl 时,第一个惊喜是无需执行任何操作,从现在开始安装的所有模块都可用于新的 perl。由于我没有在我的操作系统附带的 cpan 上找到一个模块,因此我必须将 onboard-perl 用于某些脚本。对于其中一个脚本,我想安装 Text::Format 或 Text::Autoformat(在 cpan 上找不到该模块的文档)。我的问题:如何告诉 cpan 为 OS-distro-perl 安装一次该模块?

【问题讨论】:

    标签: perl module cpan


    【解决方案1】:

    没有一种特殊的方法可以告诉 cpan 将模块安装到一个新位置以进行一次调用。但是,该功能与 local::lib 支持一起在我的待办事项列表中。我真正理解您的痛苦并想要相同的功能。我只是需要时间(或补丁)让它工作。

    在此之前,您必须进入 CPAN.pm shell 并更改 mbuild_argmakefilepl_arg 的值,如 perlfaq8: How do I keep my own module directory? 中所述:


    当你构建模块时,告诉 Perl 在哪里安装模块。

    对于基于 Makefile.PL 的发行版,在生成 Makefile 时使用 INSTALL_BASE 选项:

    perl Makefile.PL INSTALL_BASE=/mydir/perl
    

    您可以在您的 CPAN.pm 配置中进行设置,以便在您使用 CPAN.pm shell 时模块自动安装在您的私有库目录中:

    % cpan
    cpan> o conf makepl_arg INSTALL_BASE=/mydir/perl
    cpan> o conf commit
    

    对于基于 Build.PL 的发行版,使用 --install_base 选项:

    perl Build.PL --install_base /mydir/perl
    

    您也可以将 CPAN.pm 配置为自动使用此选项:

    % cpan
    cpan> o conf mbuild_arg "--install_base /mydir/perl"
    cpan> o conf commit
    

    【讨论】:

    • 对我不起作用。在这些配置之后,CPAN 仍然不礼貌地将SVG 包(cpan -i SVG)安装到$HOME/perl5/lib/perl5/ 中。
    【解决方案2】:

    每个 Perl 安装都有自己的关于库应该“存在”的位置的想法,CPAN 模块将其用作执行安装位置的指南。您可以通过执行perl -V 来查看这些值是什么,并查找@INC 的值(在底部)。如果您使用不同的 Perl(例如您的系统安装的 Perl)调用 CPAN,您将自动将模块安装到该 Perl 的首选位置:

    /usr/bin/perl -MCPAN -e shell
    

    或者直接安装一个模块而无需显式调用 CPAN shell:

    /usr/bin/cpan <modulename>
    

    还有可用的 CPAN 配置选项,您可以在其中临时或永久更改安装位置,但在您的情况下这不是必需的。

    【讨论】:

    • 我看不出这对他提出的问题有什么影响,“更改模块安装的目标”,这一切都与 PERL5LIB 相关,虽然适用,但与 CPAN 的安装位置无关.话虽如此,恭喜您阅读了这个问题。
    • 而且,AFAIK cpan/cpanp 在任何发行版中都不使用 @INC 的最后一个值,而是使用它们的发行版配置中的任何内容。
    • @Evan:不同的 CPAN 安装到不同的位置。使用与您要安装的 perl 对应的“cpan”可执行文件将“正常工作”,使用在安装时已设置的配置。
    • 运行不带参数的 cpan 已将您置于 CPAN.pm shell 中。
    【解决方案3】:

    /path/to/system/perl -MCPAN -e shell

    【讨论】:

    • 这和只运行cpan是一样的。
    • brian d foy: cpan 将为 PATH 中的第一个 perl 运行 cpan shell,而不是需要的 perl。
    • perl -MCPAN -e shell 和简单的cpan 有什么区别?
    【解决方案4】:

    我假设您只想将模块安装到其他位置,然后从该位置运行它们——您的问题对我来说不是很清楚。

    local::lib 上完整阅读 perldoc。尝试写得更好将是我的重大失败。这也是完成这项任务的最新和先进的方法。如果另一个解决方案没有引用这个模块,那么我个人的建议是像瘟疫一样避免它。

    【讨论】:

      猜你喜欢
      • 2010-12-14
      • 2014-01-27
      • 2013-09-24
      • 2010-10-28
      • 1970-01-01
      • 2016-07-08
      • 2010-10-07
      • 2018-06-19
      • 2014-12-06
      相关资源
      最近更新 更多