Какой самый простой способ установить отсутствующий модуль Perl?
Я получаю эту ошибку:
Can't locate Foo.pm in @INC
Есть ли более простой способ его установки, чем загрузка, распаковка, создание и т. Д.?
23 ответа
В Unix:
обычно вы запускаете cpan в вашей оболочке:
# cpan
и введите
install Chocolate::Belgian
или в краткой форме:
cpan Chocolate::Belgian
В Windows:
Если вы используете ActivePerl в Windows, PPM (Perl Package Manager) обладает практически теми же функциями, что и CPAN.pm.
Пример:
# ppm
ppm> search net-smtp
ppm> install Net-SMTP-Multipart
см. Как установить модули Perl? в FAQ по CPAN
Многие дистрибутивы поставляют множество Perl-модулей в виде пакетов.
- Gentoo: категория dev-perl
- Debian:
apt-cache search '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. Это версия Perl, которая поставляется с предварительно настроенной оболочкой CPAN, а также с компилятором. Он также включает в себя некоторые трудно компилируемые модули Perl с их зависимостями от внешней библиотеки C, в частности, XML::Parser. Это означает, что вы можете делать то же самое, что и любой другой пользователь Perl, когда дело доходит до установки модулей, и вещи, как правило, "просто работают" гораздо чаще.
Если вы работаете в Ubuntu и хотите установить предварительно упакованный модуль perl (например, geo::ipfree), попробуйте это:
$ apt-cache search perl geo:: ipfree libgeo-ipfree-perl - Поиск страны IP-адреса модуля Perl $ 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.
Также смотрите Да, даже вы можете использовать CPAN. Он показывает, как вы можете использовать CPAN без доступа root или sudo.
Уже ответил и принял ответ - но все равно:
ИМХО самый простой способ установки модулей CPAN (в системах, подобных Unix, и не имеющих представления о вдовах):
curl -L http://cpanmin.us | perl - --sudo App::cpanminus
Вышеуказанная установка "установщик модулей CPAN нулевой конфигурации" называется cpanm
, (Установка может занять несколько минут - не прерывайте процесс)
а после - просто:
cpanm Foo
cpanm Module::One
cpanm Another::Module
Отто сделал хорошее предложение. Это работает и для 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 как cpan Modulename
$ cpan HTML::Parser
Для установки зависимостей автоматически следуйте приведенным ниже инструкциям.
$ perl -MCPAN -e shell
cpan[1]> o conf prerequisites_policy follow
cpan[2]> o conf commit
exit
Я предпочитаю App:: cpanminus, он устанавливает зависимости автоматически. Просто делать
$ cpanm HTML::Parser
Много рекомендаций для CPAN.pm
, это здорово, но если вы используете Perl 5.10
тогда у вас также есть доступ к CPANPLUS.pm
который как CPAN.pm
но лучше
И, конечно же, это доступно на CPAN
для людей, все еще использующих старые версии Perl. Почему бы не попробовать:
$ cpan CPANPLUS
Часто случается, что команда cpan install завершается неудачно с сообщением типа"make test вернул плохое состояние, без установки не будет"
В этом случае следующий способ установки модуля:
perl -MCPAN -e "CPAN::Shell->force(qw(install Foo::Bar));"
В Ubuntu большинство модулей Perl уже упакованы, поэтому установка происходит намного быстрее, чем в большинстве других систем, которые приходится компилировать.
Установить Foo::Bar
в командной строке, например, обычно вы просто делаете:
sudo apt-get install libfoo-bar-perl
К сожалению, не все модули следуют этому соглашению об именах.
На Fedora Linux
или же Enterprise Linux
, yum
также отслеживает зависимости библиотеки Perl. Таким образом, если модуль perl доступен, и какой-то пакет rpm экспортирует эту зависимость, он установит подходящий для вас пакет.
yum install 'perl(Chocolate::Belgian)'
(скорее всего, пакет perl-Chocolate-Belgian или даже пакет ChocolateFactory)
Безопасное решение
Во многих ответах упоминается использование cpan
утилита (которая использует CPAN.pm
) без слова о безопасности. По умолчанию,CPAN
2.27 и более ранние конфигурации urllist
использовать http URL (а именно, http://www.cpan.org/), который допускает атаки MITM, поэтому небезопасно. Это то, что используется для загрузкиCHECKSUMS
файлы, поэтому его нужно изменить на безопасный URL (например, https://www.cpan.org/).
Итак, после запуска cpan и принятия конфигурации по умолчанию вам необходимо изменить сгенерированный MyConfig.pm
файл (выводится полный путь) следующим образом. Заменить
'urllist' => [q[http://www.cpan.org/]],
по
'urllist' => [q[https://www.cpan.org/]],
Примечание. Https недостаточно; вам также нужен веб-сайт, которому можно доверять. Так что будьте осторожны, если хотите выбрать какое-то произвольное зеркало.
Тогда вы можете использовать cpan
обычным способом.
На Fedora вы можете использовать
# yum install foo
до тех пор, пока Fedora имеет существующий пакет для модуля.
Самый простой способ для меня это:
PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install DateTime::TimeZone'
а) автоматическое рекурсивное обнаружение / разрешение / установка зависимостей
б) это оболочка, хорошая для сценариев установки
2 способа, которые я знаю о:
ИСПОЛЬЗОВАНИЕ PPM:
С Windows (ActivePerl) я использовал ppm
из командной строки введите ppm. По приглашению ppm...
ppm> install foo
или же
ppm> search foo
чтобы получить список доступных модулей foo. Введите help для всех команд
ИСПОЛЬЗУЯ CPAN:
Вы также можете использовать CPAN следующим образом (* nix системы):
perl -MCPAN -e 'shell'
получает вам подсказку
cpan>
по быстрому...
cpan> install foo (again to install the foo module)
введите h, чтобы получить список команд для cpan
Иногда вы можете использовать yum search foo
для поиска соответствующего модуля Perl, затем используйте yum install xxx
установить.
Если вы хотите поместить новый модуль в нестандартное место, которое не настроена для вашей оболочки cpan, то, возможно, вам пригодится следующее.
#wget <URL to the module.tgz>
##unpack
perl Build.PL
./Build destdir=$HOME install_base=$HOME
./Build destdir=$HOME install_base=$HOME install
В Windows с дистрибутивом Perl ActiveState используйте команду ppm.
Похоже, вы уже получили свой ответ, но я решил, что я буду вмешиваться. Это то, что я делаю в некоторых скриптах на 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";
}
}
Это хорошо работает для меня, может быть, здесь есть что-то, что вы можете использовать.
Просто исполняю cpan Foo::Bar
на оболочке будет служить цели.