有没有办法使用特定于应用程序的迷你CPAN(确保不同应用程序的特定模块版本,并使安装无需网络访问)。 '标准'mini-cpan方式依赖于在CPAN / Config.pm中设置'o conf urllist'和文件URL
单个mini-cpan就可以了。但是,我需要为每个应用程序(应用程序本地)的不同目录自动安装CPAN,因为每个应用程序都有不同的版本要求。
以下几乎有效,但之后只有一个部分正常工作的shell,仍然可以从网络抓取而不是使用$file_url
位置的mini-cpan:
use CPAN;
use FindBin qw($Bin);
my $file_url="file:///$Bin/../cpan";
CPAN::Shell->o(qw( conf urllist ),$file_url);
CPAN::shell();
答案 0 :(得分:5)
为每个应用程序加载不同的配置文件。最新的cpan命令有一个-j
开关来执行此操作:
$ cpan -j some/app/Config.pm -i Foo::Bar
此最新功能尚未包含在CPAN.pm发行版中,因为它是实验性的。但是,我已经使用了几个月,这是我DPAN工作的一部分。
如果你不喜欢这些,你只需提供特定于应用程序的CPAN::Config
模块,Perl会在找到你的个人版或网站版之前找到它。将当前的 CPAN / Config.pm 复制到应用程序模块目录中,并确保该目录位于@INC中(可能使用PERL5LIB
环境变量)。 CPAN.pm应首先找到它并使用它。它只使用它找到的第一个。这在配置修复时很方便,但由于您可以在模块中运行代码,因此它有点灵活。它的配置为Perl代码。
如果这对您不够好,您可以在应用程序中覆盖CPAN::HandleConfig()
,以便CPAN.pm不加载任何文件。然后,您自己设置值。当您有许多应用程序逻辑要解决以找出某些配置值时,这尤其方便。 CPAN.pm配置只是%CPAN::Config
哈希值,因此您只需为相应的键设置正确的值。
在任何情况下,您可能希望将“connect_to_internet_ok”配置设置为false值,并清除“urllist”以仅包含本地minicpans。