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

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

Can't locate Foo.pm in @INC

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

Если рассматриваемый модуль является основным модулем, обратитесь к Как исправить «Не удается найти архив / Tar.pm».

ikegami 14.12.2017 00:21

Будьте очень осторожны в отношении безопасности: все, что необходимо для гарантии того, что модули не были изменены, должно быть загружено безопасным способом с надежного сайта. См. мой ответ об использовании cpan.

vinc17 25.10.2019 16:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
200
2
284 122
24
Перейти к ответу Данный вопрос помечен как решенный

Ответы 24

sudo perl -MCPAN -e 'install Foo'

Великолепно, это сработало для меня только что в Windows с Git perl, но сначала мне пришлось установить GnuWin make

wytten 25.04.2019 22:26
Ответ принят как подходящий

В 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.

Пример:

$ 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 есть хороший инструмент под названием g-cpan, который собирает / устанавливает модуль из CPAN и создает для вас пакет Gentoo (ебилд).

Краткая форма - это просто "cpan Chocolate :: Belgian" из командной строки :)

brian d foy 27.09.2008 22:56

IIRC последняя версия ActivePerl больше не имеет командной строки ppm, теперь она открывает модный графический интерфейс.

Kev 08.11.2008 20:18

Просто "ppm" открывает графический интерфейс, но за ним следуют команды, которые остаются в командной строке. Итак, «ppm help», «ppm install ...» и т. д.

Bill Ruppert 14.04.2012 02:40

Обратите внимание, что ppm использует тире для разделителя пути модуля, а не обычные двойные двоеточия. (Возможно, потому, что двоеточие означает вождение в дозе?) Это меня несколько раз волновало;)

Matthew Lock 20.08.2013 03:48

@MatthewLock: ppm использует дефисы -, потому что вы указываете распределение, который хотите установить, что намного честнее. Например, если вы используете cpan для установки LWP, LWP::Simple или LWP::UserAgent, он установит для вас дистрибутив libwww-perl. Большинство дистрибутивов содержат один модуль с эквивалентным именем, но есть несколько подобных исключений.

Borodin 11.06.2014 01:52

Для UNIX и MacOS необходимо выполнить от имени пользователя root или с помощью sudo. В противном случае будет ошибка разрешения.

flow2k 20.09.2017 01:17

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

brian d foy 27.09.2008 22:58

Я заметил, что некоторые люди предлагают один запуск 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?

isomorphismes 15.03.2011 04:38

@Lao Tzu: нет, поскольку CPAN является основным модулем Perl и не доступен как отдельный пакет DEB. Я думаю, что в большинстве ситуаций даже лучше использовать App::cpanminus, пользоваться им такое удовольствие. Филип Поттер предлагает это в своем ответе здесь, и вы можете попробовать это Час. Оуэнс ответ.

w.k 22.03.2011 19:03

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

brian d foy 08.10.2008 11:26

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

Chas. Owens 09.07.2011 04:35

В Ubuntu вы можете просто установить cpanminus с терминала. Я считаю, что cpanm лучше, чем cpan, потому что он не выводит журналы ошибок на экран, а сохраняет их во временных файлах журналов и указывает путь в случае ошибок.

user13107 02.09.2016 10:42

Я получаю эту ошибку, когда пытаюсь выполнить вашу команду: Не удается найти strict.pm в @INC (возможно, потребуется установить модуль strict) (@INC содержит: / etc / perl

IgorGanapolsky 31.01.2017 00:08

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

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

IgorGanapolsky 31.01.2017 00:09

В 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.

"cpan.org" не перенаправляется на "cpan.org"?

Dave Everitt 12.04.2020 16:30

@DaveEveritt Перенаправление с http на https полезно только для конфиденциальности, например против того, кто может только смотреть на данные, передаваемые по сети. Но если злоумышленник контролирует сеть (например, общедоступную точку доступа Wi-Fi или некоторую незащищенную локальную сеть), атака "человек посередине" может быть возможным, и злоумышленник будет использовать свой собственный сервер (очевидно, не https://www.cpan.org/).

vinc17 13.04.2020 22:13

Другие вопросы по теме