Я получаю такую ошибку:
Can't locate Foo.pm in @INC
Есть ли более простой способ его установки, чем загрузка, распаковка, создание и т. д.?
Будьте очень осторожны в отношении безопасности: все, что необходимо для гарантии того, что модули не были изменены, должно быть загружено безопасным способом с надежного сайта. См. мой ответ об использовании cpan.





sudo perl -MCPAN -e 'install Foo'
Великолепно, это сработало для меня только что в Windows с Git perl, но сначала мне пришлось установить GnuWin make
В Unix:
обычно вы запускаете cpan в своей оболочке:
$ cpan
и введите
install Chocolate::Belgian
или в краткой форме:
cpan Chocolate::Belgian
В Windows:
If you're using ActivePerl on Windows, the PPM (Perl Package Manager) has much of the same functionality as CPAN.pm.
Пример:
$ ppmppm> search net-smtpppm> install Net-SMTP-Multipart
см. Как установить модули Perl? в FAQ по CPAN
Многие дистрибутивы поставляют множество модулей Perl в виде пакетов.
apt-cache search 'perl$'pacman -Ss '^perl-'dev-perlВы должны всегда предпочесть их, поскольку вы получаете выгоду от автоматического (безопасного) обновления и простоты удаление. Это может быть довольно сложно с самим инструментом cpan.
Для Gentoo есть хороший инструмент под названием g-cpan, который собирает / устанавливает модуль из CPAN и создает для вас пакет Gentoo (ебилд).
Краткая форма - это просто "cpan Chocolate :: Belgian" из командной строки :)
IIRC последняя версия ActivePerl больше не имеет командной строки ppm, теперь она открывает модный графический интерфейс.
Просто "ppm" открывает графический интерфейс, но за ним следуют команды, которые остаются в командной строке. Итак, «ppm help», «ppm install ...» и т. д.
Обратите внимание, что ppm использует тире для разделителя пути модуля, а не обычные двойные двоеточия. (Возможно, потому, что двоеточие означает вождение в дозе?) Это меня несколько раз волновало;)
@MatthewLock: ppm использует дефисы -, потому что вы указываете распределение, который хотите установить, что намного честнее. Например, если вы используете cpan для установки LWP, LWP::Simple или LWP::UserAgent, он установит для вас дистрибутив libwww-perl. Большинство дистрибутивов содержат один модуль с эквивалентным именем, но есть несколько подобных исключений.
Для UNIX и MacOS необходимо выполнить от имени пользователя root или с помощью sudo. В противном случае будет ошибка разрешения.
Если вы используете 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
В Windows с дистрибутивом Perl ActiveState используйте команду промилле.
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
Вы также можете просто сказать «$ cpan Foo :: Bar» для установки непосредственно из командной строки. Нет необходимости в причудливой однострочной оболочке или оболочке из CPAN. :)
Я заметил, что некоторые люди предлагают один запуск cpan под sudo. Раньше это было необходимо для установки в системный каталог, но современные версии оболочки CPAN позволяют настроить ее для использования sudo только для установки. Это намного безопаснее, поскольку это означает, что тесты не запускаются от имени пользователя root.
Если у вас старая оболочка CPAN, просто установите новую cpan («установить CPAN»), и при перезагрузке оболочки она предложит вам настроить эти новые директивы.
В настоящее время, когда я нахожусь в системе со старым CPAN, первое, что я делаю, - это обновляю оболочку и настраиваю ее для этого, чтобы я мог выполнять большую часть своей работы cpan как обычный пользователь.
Кроме того, я настоятельно рекомендую пользователям Windows исследовать клубника перл. Это версия Perl, которая поставляется с предварительно настроенной оболочкой CPAN, а также с компилятором. Он также включает некоторые трудно компилируемые модули Perl с их зависимостями от внешних библиотек C, в частности XML :: Parser. Это означает, что вы можете делать то же самое, что и любой другой пользователь Perl, когда дело доходит до установки модулей, и вещи имеют тенденцию «просто работать» намного чаще.
install CPAN откуда? $sudo apt-get install cpan?
@Lao Tzu: нет, поскольку CPAN является основным модулем Perl и не доступен как отдельный пакет DEB. Я думаю, что в большинстве ситуаций даже лучше использовать App::cpanminus, пользоваться им такое удовольствие. Филип Поттер предлагает это в своем ответе здесь, и вы можете попробовать это Час. Оуэнс ответ.
Несколько человек упомянули утилиту 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.pm, и это здорово, но если вы используете Perl 5.10, у вас также есть доступ к CPANPLUS.pm, который похож на CPAN.pm, но лучше.
И, конечно же, он доступен на CPAN для людей, все еще использующих старые версии Perl. Почему бы не попробовать:
$ cpan CPANPLUS
Хех, это мило. Используйте CPAN.pm, чтобы заменить себя на CPANPLUS. :)
Отто сделал хорошее предложение. Это работает и для 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.
В Fedora вы можете использовать
# yum install foo
если в Fedora есть существующий пакет для модуля.
Попробуйте Приложение :: cpanminus:
# cpanm Chocolate::Belgian
Это отлично подходит для установки. Он не обеспечивает ни одной из более сложных функций CPAN или CPANPLUS, поэтому его легко использовать, если вы знаете, какой модуль вы хотите установить. Если у вас еще нет cpanminus, просто введите:
# cpan App::cpanminus
установить его.
Также возможно установить его вообще без использования cpan. Основная процедура начальной загрузки:
curl -L http://cpanmin.us | perl - --sudo App::cpanminus
Для получения дополнительной информации перейдите на страницу App :: cpanminus и посмотрите раздел по установке.
Использование cpan для установки App::cpanminus немного странно. Обычные инструкции по установке включают в себя процедуру начальной загрузки с загрузкой части из cpanmin.us и использованием ее для установки остальных. Это позволяет избежать настройки cpan и создания (после этого) бесполезного каталога .cpan.
В Ubuntu вы можете просто установить cpanminus с терминала. Я считаю, что cpanm лучше, чем cpan, потому что он не выводит журналы ошибок на экран, а сохраняет их во временных файлах журналов и указывает путь в случае ошибок.
Я получаю эту ошибку, когда пытаюсь выполнить вашу команду: Не удается найти strict.pm в @INC (возможно, потребуется установить модуль strict) (@INC содержит: / etc / perl
Даже должно работать:
cpan -i module_name
Уже ответил и принял ответ - но все равно:
ИМХО, самый простой способ установки модулей CPAN (в unix-подобных системах и понятия не имею о wondows):
curl -L http://cpanmin.us | perl - --sudo App::cpanminus
Вышеупомянутое устанавливает «установщик модулей CPAN нулевой конфигурации» под названием cpanm. (Установка может занять несколько минут - не прерывайте процесс)
а после - просто:
cpanm Foo
cpanm Module::One
cpanm Another::Module
Часто случается, что команда cpan install не работает с сообщением типа "make test вернул плохой статус, без принудительной установки не будет"
В этом случае модуль можно установить следующим образом:
perl -MCPAN -e "CPAN::Shell->force(qw(install Foo::Bar));"
К сожалению, это дает: Не удается найти CPAN.pm в @INC (возможно, потребуется установить модуль CPAN) (@INC содержит: / etc / perl
В ubuntu большинство модулей Perl уже упакованы, поэтому установка выполняется намного быстрее, чем в большинстве других систем, которые необходимо компилировать.
Чтобы установить Foo::Bar в командной строке, например, обычно вам просто нужно:
sudo apt-get install libfoo-bar-perl
К сожалению, не все модули следуют этому соглашению об именах.
Если вы хотите разместить новый модуль в произвольном месте, которое ваша оболочка cpan не настроена для использования, то, возможно, вам пригодится следующее.
#wget <URL to the module.tgz>
##unpack
perl Build.PL
./Build destdir=$HOME install_base=$HOME
./Build destdir=$HOME install_base=$HOME install
Используйте команду 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
Иногда вы можете использовать yum search foo для поиска соответствующего модуля Perl, а затем использовать yum install xxx для установки.
На Fedora Linux или Enterprise Linuxyum также отслеживает зависимости библиотеки Perl. Итак, если доступен модуль perl и какой-то пакет rpm экспортирует эту зависимость, он установит для вас нужный пакет.
yum install 'perl(Chocolate::Belgian)'
(скорее всего пакет perl-Chocolate-Belgian или даже пакет ChocolateFactory)
Этой цели послужит простой запуск cpan Foo::Bar в оболочке.
Похоже, вы уже получили свой ответ, но я решил, что вмешаюсь. Это то, что я делаю в некоторых сценариях на 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";
}
}
У меня это хорошо работает, может быть, здесь есть что-то, что можно использовать.
Для меня самый простой способ:
PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install DateTime::TimeZone'
а) автоматическое обнаружение / разрешение / установка рекурсивных зависимостей
б) это оболочка onliner, подходящая для скриптов установки
Безопасное решение
Во многих ответах упоминается использование утилиты cpan (которая использует CPAN.pm) без слов о безопасности. По умолчанию CPAN 2.27 и более ранние версии настраивают urllist для использования URL-адреса http (а именно, 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 обычным способом.
Мой отчет об ошибке на rt.cpan.org о небезопасном URL.
@DaveEveritt Перенаправление с http на https полезно только для конфиденциальности, например против того, кто может только смотреть на данные, передаваемые по сети. Но если злоумышленник контролирует сеть (например, общедоступную точку доступа Wi-Fi или некоторую незащищенную локальную сеть), атака "человек посередине" может быть возможным, и злоумышленник будет использовать свой собственный сервер (очевидно, не https://www.cpan.org/).
Если рассматриваемый модуль является основным модулем, обратитесь к Как исправить «Не удается найти архив / Tar.pm».