Как мне сказать CPAN.pm использовать мини-cpan для конкретного приложения? - PullRequest
4 голосов
/ 19 июля 2009

Есть ли способ использовать мини-CPAN для конкретных приложений (чтобы обеспечить определенные версии модулей для разных приложений и выполнить установку без сетевого доступа). «Стандартный» способ мини-cpan основан на установке «o conf urllist» с помощью URL-адреса файла в вашем CPAN / Config.pm

Отлично с одним мини-cpan. Однако мне нужно автоматизировать установку CPAN из разных каталогов для каждого приложения (локально для приложения), поскольку у каждого приложения свои требования к версии.

Следующее почти работает, но тогда имеет только частично работающую оболочку и все еще выбирает из Интернета вместо использования мини-cpan из $file_url location:

use CPAN;
use FindBin qw($Bin);

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

CPAN::shell();

1 Ответ

5 голосов
/ 19 июля 2009

Вы загружаете разные файлы конфигурации для каждого приложения. Последняя команда 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» ложное значение и очистить свой «urllist», чтобы иметь только локальные минипаны.

...