Jaki jest najprostszy sposób na zainstalowanie brakującego modułu Perla?

192

Otrzymuję ten błąd:

Can't locate Foo.pm in @INC

Czy istnieje łatwiejszy sposób na zainstalowanie niż pobieranie, rozpakowywanie, tworzenie itp.?

oskrzydla
źródło
1
Jeśli dany moduł jest modułem podstawowym, zapoznaj się z artykułem Jak naprawić „Nie można zlokalizować archiwum / Tar.pm” .
ikegami,
Zachowaj szczególną ostrożność w kwestii bezpieczeństwa: to, co jest potrzebne, aby moduły nie zostały zmodyfikowane, musi zostać bezpiecznie pobrane z zaufanej strony. Zobacz moją odpowiedź na temat korzystania z cpan.
vinc17

Odpowiedzi:

226

W systemie Unix :

zwykle zaczynasz cpan w swojej powłoce:

# cpan

i wpisz

install Chocolate::Belgian

lub w krótkiej formie:

cpan Chocolate::Belgian

W systemie Windows :

Jeśli używasz ActivePerl w systemie Windows, PPM (Perl Package Manager) ma wiele takich samych funkcji jak CPAN.pm.

Przykład:

# ppm
ppm> search net-smtp
ppm> install Net-SMTP-Multipart

zobacz Jak zainstalować moduły Perla? w FAQ CPAN

Wiele dystrybucji dostarcza wiele modułów perla jako pakiety.

  • Debian / Ubuntu: apt-cache search 'perl$'
  • Arch Linux: pacman -Ss '^perl-'
  • Gentoo: kategoria dev-perl

Należy zawsze wolą je jak korzystać z automatycznych (Security) aktualizacje i łatwość usuwania . Może to być dość trudne z samym narzędziem cpan .

Dla Gentoo jest ładne narzędzie o nazwie g-cpan, które buduje / instaluje moduł z CPAN i tworzy dla ciebie pakiet Gentoo ( ebuild ).

Benedikt Waldvogel
źródło
14
Skrócona forma to po prostu „cpan Chocolate :: Belgian” z wiersza poleceń :)
brian d foy
3
IIRC najnowszy ActivePerl nie ma już ppm wiersza poleceń, teraz otwiera fantazyjny GUI.
Kev
6
Po prostu „ppm” otwiera GUI, ale po poleceniach pozostaje w wierszu poleceń. Tak więc „pomoc ppm”, „instalacja ppm ...” itd.
Bill Ruppert,
Zauważ, że ppm używa myślników dla separatora ścieżki modułu, a nie zwykłych podwójnych dwukropków. (Być może dlatego, że dwukropki oznaczają dyski w dos?). To mnie kilka razy;)
Matthew Lock,
3
@MatthewLock: ppmużywa łączników, -ponieważ określasz dystrybucję , którą chcesz zainstalować, co jest o wiele bardziej uczciwe. Na przykład, jeśli użyjesz cpando zainstalowania LWP, LWP::Simplealbo LWP::UserAgentbędzie zainstalować dystrybucję libwww-perldla Ciebie. Większość dystrybucji zawiera pojedynczy moduł o równoważnej nazwie, ale istnieje kilka takich wyjątków
Borodin
65

Wypróbuj aplikację :: cpanminus :

# cpanm Chocolate::Belgian

Jest świetny do instalowania różnych rzeczy. Nie zapewnia żadnej bardziej złożonej funkcjonalności CPAN lub CPANPLUS, więc jest łatwy w użyciu, pod warunkiem, że wiesz, który moduł chcesz zainstalować. Jeśli nie masz jeszcze cpanminus, po prostu wpisz:

# cpan App::cpanminus

zainstalować.

Możliwe jest również zainstalowanie go bez użycia cpan. Podstawowa procedura ładowania początkowego to

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

Aby uzyskać więcej informacji, przejdź do strony App :: cpanminus i zapoznaj się z sekcją dotyczącą instalacji.

Philip Potter
źródło
7
Korzystanie cpanz instalacji App::cpanminusjest trochę dziwne. Normalne instrukcje instalacji obejmują procedurę ładowania, pobierając jej część z cpanmin.us i wykorzystując ją do zainstalowania reszty. Pozwala to uniknąć konfiguracji cpani utworzenia (potem) bezużytecznego .cpankatalogu.
Chas. Owens,
Na Ubuntu możesz po prostu zainstalować cpanminusz terminala. Uważam, że cpanmlepiej niż cpandlatego, że nie wyświetla dzienników błędów na ekranie, a raczej przechowuje je w tymczasowych plikach dziennika i podaje ścieżkę w przypadku błędów.
user13107,
Podczas próby wykonania polecenia pojawia się ten błąd: Nie można zlokalizować strict.pm w @INC (może być konieczne zainstalowanie ścisłego modułu) (@INC zawiera: / etc / perl
IgorGanapolsky 30.01.2017
29

Zwracam uwagę, że niektórzy sugerują jeden bieg cpan pod sudo. Kiedyś było to konieczne do zainstalowania w katalogu systemowym, ale nowoczesne wersje powłoki CPAN pozwalają ci skonfigurować ją tak, aby używała sudo tylko do instalacji. Jest to o wiele bezpieczniejsze, ponieważ oznacza, że ​​testy nie działają jako root.

Jeśli masz starą powłokę CPAN, po prostu zainstaluj nowy cpan („zainstaluj CPAN”), a po ponownym załadowaniu powłoki powinien wyświetlić monit o skonfigurowanie tych nowych dyrektyw.

W dzisiejszych czasach, kiedy jestem w systemie ze starym CPAN, pierwszą rzeczą, którą robię, jest aktualizacja powłoki i skonfigurowanie jej w taki sposób, aby mógł wykonywać większość moich operacji cpan jako normalny użytkownik.

Ponadto zdecydowanie sugeruję, aby użytkownicy Windows zbadali truskawkowego Perla . Jest to wersja Perla dostarczana ze wstępnie skonfigurowaną powłoką CPAN oraz kompilatorem. Zawiera także niektóre trudne do skompilowania moduły Perla z ich zewnętrznymi zależnościami biblioteki C, w szczególności XML :: Parser. Oznacza to, że możesz robić to samo, co każdy inny użytkownik Perla, jeśli chodzi o instalowanie modułów, a rzeczy często „po prostu działają”.

Dave Rolsky
źródło
1
install CPANSkąd? $sudo apt-get install cpan?
izomorfizmy
1
@Lao Tzu: nie, ponieważ CPAN jest modułem podstawowym Perla i nie jest dostępny jako osobny pakiet DEB. Myślę, że w większości sytuacji korzystanie z niego jest jeszcze lepsze, korzystanie z App::cpanminusniego jest tak przyjemne. Philip Potter sugeruje to w swojej odpowiedzi tutaj i możesz spróbować tego Chas. Odpowiedź Owensa .
wk
25

Jeśli korzystasz z systemu Ubuntu i chcesz zainstalować wstępnie spakowany moduł perla (na przykład geo :: ipfree), spróbuj tego:

    $ apt-cache search perl geo :: ipfree
    libgeo-ipfree-perl - Wyszukaj kraj adresu IP moduł Perl

    $ sudo apt-get install libgeo-ipfree-perl
Otto
źródło
To jest świetne. Dziękuję Ci.
Ivan X
16

Kilka osób wspomniało o narzędziu cpan, ale to coś więcej niż uruchomienie powłoki. Po prostu daj mu moduły, które chcesz zainstalować i pozwól mu działać.

$prompt> cpan Foo::Bar

Jeśli nie podasz żadnych argumentów, uruchamia powłokę CPAN.pm. Działa to na systemach Unix, Mac i powinno być w porządku na Windowsie (szczególnie Strawberry Perl).

Jest także kilka innych rzeczy, które możesz zrobić za pomocą narzędzia cpan. Oto podsumowanie obecnych funkcji (które mogą być nowsze niż te, które są dostarczane z CPAN.pm i 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.
Brian D. Foy
źródło
11

sudo perl -MCPAN -e 'install Foo'

dreeves
źródło
Świetnie, działało to dla mnie właśnie teraz na Windowsie z Git perl, ale najpierw musiałem zainstalować GnuWin make
wytten
8

Otto zasugerował . Działa to również dla Debiana, a także dla każdej innej pochodnej Debiana. Brakujący element jest tym, co należy zrobić, gdy wyszukiwanie apt-cache nie znajdzie czegoś.

$ sudo apt-get install dh-make-perl build-essential apt-file
$ sudo apt-file update

Następnie, gdy masz losowy moduł, który chcesz zainstalować:

$ cd ~/some/path
$ dh-make-perl --build --cpan Some::Random::Module
$ sudo dpkg -i libsome-random-module-perl-0.01-1_i386.deb

To da ci pakiet deb, który możesz zainstalować, aby uzyskać Some :: Random :: Module. Jedną z dużych zalet jest to, że strony podręcznika i przykładowe skrypty oprócz samego modułu zostaną umieszczone w wybranej lokalizacji dystrybucji. Jeśli dystrybucja kiedykolwiek wyjdzie z oficjalnym pakietem dla nowszej wersji Some :: Random :: Module, zostanie ona automatycznie zainstalowana po apt-get upgrade.

mikegrb
źródło
7

Już odpowiedziałem i zaakceptował odpowiedź - ale w każdym razie:

IMHO najprostszym sposobem instalowania modułów CPAN (na systemach uniksowych i nie mam pojęcia o cudach) jest:

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

Powyższe dotyczy instalacji „instalatora modułów CPAN o zerowej konfiguracji” cpanm. (Instalacja może potrwać kilka minut - nie przerywaj procesu)

a po - po prostu:

cpanm Foo
cpanm Module::One
cpanm Another::Module
jm666
źródło
6

Wiele rekomendacji dla CPAN.pm, co jest świetne, ale jeśli używasz, Perl 5.10masz również dostęp do, CPANPLUS.pmktóry jest jak, CPAN.pmale lepszy.

I oczywiście jest dostępny CPANdla osób, które nadal używają starszych wersji Perla. Dlaczego nie spróbować:

$ cpan CPANPLUS
Dave Cross
źródło
Heh, to urocze. Użyj CPAN.pm, aby zastąpić się CPANPLUS. :)
brian d foy,
5

Wiele razy zdarza się, że polecenie instalacji cpan kończy się niepowodzeniem i pojawia się komunikat „make test zwrócił zły status, nie można zainstalować bez użycia siły”

W takim przypadku sposób instalacji modułu to:

perl -MCPAN -e "CPAN::Shell->force(qw(install Foo::Bar));"
jaxbihani
źródło
Niestety daje to: Nie można zlokalizować CPAN.pm w @INC (może być konieczne zainstalowanie modułu CPAN) (@INC zawiera: / etc / perl
IgorGanapolsky 30.01.2017
4

Na Ubuntu większość modułów Perla jest już spakowanych, więc instalacja jest znacznie szybsza niż w większości innych systemów, które muszą się kompilować.

Aby zainstalować Foo::Barna przykład po poleceniu polecenia, zwykle wystarczy:

sudo apt-get install libfoo-bar-perl

Niestety nie wszystkie moduły są zgodne z tą konwencją nazewnictwa.

Myforwik
źródło
4

Nawet to powinno działać:

cpan -i module_name
serenesat
źródło
4

Użyj polecenia cpan jako cpan Modulename

$ cpan HTML::Parser

Aby zainstalować zależności automatycznie, wykonaj poniższe czynności

$ perl -MCPAN -e shell
cpan[1]>  o conf prerequisites_policy follow
cpan[2]>  o conf commit
exit

Wolę App :: cpanminus , automatycznie instaluje zależności. Po prostu zrób

$ cpanm HTML::Parser
Chankey Pathak
źródło
3

2 sposoby, które znam:

KORZYSTANIE Z PPM:

Z Windows (ActivePerl) korzystałem z ppm

z linii poleceń wpisz ppm. Po wyświetleniu monitu ppm ...

ppm> install foo

lub

ppm> search foo

aby uzyskać listę dostępnych modułów foo. Wpisz help dla wszystkich poleceń

KORZYSTANIE Z CPAN:

możesz również użyć CPAN w ten sposób ( * systemy nix ):

perl -MCPAN -e 'shell'

dostaniesz monit

cpan>

na monit ...

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

wpisz h, aby uzyskać listę poleceń dla cpan

JWHEAT
źródło
1
Możesz także powiedzieć „$ cpan Foo :: Bar”, aby zainstalować bezpośrednio z wiersza poleceń. Nie jest wymagana żadna wymyślna powłoka jednowarstwowa ani CPAN. :)
brian d foy
3

W Fedorze możesz użyć

# yum install foo

tak długo, jak Fedora ma istniejący pakiet dla modułu.

Bruce Alderman
źródło
3

Na Fedora Linuxlub Enterprise Linux, yumrównież utworów perl zależności bibliotecznych. Tak więc, jeśli moduł perla jest dostępny, a niektóre pakiety RPM eksportują tę zależność, zainstaluje odpowiedni pakiet dla Ciebie.

yum install 'perl(Chocolate::Belgian)'

(najprawdopodobniej pakiet perlowo-czekoladowo-belgijski, a nawet pakiet ChocolateFactory)

Michał Ingeli
źródło
3

Najłatwiej dla mnie jest to:

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

a) automatyczne wykrywanie / rozwiązywanie / instalacja zależności rekurencyjnej

b) jest onlinerem powłoki, dobrym dla skryptów instalacyjnych

Pan X
źródło
2

Jeśli chcesz umieścić nowy moduł w niestandardowej lokalizacji, w której nie ma skonfigurowanej powłoki cpan, być może przydatne będą następujące elementy.

 #wget <URL to the module.tgz>
 ##unpack
 perl Build.PL
./Build destdir=$HOME install_base=$HOME
./Build destdir=$HOME install_base=$HOME install
Venkrao
źródło
2

Czasami możesz użyć yum search foodo przeszukania względnego modułu perla, a następnie użyć yum install xxxdo instalacji.

Chris Forever
źródło
2

Bezpieczne rozwiązanie

Wiele odpowiedzi wspomina o użyciu cpannarzędzia (które używa CPAN.pm) bez słowa na temat bezpieczeństwa. Domyślnie CPANkonfiguruje się 2.27 i wcześniejsze wersjeurllist użycie adresu URL http (mianowicie http://www.cpan.org/ ), który pozwala na ataki MITM, a zatem jest niepewny. Jest to wykorzystywane do pobierania CHECKSUMSplików, dlatego należy zmienić go na bezpieczny adres URL (np. Https://www.cpan.org/ ).

Po uruchomieniu cpan i zaakceptowaniu domyślnej konfiguracji należy zmodyfikować wygenerowany MyConfig.pmplik (wyświetlana jest pełna ścieżka) w następujący sposób. Zastąpić

'urllist' => [q[http://www.cpan.org/]],

przez

'urllist' => [q[https://www.cpan.org/]],

Uwaga: https nie jest wystarczający; potrzebujesz także strony internetowej, której możesz zaufać. Bądź więc ostrożny, jeśli chcesz wybrać dowolne lustro.

Następnie możesz użyć cpan w zwykły sposób.

Mój raport o błędach na rt.cpan.org dotyczący niepewnego adresu URL.

vinc17
źródło
Czy „ cpan.org ” nie zostaje przekierowane na „ cpan.org ”?
Dave Everitt,
1
@DaveEveritt Przekierowanie z http na https jest przydatne tylko dla prywatności, np. Przeciwko komuś, kto może patrzeć tylko na dane przesyłane w sieci. Ale jeśli atakujący kontroluje sieć (np. Publiczny hotspot Wi-Fi lub część niechronionej sieci lokalnej), atak man-in-the-middle może być możliwy, a atakujący użyje własnego serwera (oczywiście nie https://www.cpan.org/).
vinc17
1

W systemie Windows z dystrybucją Perl ActiveState użyj polecenia ppm .

PW.
źródło
1

Po prostu wykonanie cpan Foo::Barna powłoce służyłoby temu celowi.

Kamal Nayan
źródło
1

Wygląda na to, że masz już swoją odpowiedź, ale pomyślałem, że wślizgnę się. To właśnie robię w niektórych skryptach na Ubuntu (lub serwerze Debiana)

#!/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";
    }
}

Działa to dla mnie dobrze, może jest tu coś, czego możesz użyć.

Ed Dunn
źródło