Jak najłatwiej zainstalować brakujący moduł Perla?

Dostaję ten błąd:

Can't locate Foo.pm in @INC

Czy jest łatwiejszy sposób na jego zainstalowanie niż pobranie, odinstalowanie, zrobienie itp?

Author: dreeves, 2008-09-15

24 answers

Na Unixie :

Zazwyczaj zaczynasz cpan w swojej powłoce:

$ cpan

I typ

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 z tych samych funkcji, co CPAN.pm.

Przykład:

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

Zobacz Jak zainstalować Perla Moduły? w FAQ CPAN

Wiele dystrybucji wysyła wiele modułów Perla jako pakiety.

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

Powinieneś zawsze preferować je, ponieważ korzystasz z automatycznych (Bezpieczeństwa) aktualizacji i łatwości usuwania . Może to być dość trudne z samym narzędziem cpan.

Dla Gentoo jest fajne narzędzie o nazwie g-cpan który buduje / instaluje moduł z CPAN i tworzy dla Ciebie Pakiet Gentoo ( ebuild ).

 236
Author: Benedikt Waldvogel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-10 13:14:45

Spróbuj App:: cpanminus :

# cpanm Chocolate::Belgian
Jest świetny do instalowania rzeczy. Nie zapewnia żadnej z bardziej złożonych funkcji CPAN lub CPANPLUS, więc jest łatwy w użyciu, pod warunkiem, że wiesz, który moduł chcesz zainstalować. Jeśli nie masz jeszcze cpanminusa, wpisz:
# cpan App::cpanminus

Aby go zainstalować.

Możliwe jest również zainstalowanie go bez użycia cpan w ogóle. Podstawowa procedura bootstrap to:

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

Aby uzyskać więcej informacji przejdź do aplikacji:: cpanminus strona i spójrz na sekcję dotyczącą instalacji.

 67
Author: Philip Potter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-14 10:53:49

Zauważam, że niektórzy sugerują uruchomienie cpan pod sudo. Kiedyś było to konieczne do instalacji w katalogu systemowym, ale współczesne wersje powłoki CPAN pozwalają skonfigurować ją tak, aby używała sudo tylko do instalacji. Jest to o wiele bezpieczniejsze, ponieważ oznacza to, że testy nie są uruchamiane jako root.

Jeśli masz starą powłokę CPAN, po prostu zainstaluj nową powłokę cpan ("install CPAN"), a po ponownym załadowaniu powłoką powinna pojawić się monit o skonfigurowanie tych nowych dyrektyw.

W dzisiejszych czasach, kiedy Jestem na systemie ze starym CPAN, pierwszą rzeczą, którą robię, to aktualizacja powłoki i skonfigurowanie jej, aby to zrobić, więc mogę wykonać większość mojej pracy cpan jako normalny użytkownik.

Również zdecydowanie sugerowałbym, aby użytkownicy Windows zbadali truskawkowy Perl. Jest to wersja Perla, która jest pakowana z wstępnie skonfigurowaną powłoką CPAN, jak również kompilatorem. Zawiera również niektóre trudne do skompilowania Moduły Perla z ich zewnętrznymi zależnościami bibliotek C, w szczególności Parser XML::. Oznacza to, że możesz to samo, co każdy inny użytkownik Perla, jeśli chodzi o instalowanie modułów, a rzeczy mają tendencję do" po prostu działać " znacznie częściej.

 29
Author: Dave Rolsky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-08 16:59:27

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

    $ 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
 25
Author: Otto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-16 15:21:21

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

$prompt> cpan Foo::Bar

Jeśli nie podasz żadnych argumentów, zaczyna się CPAN.pm shell. To działa na Unix, Mac i powinno być dobrze na Windows(szczególnie truskawkowy Perl).

Istnieje kilka innych rzeczy, które możesz zrobić również za pomocą narzędzia cpan. Oto podsumowanie aktualnych funkcji (które mogą być nowsze niż ten, który przychodzi 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.
 16
Author: brian d foy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-11 18:37:54

sudo perl -MCPAN -e 'install Foo'

 12
Author: dreeves,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 19:17:11

Zobacz także tak, nawet ty możesz używać CPAN . Pokazuje, jak możesz używać CPAN bez dostępu do roota lub sudo.

 10
Author: Corion,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-16 09:15:00

Otto złożył dobrą sugestię . Działa to również w przypadku Debiana, jak również innych pochodnych Debiana. Brakujący element jest tym, co należy zrobić, gdy apt-cache search czegoś nie znajdzie.

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

Wtedy, 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ć moduł:: Random::. Jedną z dużych zalet są tutaj strony podręcznika ekranowego, a przykładowe skrypty oprócz samego modułu zostaną umieszczone w twojej dystrybucji miejsce wyboru. Jeśli distro kiedykolwiek wyjdzie z oficjalnym pakietem dla nowszej wersji jakiegoś modułu:: Random::, zostanie ono automatycznie zainstalowane podczas aktualizacji apt-get.

 8
Author: mikegrb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:45

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

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

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

Powyżej znajduje się instalacja "Instalatora Modułów CPAN zerowej konfiguracji" o nazwie cpanm. (Instalacja może potrwać kilka minut - nie przerywaj procesu)

I po-po prostu:

cpanm Foo
cpanm Module::One
cpanm Another::Module
 7
Author: jm666,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-22 18:19:38

Dużo rekomendacji dla CPAN.pm, co jest świetne, ale jeśli używasz Perl 5.10, to masz również dostęp do CPANPLUS.pm, który jest podobny CPAN.pm, ale lepszy.

I, oczywiście, jest on dostępny na CPAN dla osób nadal korzystających ze starszych wersji Perla. Dlaczego nie spróbować:

$ cpan CPANPLUS
 6
Author: Dave Cross,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-13 15:15:07

Wiele razy zdarza się, że polecenie instalacji cpan zawodzi z Komunikatem jak "make test zwrócił zły stan, nie zainstaluje się bez siły"

W takim przypadku Poniżej znajduje się sposób instalacji modułu:

perl -MCPAN -e "CPAN::Shell->force(qw(install Foo::Bar));"
 5
Author: jaxbihani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-10 02:44:10

Użyj polecenia cpan jako cpan Modulename

$ cpan HTML::Parser

Aby automatycznie zainstalować zależności, postępuj zgodnie z poniższymi instrukcjami

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

Preferuję App:: cpanminus , instaluje zależności automatycznie. Just do

$ cpanm HTML::Parser
 5
Author: Chankey Pathak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-13 16:43:20

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

Aby zainstalować Foo::Bar w wierszu polecenia na przykład zwykle wystarczy:

sudo apt-get install libfoo-bar-perl
Niestety nie wszystkie moduły są zgodne z tą konwencją nazewnictwa.
 4
Author: Myforwik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-13 14:50:02

Nawet powinno działać:

cpan -i module_name
 4
Author: serenesat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-13 14:52:47

2 sposoby, które znam:

UŻYCIE PPM:

Z Windows (ActivePerl) użyłem ppm

Z linii poleceń typu ppm. W wierszu 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'

Gets you a prompt

cpan>

Na monitorze ...

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

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

 3
Author: JWHEAT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 19:27:42

Na Fedorze możesz użyć

# yum install foo

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

 3
Author: Bruce Alderman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-21 19:59:27

On Fedora Linux lub Enterprise Linux, yum śledzi również zależności bibliotek Perla. 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 perl-Chocolate-Belgian, lub nawet Pakiet ChocolateFactory)

 3
Author: Michal Ingeli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-13 14:51:41

Najprostszym sposobem dla mnie jest to:

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

A) automatyczne rekurencyjne wykrywanie/rozwiązywanie/instalowanie zależności

B) jest to shell onliner, dobry do setup-scripts

 3
Author: Mister X,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-28 11:16:18

Jeśli chcesz umieścić nowy moduł w niestandardowej lokalizacji, do której nie jest skonfigurowana powłoka 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
 2
Author: venkrao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-11 18:06:06

Czasami możesz użyć yum search foo do przeszukania względnego modułu Perla, a następnie użyć yum install xxx do zainstalowania.

 2
Author: Chris Forever,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-13 14:50:50

Bezpieczne rozwiązanie

Wiele odpowiedzi wspomina o użyciu narzędzia cpan (które używa CPAN.pm) bez słowa na temat bezpieczeństwa. Domyślnie CPAN 2.27 i wcześniejsze konfiguruje urllist, aby używać adresu URL http (mianowicie http://www.cpan.org/), który pozwala na ataki MITM, przez co jest niepewny. To jest to, co jest używane do pobierania plików CHECKSUMS, tak, że trzeba go zmienić na Bezpieczny adres URL (np https://www.cpan.org/).

Więc po uruchomieniu cpan i zaakceptowaniu domyślna konfiguracja, należy zmodyfikować wygenerowany plik MyConfig.pm (Pełna ścieżka jest wyjściowa) w następujący sposób. Replace

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

By

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

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

Wtedy możesz użyć cpan w zwykły sposób.

Mój Zgłoś błąd na rt.cpan.org o niepewnym adresie URL.

 2
Author: vinc17,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-25 13:17:35

W Windows z dystrybucją ActiveState Perla, użyj polecenia ppm .

 1
Author: PW.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-08 07:27:00

Samo wykonanie cpan Foo::Bar Na powłoce służyłoby temu celowi.

 1
Author: Kamal Nayan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-01 09:56:36

Wygląda na to, że masz już swoją odpowiedź, ale pomyślałem, że się odezwę. To jest to, co 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";
    }
}

To działa dobrze dla mnie, może jest coś tutaj można użyć.

 1
Author: Ed Dunn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-04 15:26:15