Как указать CPAN.pm использовать мини-cpan для конкретного приложения?

Есть ли способ использовать мини-CPAN для конкретных приложений (чтобы обеспечить определенные версии модулей для разных приложений и заставить установку работать без доступа к сети). «Стандартный» подход mini-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();

person sidler    schedule 19.07.2009    source источник
comment
Не могли бы вы вместо этого использовать PAR::Packer для упаковки вашего Perl-приложения?   -  person Nifle    schedule 19.07.2009
comment
PAR::Packer — полезное решение для распространения на ту же операционную систему, но оно не решает проблему управления версиями локальных копий модулей CPAN и установки на другую операционную систему (что, как я должен был упомянуть, необходимо, извините).   -  person sidler    schedule 20.07.2009


Ответы (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» значение false и очистить свой «список URL-адресов», чтобы в нем были только локальные минипанели.

person brian d foy    schedule 19.07.2009