2009-07-19 5 views
4

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

Это нормально с одним мини-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(); 
+3

Не могли бы вы использовать PAR :: Packer для упаковки своего приложения perl? – Nifle

+0

PAR :: Packer - полезное решение для распространения в той же операционной системе, но не решает проблему версий локальных копий модулей CPAN и устанавливает их в другую операционную систему (о которой я должен был упомянуть, извините). – sidler

ответ

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» в ложное значение и очистить свой «urllist», чтобы иметь только локальные мини-паки.