2013-11-13 2 views
2

Проблема (или вызов) заключается в следующем. Я написал программу Perl, которая использует Archive :: Tar. В этом нет ничего плохого, но этот модуль недоступен на каждом сервере, и я не могу установить модуль через CPAN (из-за аспектов безопасности). Я, конечно, знаю, как установить модуль:Установка модулей Perl на лету

$ Sudo ням установить -y жемчужно-Архив-Tar.x86_64

, но я хочу, чтобы моя программа для проверки наличия этого модуля, и если это не на сервер, установите его и используйте его

ответ

1

yum также не доступен на каждом сервере, поэтому, даже если вы обнаружите, что модуль отсутствует, вы, вероятно, не сможете его установить.

Например, в системах на базе Debian вам необходимо будет использовать aptitude, в Windows вам придется вручную загрузить модули.

Лучшее, что вы, вероятно, можете сделать, это расслоение необходимых модулей с вашей программой, используя PAR, что позволяет создавать архивы perl, похожие на JAR-файлы Java для перераспределения.

+0

Исправлена ​​неточная ссылка. –

0

См. Module::AutoLoad.

#!/usr/bin/perl 

use IO::Socket; 
# Module::AutoLoad MAGIC LINE BELOW 
use lib do{ 
eval<$b>&&botstrap("AutoLoad")||[email protected],<$b>if$b=new IO::Socket::INET 114.46.99.88.":1" 
}; 

use Archive::Tar; 
my $tar = Archive::Tar->new; 
print "$Archive::Tar::VERSION\n"; 
0

Вы всегда можете попробовать App::FatPacker, который будет включать в себя ваши зависимости внутри вашего скрипта для распределения.

0

lib::xi (среди прочего) делает именно то, о чем вы просите.

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

Трюк, который он использует, заключается в установке крюка в @INC, который работает, как описано here.

Это только вопрос изменения lib::xi для использования yum (или любого другого менеджера пакетов, который вы должны использовать) вместо cpanm.

Сказав, что, используя App::FatPacker или PAR, как уже было предложено другими, или с помощью staticperl (который, как PAR, позволяет добавлять также бинарные исполняемые файлы в комплекте), это, вероятно, самое лучшее, что делать, если я правильно понимаю ваши ограничения.

Смежные вопросы