Який найпростіший спосіб встановити відсутній модуль Perl?


192

Я отримую цю помилку:

Can't locate Foo.pm in @INC

Чи є простіший спосіб її встановити, ніж завантажувати, знімати знімки, створювати тощо?


1
Якщо модуль, про який йде мова, є основним модулем, проконсультуйтесь як виправити "Не вдається знайти архів / Tar.pm" .
ikegami

Будьте дуже обережні щодо безпеки: те, що потрібно для того, щоб модулі не були змінені, потрібно надійно завантажувати з надійного сайту. Дивіться мою відповідь про використання cpan.
vinc17

Відповіді:


226

У 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 FAQ

Багато дистрибутивів постачають безліч модулів Perl у вигляді пакетів.

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

Ви завжди повинні віддавати перевагу їм, оскільки ви отримуєте переваги від автоматичних оновлень (безпеки) та простоти їх видалення . Це може бути досить складно з самим інструментом cpan .

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


14
Коротка форма - це просто "cpan Chocolate :: Belgian" з командного рядка :)
brian d foy

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

6
Просто "ppm" відкриває графічний інтерфейс, але слідом за командами він залишається в командному рядку. Отже, "довідка про мільйон", "встановлення ppm ..." і т. Д.
Білл Рупперт

Зауважте, що ppm використовує тире для роздільника шляху модуля, а не звичайних подвійних двокрап. (Можливо, тому, що колони мають на увазі драйви в дос?) Це потрапило мені кілька разів;)
Меттью Блок

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

65

Спробуйте додаток :: cpanminus :

# cpanm Chocolate::Belgian

Це чудово для того, щоб просто встановити речі. Він не забезпечує жодної більш складної функціональності CPAN або CPANPLUS, тому він простий у використанні, якщо ви знаєте, який модуль ви хочете встановити. Якщо ви ще не отримали cpanminus, просто введіть:

# cpan App::cpanminus

щоб встановити його.

Також його можна встановити, не використовуючи cpan. Основна процедура завантаження:

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

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


7
Використання cpanдля встановлення App::cpanminusтрохи дивно. Звичайні інструкції щодо встановлення передбачають процедуру завантаження завантаження частини її з cpanmin.us та використання її для встановлення решти. Це дозволяє уникнути конфігурації cpanта створення (далі) марного .cpanкаталогу.
Час. Оуенс

У Ubuntu ви можете просто встановити cpanminusз терміналу. Я вважаю, що cpanmкраще, ніж cpanчерез те, що він не ставить журнали помилок на екрані, а зберігає їх у тимчасових файлах журналу і дає шлях у випадку помилок.
користувач13107

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

29

Я зауважу, деякі люди пропонують пробіг cpan під судо. Це було потрібно для встановлення в системний каталог, але сучасні версії оболонки CPAN дозволяють налаштувати його на використання sudo лише для встановлення. Це набагато безпечніше, оскільки це означає, що тести не працюють як root.

Якщо у вас є стара оболонка CPAN, просто встановіть новий cpan ("встановити CPAN"), і коли ви перезавантажите оболонку, вона повинна запропонувати вам налаштувати ці нові директиви.

Сьогодні, коли я перебуваю в системі зі старим CPAN, перше, що я роблю, - це оновити оболонку та налаштувати її для цього, щоб я міг виконувати більшу частину роботи cpan як звичайний користувач.

Також я настійно пропоную користувачам Windows вивчити полуницю Perl . Це версія Perl, яка постачається в комплекті з попередньо налаштованою оболонкою CPAN, а також компілятором. Він також включає деякі складно складені модулі Perl з їх зовнішніми залежностями бібліотеки С, зокрема XML :: Parser. Це означає, що ви можете робити те саме, що і будь-який інший користувач Perl, коли мова заходить про встановлення модулів, а речі, як правило, «просто працюють» набагато частіше.


1
install CPANзвідки? $sudo apt-get install cpan?
ізоморфізм

1
@Lao Tzu: ні, оскільки CPAN є основним модулем Perl і не доступний як окремий пакет DEB. Я думаю, що в більшості ситуацій використовувати ще краще, користуватися App::cpanminusнею така радість. Філіп Поттер запропонував це у своїй відповіді тут, і ви можете спробувати цей Chas Відповідь Оуенса .
wk

25

Якщо ви перебуваєте на Ubuntu і хочете встановити попередньо упакований модуль perl (наприклад, geo :: ipfree), спробуйте це:

    $ apt-кеш пошуку perl geo :: ipfree
    libgeo-ipfree-perl - Шукає країну ip-адреси модуля Perl

    $ sudo apt - отримати встановити libgeo-ipfree-perl

Це чудово. Дякую.
Іван X

16

Кілька людей згадували про утиліту 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.

11

sudo perl -MCPAN -e 'install Foo'


Блискуче, це працювало для мене саме зараз на Windows з Git perl, але мені довелося встановити GnuWin make first
wytten


8

Отто зробив гарну пропозицію . Це працює і для Debian, як і будь-якого іншого похідного Debian. Відсутній фрагмент - що робити, коли пошук apt-кешу не знайде щось.

$ 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

Це дасть вам пакет дебютів, який ви можете встановити, щоб отримати модуль Some :: Random ::. Однією з головних переваг тут є підручні сторінки та зразки сценаріїв, крім того, що сам модуль буде розміщений у вибраному вами дистрибутиві. Якщо дистрибутив коли-небудь вийде з офіційним пакетом для нової версії Some :: Random :: Module, він буде автоматично встановлений під час оновлення apt-get.


7

Вже відповів і прийняв відповідь - але все одно:

IMHO, найпростіший спосіб встановлення модулів CPAN (на unix-системах, і поняття не мають про це):

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

Вищезазначене встановлення "встановленого CPAN модулів нульової конфігурації", що називається cpanm. (Інсталяція може зайняти кілька хвилин - не порушуйте процес)

а після - просто:

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

6

Багато рекомендацій щодо CPAN.pm, що чудово, але якщо ви користуєтеся Perl 5.10цим, ви також отримали доступ до CPANPLUS.pmякого як, CPAN.pmале краще.

І, звичайно, він доступний CPANдля людей, які все ще використовують старіші версії Perl. Чому б не спробувати:

$ cpan CPANPLUS

Хе, це мило. Використовуйте CPAN.pm, щоб замінити себе CPANPLUS. :)
Брайан d foy

5

Багато разів трапляється так, що команда cpan install не вдається з повідомленням типу "зробити тест повернувся поганим статусом, не встановиться без сили"

У цьому випадку наступним є спосіб встановлення модуля:

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

На жаль, це дає: Неможливо знайти CPAN.pm в @INC (можливо, вам доведеться встановити модуль CPAN) (@INC містить: / etc / perl
IgorGanapolsky

4

У ubuntu більшість модулів Perl вже упаковані, тому установка відбувається набагато швидше, ніж у більшості інших систем, які доводиться компілювати.

Foo::BarНаприклад, для встановлення у запиті на замовлення, як правило, ви просто:

sudo apt-get install libfoo-bar-perl

На жаль, не всі модулі дотримуються цього правила іменування.



4

Використовуйте команду 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

3

Я знаю два способи:

ВИКОРИСТАННЯ PPM:

У Windows (ActivePerl) я використовував 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


1
Ви також можете просто сказати "$ cpan Foo :: Bar" для установки безпосередньо з командного рядка. Не потрібні фантазійні однолінійки або оболонки CPAN. :)
Брайан d foy


3

На Fedora Linuxабо Enterprise Linux, yumтакож відстежує залежності бібліотеки perl. Отже, якщо модуль perl доступний, і якийсь пакет rpm експортує цю залежність, він встановить правильний пакет для вас.

yum install 'perl(Chocolate::Belgian)'

(найімовірніше, перль-шоколад-бельгійський пакет або навіть пакет шоколадуFactory)


3

Найпростіший спосіб для мене:

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

a) автоматичне рекурсивне виявлення залежності / усунення / встановлення залежності

б) це он-лайн оболонки, добре для сценаріїв налаштування


2

Якщо ви хочете помістити новий модуль у спеціальне місце, яке не використовує ваш оболонку 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

Іноді ви можете використовувати yum search fooдля пошуку відносного модуля perl, а потім використовувати yum install xxxдля встановлення.


2

Безпечне рішення

У багатьох відповідях згадується використання cpanутиліти (яка використовує CPAN.pm) без слова про безпеку. За замовчуванням CPAN2,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 "?
Дейв Еверітт

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

1

У Windows з розподілом PerS ActiveState використовуйте команду ppm .



1

Схоже, ви вже отримали свою відповідь, але я зрозумів, що я задзвонюся. Це те, що я роблю в деяких сценаріях на 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";
    }
}

Це добре працює для мене, можливо, тут є щось, що ви можете використати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.