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

StackOverflow https://stackoverflow.com/questions/65865

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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";
    }
}

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top