Как мне сказать 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", чтобы иметь только локальные минипаны.

Другие вопросы по тегам