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

140 dreeves [2008-09-15 22:16:00]

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

Can't locate Foo.pm in @INC

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

perl install cpan


23 ответа


173 Решение Benedikt Waldvogel [2008-09-15 22:17:00]

В 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) для вас.


55 Philip Potter [2010-08-28 11:34:00]

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

# cpanm Chocolate::Belgian

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

# cpan App::cpanminus

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

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

curl -L http://cpanmin.us | perl - --sudo App::cpanminus

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


27 Dave Rolsky [2008-09-15 23:08:00]

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

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

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

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


20 Otto [2008-09-15 22:21:00]

Если вы используете 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

13 brian d foy [2008-09-16 01:47:00]

Несколько человек упомянули утилиту 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.

9 dreeves [2008-09-15 22:17:00]

sudo perl -MCPAN -e 'install Foo'


9 Corion [2008-09-16 09:36:00]

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


7 mikegrb [2008-09-16 22:25:00]

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


6 jm666 [2011-05-22 21:19:00]

Уже ответил и принял ответ - но в любом случае:

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

curl -L http://cpanmin.us | perl - --sudo App::cpanminus

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

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

cpanm Foo
cpanm Module::One
cpanm Another::Module

4 jaxbihani [2012-11-10 05:24:00]

Много раз случается, что команда cpan install завершается с сообщением типа "сделать тест вернул плохой статус, не будет установлен без силы"

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

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

4 Dave Cross [2008-09-16 18:25:00]

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

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

$ cpan CPANPLUS

3 Bruce Alderman [2008-11-21 22:59:00]

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

# yum install foo

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


3 Mandar Pande [2011-05-22 18:55:00]

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

cpan -i module_name

3 JWHEAT [2008-09-15 22:27:00]

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

ИСПОЛЬЗОВАНИЕ PPM:

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

из командной строки типа 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 Chankey Pathak [2014-05-14 08:38:00]

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

2 Mister X [2016-12-28 14:16:00]

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

PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install DateTime::TimeZone'

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

b) это оболочка onliner, полезная для сценариев установки


2 Michal Ingeli [2014-10-30 13:39:00]

В Fedora Linux или Enterprise Linux, yum также отслеживает зависимости библиотеки perl. Итак, если модуль perl доступен, а некоторые пакеты rpm экспортируют эту зависимость, он установит для вас правильный пакет.

yum install 'perl(Chocolate::Belgian)'

(скорее всего, пакет perl-Chocolate-Belgian или пакет ChocolateFactory)


2 Myforwik [2013-02-22 16:02:00]

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

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

sudo apt-get install libfoo-bar-perl

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


1 PW. [2008-09-15 22:26:00]

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


1 venkrao [2013-09-11 21:06:00]

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

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

1 Chris Forever [2014-05-20 11:14:00]

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


0 Ed Dunn [2016-11-04 18:26:00]

Похоже, что у вас уже есть ответ, но я решил, что буду звонить. Это то, что я делаю в некоторых сценариях на 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";
    }
}

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


-1 Kamal Nayan [2015-10-01 12:56:00]

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