Как мне сказать CPAN.pm использовать мини-cpan для конкретного приложения?
Есть ли способ использовать мини-CPAN для конкретных приложений (чтобы обеспечить конкретные версии модулей для разных приложений и выполнить установку без сетевого доступа). "Стандартный" способ мини-cpan основан на установке "o conf urllist" с помощью URL-адреса файла в вашем CPAN/Config.pm.
Это нормально с одним мини-cpan. Однако мне нужно автоматизировать установку CPAN из разных каталогов для каждого приложения (локально для приложения), поскольку у каждого приложения свои требования к версии.
Следующее почти работает, но тогда имеет только частично работающую оболочку, и все еще выбирает из Интернета вместо использования мини-cpan из $file_url
место нахождения:
use CPAN;
use FindBin qw($Bin);
my $file_url="file:///$Bin/../cpan";
CPAN::Shell->o(qw( conf urllist ),$file_url);
CPAN::shell();
1 ответ
Вы загружаете разные файлы конфигурации для каждого приложения. Последняя команда 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", чтобы иметь только локальные минипаны.