【问题标题】:How do I tell CPAN.pm to use an application-specific mini-cpan?如何告诉 CPAN.pm 使用特定于应用程序的 mini-cpan?
【发布时间】:2010-11-12 02:18:26
【问题描述】:

有没有办法使用特定于应用程序的 mini-CPAN(以确保不同应用程序的特定模块版本并在没有网络访问的情况下进行安装)。 '标准' mini-cpan 方式依赖于在你的 CPAN/Config.pm 中使用文件 url 设置 'o conf urllist'

一个迷你cpan就可以了。但是,我需要自动为每个应用(应用本地)从不同的目录安装 CPAN,因为每个应用都有不同的版本要求。

以下几乎可以工作,但只有部分工作的外壳,并且仍然从网络获取而不是使用来自$file_url位置的迷你cpan:

use CPAN;
use FindBin qw($Bin);

my $file_url="file:///$Bin/../cpan";
CPAN::Shell->o(qw( conf urllist ),$file_url);

CPAN::shell();

【问题讨论】:

  • 您可以使用 PAR::Packer 来打包您的 perl 应用程序吗?
  • PAR::Packer 是分发到相同操作系统的有用解决方案,但不能解决 CPAN 模块的本地副本版本控制问题并安装到不同的操作系统(我应该有需要提及,抱歉)。

标签: perl cpan minicpan


【解决方案1】:

您为每个应用程序加载不同的配置文件。最新的cpan 命令有一个-j 开关可以做到这一点:

$ cpan -j some/app/Config.pm -i Foo::Bar

此最新功能尚未包含在 CPAN.pm 发行版中,因为它是实验性的。但是,作为我DPAN 工作的一部分,我已经使用它几个月了。

如果您不喜欢其中的任何一个,您只需在 Perl 找到您的个人或站点范围版本之前在某个地方提供您的应用程序特定的CPAN::Config 模块。将您当前的 CPAN/Config.pm 复制到您的应用程序模块目录中,并确保该目录位于 @INC 的首位(可能使用 PERL5LIB 环境变量)。 CPAN.pm 应该首先找到并使用它。它只使用它找到的第一个。当配置固定时,这很方便,尽管它有点灵活,因为您可以在模块中运行代码。配置为 Perl 代码。

如果这对您来说还不够好,您可以在您的应用程序中覆盖 CPAN::HandleConfig(),这样 CPAN.pm 就不会加载任何文件。然后您自己设置值。当您有很多应用程序逻辑需要解析以找出一些配置值时,这尤其方便。 CPAN.pm 配置只是 %CPAN::Config 哈希,因此您只需为相应的键设置正确的值。

无论如何,您可能希望将“connect_to_internet_ok”配置设置为 false 值并清除“urllist”以仅包含本地 minicpan。

【讨论】:

    猜你喜欢
    • 2011-05-18
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    相关资源
    最近更新 更多