it-swarm-ru.tech

Какой самый простой способ установить отсутствующий модуль Perl?

Я получаю эту ошибку:

Can't locate Foo.pm in @INC

Есть ли более простой способ его установки, чем загрузка, распаковка, создание и т.д.?

166
dreeves

В 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 в виде пакетов.

  • Debian/Ubuntu: apt-cache search 'Perl$'
  • Arch Linux: pacman -Ss '^Perl-'
  • Gentoo: категория dev-Perl

Вы должны всегда отдавать им предпочтение, так как вы получаете выгоду от автоматических (безопасность) обновлений и простоты удаление . Это может быть довольно сложно с самим инструментом cpan .

Для Gentoo есть инструмент Nice под названием g-cpan, который собирает/устанавливает модуль из CPAN и создает пакет Gentoo (- ebuild ) для вас.

202
Benedikt Waldvogel

Попробуйте App :: cpanminus :

# cpanm Chocolate::Belgian

Это здорово, просто чтобы установить вещи. Он не предоставляет ни одной из более сложных функций CPAN или CPANPLUS, поэтому его легко использовать, если вы знаете, какой модуль вы хотите установить. Если вы еще не получили cpanminus, просто наберите:

# cpan App::cpanminus

установить его.

Также возможно установить его вообще без использования cpan. Основная процедура bootstrap:

curl -L http://cpanmin.us | Perl - --Sudo App::cpanminus

Для получения дополнительной информации перейдите на страницу App :: cpanminus и посмотрите раздел по установке.

61
Philip Potter

Я отмечаю, что некоторые люди предлагают один запуск cpan под Sudo. Раньше это было необходимо для установки в системный каталог, но современные версии CPAN Shell позволяют вам настроить его для использования Sudo просто для установки. Это намного безопаснее, поскольку это означает, что тесты не запускаются от имени пользователя root.

Если у вас есть старая оболочка CPAN, просто установите новый cpan ("установить CPAN"), и когда вы перезагрузите оболочку, он должен попросить вас настроить эти новые директивы.

В настоящее время, когда я работаю в системе со старым CPAN, первое, что я делаю, это обновляю оболочку и настраиваю ее так, чтобы я мог выполнять большую часть своей работы cpan как обычный пользователь.

Кроме того, я настоятельно рекомендую пользователям Windows исследовать клубничный Perl . Это версия Perl, которая поставляется с предварительно сконфигурированной оболочкой CPAN и компилятором. Он также включает некоторые трудно компилируемые модули Perl с их зависимостями от внешней библиотеки C, в частности, XML :: Parser. Это означает, что вы можете делать то же самое, что и любой другой пользователь Perl, когда дело доходит до установки модулей, и вещи, как правило, "просто работают" гораздо чаще.

28
Dave Rolsky

Если вы находитесь в Ubuntu и хотите установить предварительно упакованный модуль Perl (например, geo :: ipfree), попробуйте это:

 $ apt-cache search Perl geo :: ipfree 
 libgeo-ipfree-Perl - Страна поиска модуля Perl ip-адреса 
 
 $ Sudo apt-get установить libgeo-ipfree-Perl 
23
Otto

Несколько человек упомянули утилиту cpan, но это больше, чем просто запуск Shell. Просто дайте ему модули, которые вы хотите установить, и дайте ему работать.

$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.
15
brian d foy

Sudo Perl -MCPAN -e 'install Foo'

11
dreeves

Также смотрите Да, даже вы можете использовать CPAN . Он показывает, как вы можете использовать CPAN, не имея доступа root или Sudo.

10
Corion

Отто сделал хорошее предложение . Это работает и для 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.

8
mikegrb

Уже ответил и принял ответ - но все равно:

ИМХО самый простой способ установки модулей CPAN (в системах, подобных unix, и не имеющих представления о вдовах):

curl -L http://cpanmin.us | Perl - --Sudo App::cpanminus

Вышесказанное устанавливает "установщик CPAN-модулей нулевой конфигурации" с именем cpanm. (Установка может занять несколько минут - не прерывайте процесс)

а после - просто:

cpanm Foo
cpanm Module::One
cpanm Another::Module
7
jm666

Много рекомендаций для CPAN.pm, и это здорово, но если вы используете Perl 5.10, вы также получите доступ к CPANPLUS.pm, который похож на CPAN.pm, но лучше.

И, конечно, он доступен на CPAN для людей, все еще использующих более старые версии Perl. Почему бы не попробовать:

$ cpan CPANPLUS
6
Dave Cross

Часто случается, что команда установки cpan завершается неудачно с сообщением типа "make test вернул плохой статус, не установит без силы"

В этом случае следующий способ установки модуля:

Perl -MCPAN -e "CPAN::Shell->force(qw(install Foo::Bar));"
5
jaxbihani

В Ubuntu большинство модулей Perl уже упакованы, поэтому установка происходит намного быстрее, чем в большинстве других систем, которые приходится компилировать.

Например, чтобы установить Foo::Bar в командной строке, обычно просто выполните:

Sudo apt-get install libfoo-bar-Perl

К сожалению, не все модули следуют этому соглашению об именах.

4
Myforwik

Даже это должно работать:

cpan -i module_name
4
Mandar Pande

Используйте команду 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
4
Chankey Pathak

Самый простой способ для меня это:

Perl_MM_USE_DEFAULT=1 Perl -MCPAN -e 'install DateTime::TimeZone'

а) автоматическое рекурсивное обнаружение/разрешение/установка зависимостей

б) это оболочка, хорошая для сценариев установки

3
Mister X

2 способа, которые я знаю о:

ИСПОЛЬЗУЯ PPM:

С Windows (ActivePerl) я использовал ppm

из командной строки введите ppm. На стр. Подскажите ...

ppm> install foo

или же

ppm> search foo

чтобы получить список доступных модулей foo. Введите help для всех команд

ИСПОЛЬЗУЯ CPAN:

вы также можете использовать CPAN следующим образом (* nix systems):

Perl -MCPAN -e 'Shell'

получает вам подсказку

cpan>

на быстрое ...

cpan> install foo  (again to install the foo module)

введите h, чтобы получить список команд для cpan

3
JWHEAT

В Fedora Linux или Enterprise Linuxyum также отслеживает зависимости библиотеки Perl. Таким образом, если модуль Perl доступен и какой-либо пакет rpm экспортирует эту зависимость, он установит нужный вам пакет.

yum install 'Perl(Chocolate::Belgian)'

(скорее всего, Perl-Chocolate-Бельгийская упаковка или даже ChocolateFactory)

3
Michal Ingeli

На Fedora вы можете использовать

# yum install foo

пока у Fedora есть существующий пакет для модуля.

3
Bruce Alderman

Если вы хотите поместить новый модуль в пользовательское место, которое не настроена для использования вашей оболочкой cpan, то, возможно, будет полезно следующее.

 #wget <URL to the module.tgz>
 ##unpack
 Perl Build.PL
./Build destdir=$HOME install_base=$HOME
./Build destdir=$HOME install_base=$HOME install
2
venkrao

Иногда вы можете использовать yum search foo для поиска соответствующего модуля Perl, а затем использовать yum install xxx для установки.

2
Chris Forever

Похоже, вы уже получили свой ответ, но я решил, что я буду вмешиваться. Это то, что я делаю в некоторых скриптах на 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([email protected]){
        system("cpanm $x");
        eval "use $x";
    }
}

Это хорошо работает для меня, может быть, здесь есть что-то, что вы можете использовать.

1
Ed Dunn

В Windows с дистрибутивом Perl ActiveState используйте команду ppm .

1
PW.

Простое выполнение cpan Foo::Bar в Shell будет служить цели.

1
Kamal Nayan