Какой самый простой способ установить отсутствующий модуль Perl?
Вопрос
Я получаю эту ошибку:
Can't locate Foo.pm in @INC
Есть ли более простой способ установить его, чем загружать, распаковывать, создавать и т. д.?
Решение
В Unix:
обычно ты начинаешь cpan в вашей оболочке:
# cpan
и введите
install Chocolate::Belgian
или в краткой форме:
cpan Chocolate::Belgian
В Windows:
Если вы используете ActivePerl в Windows, PPM (менеджер пакетов Perl) имеет большую часть той же функциональности, что и CPAN.pm.
Пример:
# ppm
ppm> search net-smtp
ppm> install Net-SMTP-Multipart
видеть Как установить модули Perl? в FAQ по CPAN
Многие дистрибутивы поставляют множество модулей Perl в виде пакетов.
- Дебиан/Убунту:
apt-cache search 'perl$'
- Арч Линукс:
pacman -Ss '^perl-'
- Генту:категория
dev-perl
Вам следует всегда предпочитайте их, поскольку вы получаете выгоду от автоматического (безопасности) обновления и легкость удаление.Это может быть довольно сложно с cpan сам инструмент.
Для Gentoo есть хороший инструмент под названием g-cpan который собирает/устанавливает модуль из CPAN и создает пакет Gentoo (ebuild) для тебя.
Другие советы
Пытаться Приложение::cpanminus:
# cpanm Chocolate::Belgian
Это отлично подходит для того, чтобы просто установить что-то.Он не предоставляет ни одной из более сложных функций CPAN или CPANPLUS, поэтому его легко использовать, если вы знаете, какой модуль вы хотите установить.Если у вас еще нет cpanminus, просто введите:
# cpan App::cpanminus
чтобы установить его.
Также возможно установить его вообще без использования cpan.Основная процедура начальной загрузки:
curl -L http://cpanmin.us | perl - --sudo App::cpanminus
Для получения дополнительной информации перейдите на страницу App::cpanminus и просмотрите раздел, посвященный установке.
Я отмечаю, что некоторые люди предлагают один запуск cpan под sudo.Раньше это было необходимо установить в системный каталог, но современные версии оболочки CPAN позволяют настроить ее для использования sudo. только для установки.Это намного безопаснее, поскольку означает, что тесты не запускаются от имени пользователя root.
Если у вас есть старая оболочка CPAN, просто установите новую cpan («установите CPAN»), и когда вы перезагрузите оболочку, она должна предложить вам настроить эти новые директивы.
В настоящее время, когда я работаю в системе со старым CPAN, первое, что я делаю, это обновляю оболочку и настраиваю ее для этого, чтобы я мог выполнять большую часть своей работы с cpan как обычный пользователь.
Кроме того, я настоятельно рекомендую пользователям Windows изучить клубника Перл.Это версия Perl, которая поставляется с предварительно настроенной оболочкой CPAN и компилятором.Он также включает в себя некоторые трудные для компиляции модули Perl с их зависимостями от внешней библиотеки C, в частности XML::Parser.Это означает, что вы можете делать то же самое, что и любой другой пользователь Perl, когда дело доходит до установки модулей, и все чаще «просто работает».
Если вы используете Ubuntu и хотите установить предварительно упакованный модуль perl (например, geo::ipfree), попробуйте следующее:
$ apt-cache search perl geo::ipfree libgeo-ipfree-perl - A look up country of ip address Perl module $ sudo apt-get install libgeo-ipfree-perl
Несколько человек упомянули утилиту cpan, но это больше, чем просто запуск оболочки.Просто дайте ему модули, которые вы хотите установить, и пусть он делает свою работу.
$prompt> cpan Foo::Bar
Если вы не дадите ему никаких аргументов, он запустит оболочку CPAN.pm.Это работает в Unix, Mac и должно работать нормально в Windows (особенно Strawberry Perl).
Есть еще несколько вещей, которые вы можете сделать с помощью инструмента cpan.Вот краткий обзор текущих функций (которые могут быть новее, чем те, которые входят в состав CPAN.pm и perl):
-a
Creates the CPAN.pm autobundle with CPAN::Shell->autobundle.
-A module [ module ... ]
Shows the primary maintainers for the specified modules
-C module [ module ... ]
Show the Changes files for the specified modules
-D module [ module ... ]
Show the module details. This prints one line for each out-of-date module (meaning,
modules locally installed but have newer versions on CPAN). Each line has three columns:
module name, local version, and CPAN version.
-L author [ author ... ]
List the modules by the specified authors.
-h
Prints a help message.
-O
Show the out-of-date modules.
-r
Recompiles dynamically loaded modules with CPAN::Shell->recompile.
-v
Print the script version and CPAN.pm version.
sudo perl -MCPAN -e 'install Foo'
Также см Да, даже вы можете использовать CPAN.Он показывает, как вы можете использовать CPAN без доступа root или sudo.
Отто сделал хорошее предложение.Это работает и для Debian, а также для любого другого производного Debian.Недостающий фрагмент — это то, что делать, если поиск apt-cache ничего не находит.
$ sudo apt-get install dh-make-perl build-essential apt-file
$ sudo apt-file update
Затем, когда у вас есть случайный модуль, который вы хотите установить:
$ cd ~/some/path
$ dh-make-perl --build --cpan Some::Random::Module
$ sudo dpkg -i libsome-random-module-perl-0.01-1_i386.deb
Это даст вам пакет deb, который вы можете установить, чтобы получить Some::Random::Module.Одним из больших преимуществ здесь является то, что страницы руководства и примеры сценариев в дополнение к самому модулю будут размещены в выбранном вами месте дистрибутива.Если в дистрибутиве когда-либо появится официальный пакет для более новой версии Some::Random::Module, он будет автоматически установлен при обновлении с помощью apt-get.
Уже ответил и принял ответ - но все равно:
ИМХО, самый простой способ установки модулей CPAN (в unix-подобных системах и понятия не имею о Windows):
curl -L http://cpanmin.us | perl - --sudo App::cpanminus
Вышеуказанное устанавливает «установщик модулей CPAN с нулевой конфигурацией», который называется cpanm
.(Установка может занять несколько минут — не прерывайте процесс)
и после - просто:
cpanm Foo
cpanm Module::One
cpanm Another::Module
Много рекомендаций по CPAN.pm
, и это здорово, но если вы используете Perl 5.10
тогда у вас также есть доступ к CPANPLUS.pm
что похоже CPAN.pm
но лучше.
И, конечно же, он доступен на CPAN
для людей, все еще использующих старые версии Perl.Почему бы не попробовать:
$ cpan CPANPLUS
Много раз случается, что команда установки cpan завершается с ошибкой и появляется сообщение типа"make test возвратил неверный статус, не будет установлен без принудительного вмешательства"
В этом случае следующий способ установки модуля:
perl -MCPAN -e "CPAN::Shell->force(qw(install Foo::Bar));"
В Ubuntu большинство модулей Perl уже упакованы, поэтому установка происходит намного быстрее, чем в большинстве других систем, которые приходится компилировать.
Установить Foo::Bar
например, в командной строке обычно вы просто делаете:
sudo apt-get install libfoo-bar-perl
К сожалению, не все модули следуют этому соглашению об именах.
Даже это должно работать:
cpan -i module_name
Используйте команду cpan как cpan Modulename
$ cpan HTML::Parser
Чтобы автоматически установить зависимости, выполните следующие действия:
$ perl -MCPAN -e shell
cpan[1]> o conf prerequisites_policy follow
cpan[2]> o conf commit
exit
я предпочитаю Приложение::cpanminus, он автоматически устанавливает зависимости.Просто делать
$ cpanm HTML::Parser
2 способа, которые я знаю:
ИСПОЛЬЗОВАНИЕ PPM:
С Окна (ActivePerl) Я использовал ppm
из командной строки введите ppm.По запросу ppm...
ppm> install foo
или
ppm> search foo
чтобы получить список доступных модулей foo.Тип помощь для всех команд
ИСПОЛЬЗОВАНИЕ CPAN:
вы также можете использовать CPAN вот так (*nix-системы) :
perl -MCPAN -e 'shell'
получает вам подсказку
cpan>
по подсказке...
cpan> install foo (again to install the foo module)
введите h, чтобы получить список команд для cpan
В Fedora вы можете использовать
# yum install foo
до тех пор, пока в Fedora существует пакет для этого модуля.
На Fedora Linux
или Enterprise Linux
, yum
также отслеживает зависимости библиотеки Perl.Итак, если модуль perl доступен и какой-то пакет rpm экспортирует эту зависимость, он установит для вас нужный пакет.
yum install 'perl(Chocolate::Belgian)'
(скорее всего пакет perl-Chocolate-Belgian или даже пакет ChocolateFactory)
Самый простой способ для меня:
PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install DateTime::TimeZone'
а) автоматическое обнаружение/разрешение/установка рекурсивных зависимостей
б) это онлайн-оболочка, подходящая для установочных скриптов
Если вы хотите разместить новый модуль в произвольном месте, для использования которого ваша оболочка cpan не настроена, возможно, вам будет полезно следующее.
#wget <URL to the module.tgz>
##unpack
perl Build.PL
./Build destdir=$HOME install_base=$HOME
./Build destdir=$HOME install_base=$HOME install
Иногда вы можете использовать yum search foo
для поиска относительного модуля Perl, затем используйте yum install xxx
установить.
В Windows с дистрибутивом Perl ActiveState используйте команду ppm команда.
Просто выполнение cpan Foo::Bar
on Shell послужит этой цели.
Кажется, вы уже получили ответ, но я решил вмешаться.Это то, что я делаю в некоторых сценариях на Ubuntu (или сервере Debian)
#!/usr/bin/perl
use warnings;
use strict;
#I've gotten into the habit of setting this on all my scripts, prevents weird path issues if the script is not being run by root
$ENV{'PATH'} = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin';
#Fill this with the perl modules required for your project
my @perl = qw(LWP::Simple XML::LibXML MIME::Lite DBI DateTime Config::Tiny Proc::ProcessTable);
chomp(my $curl = `which curl`);
if(!$curl){ system('apt-get install curl -y > /dev/null'); }
chomp(my $cpanm = system('/bin/bash', '-c', 'which cpanm &>/dev/null'));
#installs cpanm if missing
if($cpanm){ system('curl -s -L http://cpanmin.us | perl - --sudo App::cpanminus'); }
#loops through required modules and installs them if missing
foreach my $x (@perl){
eval "use $x";
if($@){
system("cpanm $x");
eval "use $x";
}
}
У меня это хорошо работает, возможно, здесь есть что-то, что вы можете использовать.