Was ist der einfachste Weg, um ein fehlendes Perl-Modul zu installieren?


192

Ich bekomme diesen Fehler:

Can't locate Foo.pm in @INC

Gibt es eine einfachere Möglichkeit, es zu installieren, als es herunterzuladen, zu entkernen, zu erstellen usw.?


1
Wenn es sich bei dem betreffenden Modul um ein Kernmodul handelt, lesen Sie Fehlerbehebung bei "Archiv / Tar.pm kann nicht gefunden werden" .
Ikegami

Seien Sie in Bezug auf die Sicherheit sehr vorsichtig: Was erforderlich ist, um sicherzustellen, dass die Module nicht geändert wurden, muss auf sichere Weise von einer vertrauenswürdigen Site heruntergeladen werden. Siehe meine Antwort über die Verwendung von cpan.
vinc17

Antworten:


226

Unter Unix :

Normalerweise starten Sie cpan in Ihrer Shell:

# cpan

und Typ

install Chocolate::Belgian

oder in Kurzform:

cpan Chocolate::Belgian

Unter Windows :

Wenn Sie ActivePerl unter Windows verwenden, verfügt der PPM (Perl Package Manager) über die gleichen Funktionen wie CPAN.pm.

Beispiel:

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

Siehe Wie installiere ich Perl-Module? in den CPAN-FAQ

Viele Distributionen liefern viele Perl-Module als Pakete aus.

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

Sie sollten sie immer bevorzugen, da Sie von automatischen (Sicherheits-) Updates und der einfachen Entfernung profitieren . Dies kann mit dem cpan- Tool selbst ziemlich schwierig sein .

Für Gentoo gibt es ein nettes Tool namens g-cpan, das das Modul aus CPAN erstellt / installiert und ein Gentoo-Paket ( ebuild ) für Sie erstellt.


14
Die Kurzform ist nur "cpan Chocolate :: Belgian" von der Kommandozeile :)
brian d foy

3
IIRC, das neueste ActivePerl, verfügt nicht mehr über Befehlszeilen-ppm, sondern öffnet jetzt eine ausgefallene Benutzeroberfläche.
Kev

6
Nur "ppm" öffnet die GUI, gefolgt von Befehlen bleibt sie jedoch in der Befehlszeile. Also, "ppm help", "ppm install ..." usw.
Bill Ruppert

Beachten Sie, dass ppm Bindestriche für das Modulpfadtrennzeichen verwendet, nicht die üblichen Doppelpunkte. (Vielleicht, weil Doppelpunkte Drives in Dos bedeuten?) Das hat mich ein paar Mal erwischt;)
Matthew Lock

3
@MatthewLock: ppmVerwendet Bindestriche, -weil Sie die Distribution angeben, die Sie installieren möchten, was viel ehrlicher ist. Wenn Sie zum Beispiel verwenden cpanzu installieren LWP, LWP::Simpleoder LWP::UserAgentes wird die Verteilung installieren libwww-perlfür Sie. Die meisten Distributionen enthalten ein einzelnes Modul mit einem äquivalenten Namen, aber es gibt mehrere Ausnahmen wie diese
Borodin

65

Versuchen Sie App :: cpanminus :

# cpanm Chocolate::Belgian

Es ist großartig, um nur Dinge zu installieren. Es bietet keine der komplexeren Funktionen von CPAN oder CPANPLUS und ist daher einfach zu verwenden, sofern Sie wissen, welches Modul Sie installieren möchten. Wenn Sie cpanminus noch nicht haben, geben Sie einfach Folgendes ein:

# cpan App::cpanminus

um es zu installieren.

Es ist auch möglich, es ohne Verwendung von cpan zu installieren. Das grundlegende Bootstrap-Verfahren lautet:

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

Weitere Informationen finden Sie auf der Seite App :: cpanminus und im Abschnitt zur Installation.


7
Die cpanInstallation App::cpanminusist etwas seltsam. Die normalen Installationsanweisungen beinhalten ein Bootstrapping-Verfahren zum Herunterladen eines Teils davon von cpanmin.us und zum Installieren des Restes. Dies vermeidet die Konfiguration cpanund Erstellung eines (danach) nutzlosen .cpanVerzeichnisses.
Chas. Owens

Unter Ubuntu können Sie einfach cpanminusvom Terminal aus installieren . Ich finde es cpanmbesser, als cpanweil es keine Fehlerprotokolle auf dem Bildschirm anzeigt, sondern sie in temporären Protokolldateien speichert und den Pfad für den Fall von Fehlern angibt.
user13107

Ich erhalte
IgorGanapolsky

29

Ich stelle fest, dass einige Leute einen Run Cpan unter Sudo vorschlagen. Früher war dies für die Installation im Systemverzeichnis erforderlich, aber in modernen Versionen der CPAN-Shell können Sie sie so konfigurieren, dass sudo nur für die Installation verwendet wird. Dies ist viel sicherer, da Tests nicht als Root ausgeführt werden.

Wenn Sie eine alte CPAN-Shell haben, installieren Sie einfach das neue cpan ("CPAN installieren"). Wenn Sie die Shell neu laden, sollten Sie aufgefordert werden, diese neuen Anweisungen zu konfigurieren.

Wenn ich heutzutage auf einem System mit einem alten CPAN bin, aktualisiere ich zuerst die Shell und richte sie so ein, damit ich den größten Teil meiner cpan-Arbeit als normaler Benutzer erledigen kann.

Außerdem würde ich Windows-Benutzern dringend empfehlen, Erdbeer-Perl zu untersuchen . Dies ist eine Version von Perl, die mit einer vorkonfigurierten CPAN-Shell sowie einem Compiler geliefert wird. Es enthält auch einige schwer zu kompilierende Perl-Module mit ihren externen C-Bibliotheksabhängigkeiten, insbesondere XML :: Parser. Dies bedeutet, dass Sie bei der Installation von Modulen das Gleiche tun können wie bei jedem anderen Perl-Benutzer, und dass die Dinge viel häufiger "nur funktionieren".


1
install CPANwovon? $sudo apt-get install cpan?
Isomorphismen

1
@Lao Tzu: Nein, da CPAN ein Perl-Kernmodul ist und nicht als separates DEB-Paket verfügbar ist. Ich denke, in den meisten Situationen ist es noch besser zu benutzen App::cpanminus, es ist so eine Freude, es zu benutzen. Philip Potter schlägt es in seiner Antwort hier vor und Sie könnten diesen Chas versuchen . Owens antwortet .
Woche

25

Wenn Sie unter Ubuntu arbeiten und das vorgefertigte Perl-Modul (z. B. geo :: ipfree) installieren möchten, versuchen Sie Folgendes:

    $ apt-cache search perl geo :: ipfree
    libgeo-ipfree-perl - Ein Land, in dem das IP-Adress-Perl-Modul nachgeschlagen wird

    $ sudo apt-get installiere libgeo-ipfree-perl

Das ist toll. Danke dir.
Ivan X

16

Ein paar Leute erwähnten das Dienstprogramm cpan, aber es ist mehr als nur das Starten einer Shell. Geben Sie ihm einfach die Module, die Sie installieren möchten, und lassen Sie es funktionieren.

$prompt> cpan Foo::Bar

Wenn Sie keine Argumente angeben, wird die CPAN.pm-Shell gestartet. Dies funktioniert unter Unix, Mac und sollte unter Windows (insbesondere Strawberry Perl) in Ordnung sein.

Es gibt noch einige andere Dinge, die Sie mit dem cpan-Tool tun können. Hier ist eine Zusammenfassung der aktuellen Funktionen (die möglicherweise neuer sind als die mit CPAN.pm und Perl gelieferten):

-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'


Genial, das funktionierte gerade für mich unter Windows mit Git Perl, aber ich musste GnuWin make zuerst installieren
wytten


8

Otto machte einen guten Vorschlag . Dies funktioniert auch für Debian sowie für jedes andere Debian-Derivat. Das fehlende Teil ist, was zu tun ist, wenn die Apt-Cache-Suche nichts findet.

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

Wenn Sie dann ein zufälliges Modul haben, das Sie installieren möchten:

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

Dadurch erhalten Sie ein Deb-Paket, das Sie installieren können, um Some :: Random :: Module zu erhalten. Einer der großen Vorteile hierbei ist, dass Manpages und Beispielskripte zusätzlich zum Modul selbst an der gewünschten Stelle Ihrer Distribution platziert werden. Wenn die Distribution jemals ein offizielles Paket für eine neuere Version von Some :: Random :: Module herausbringt, wird es automatisch installiert, wenn Sie ein Upgrade erhalten.


7

Bereits beantwortet und Antwort akzeptiert - aber trotzdem:

IMHO ist der einfachste Weg, CPAN-Module zu installieren (auf Unix-ähnlichen Systemen und keine Ahnung von den Wondows):

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

Oben wird das aufgerufene Installationsprogramm für CPAN-Module mit Nullkonfiguration aufgerufen cpanm. (Die Installation kann einige Minuten dauern - brechen Sie den Vorgang nicht ab.)

und danach - einfach:

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

6

Viele Empfehlungen für CPAN.pm, was großartig ist, aber wenn Sie verwenden, Perl 5.10dann haben Sie auch Zugriff auf CPANPLUS.pmdie ist, CPAN.pmaber besser.

Und natürlich ist es für Benutzer verfügbar CPAN, die noch ältere Versionen von Perl verwenden. Warum nicht versuchen:

$ cpan CPANPLUS

Heh, das ist süß. Verwenden Sie CPAN.pm, um sich durch CPANPLUS zu ersetzen. :)
Brian D Foy

5

Oft kommt es vor, dass der Befehl cpan install mit der Meldung "make test hat einen schlechten Status zurückgegeben, wird nicht ohne Gewalt installiert" fehlschlägt.

In diesem Fall können Sie das Modul wie folgt installieren:

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

Leider ergibt dies: CPAN.pm kann nicht in @INC gefunden werden (möglicherweise müssen Sie das CPAN-Modul installieren) (@INC enthält: / etc / perl
IgorGanapolsky

4

Unter Ubuntu sind die meisten Perl-Module bereits gepackt, sodass die Installation viel schneller ist als bei den meisten anderen Systemen, die kompiliert werden müssen.

Um beispielsweise Foo::Baran einer Eingabeaufforderung zu installieren, gehen Sie normalerweise wie folgt vor:

sudo apt-get install libfoo-bar-perl

Leider folgen nicht alle Module dieser Namenskonvention.



4

Verwenden Sie den Befehl cpan als cpan Modulename

$ cpan HTML::Parser

Um Abhängigkeiten automatisch zu installieren, gehen Sie wie folgt vor

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

Ich bevorzuge App :: cpanminus , es installiert Abhängigkeiten automatisch. Mach einfach

$ cpanm HTML::Parser

3

2 Wege, die ich kenne:

VERWENDUNG VON PPM:

Unter Windows (ActivePerl) habe ich ppm verwendet

Geben Sie in der Befehlszeile ppm ein. An der ppm-Eingabeaufforderung ...

ppm> install foo

oder

ppm> search foo

um eine Liste der verfügbaren foo-Module zu erhalten. Geben Sie help für alle Befehle ein

VERWENDUNG VON CPAN:

Sie können CPAN auch wie folgt verwenden ( * nix-Systeme ):

perl -MCPAN -e 'shell'

Sie erhalten eine Eingabeaufforderung

cpan>

an der Eingabeaufforderung ...

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

Geben Sie h ein, um eine Liste der Befehle für cpan abzurufen


1
Sie können auch einfach "$ cpan Foo :: Bar" sagen, um die Installation direkt über die Befehlszeile durchzuführen. Kein ausgefallener Einzeiler oder CPAN-Shell erforderlich. :)
Brian D Foy

3

Auf Fedora können Sie verwenden

# yum install foo

solange Fedora ein Paket für das Modul hat.


3

Auf Fedora Linuxoder Enterprise Linux, yumauch Spuren Perl - Bibliothek Abhängigkeiten. Wenn das Perl-Modul verfügbar ist und ein RPM-Paket diese Abhängigkeit exportiert, wird das richtige Paket für Sie installiert.

yum install 'perl(Chocolate::Belgian)'

(höchstwahrscheinlich Perl-Chocolate-Belgian-Paket oder sogar ChocolateFactory-Paket)


3

Der einfachste Weg für mich ist folgender:

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

a) automatische Erkennung / Auflösung / Installation rekursiver Abhängigkeiten

b) Es ist ein Shell-Onliner, der sich gut für Setup-Skripte eignet


2

Wenn Sie das neue Modul an einem benutzerdefinierten Speicherort platzieren möchten, für den Ihre cpan-Shell nicht konfiguriert ist, ist möglicherweise Folgendes hilfreich.

 #wget <URL to the module.tgz>
 ##unpack
 perl Build.PL
./Build destdir=$HOME install_base=$HOME
./Build destdir=$HOME install_base=$HOME install

2

Manchmal können Sie das verwenden yum search foo, um das relative Perl-Modul zu durchsuchen und dann yum install xxxzu installieren.


2

Sichere Lösung

In vielen Antworten wird die Verwendung des cpanDienstprogramms (das verwendet wird CPAN.pm) ohne ein Wort zur Sicherheit erwähnt. Standardmäßig ist CPAN2.27 und früher so konfiguriert urllist, dass eine http-URL (nämlich http://www.cpan.org/ ) verwendet wird, die MITM-Angriffe zulässt. Dies ist daher unsicher. Dies wird zum Herunterladen der CHECKSUMSDateien verwendet, sodass sie in eine sichere URL geändert werden müssen (z. B. https://www.cpan.org/). . ).

Nachdem Sie cpan ausgeführt und die Standardkonfiguration akzeptiert haben, müssen Sie die generierte MyConfig.pmDatei (der vollständige Pfad wird ausgegeben) wie folgt ändern . Ersetzen

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

durch

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

Hinweis: https ist nicht ausreichend. Sie benötigen auch eine Website, der Sie vertrauen können. Seien Sie also vorsichtig, wenn Sie einen beliebigen Spiegel auswählen möchten.

Dann können Sie verwenden cpan gewohnt verwenden.

Mein Fehlerbericht auf rt.cpan.org über die unsichere URL.


Wird " cpan.org " nicht zu " cpan.org " umgeleitet ?
Dave Everitt

1
@ DaveEveritt Die Umleitung von http zu https ist nur aus Datenschutzgründen nützlich, z. B. gegen jemanden, der nur die im Netzwerk übertragenen Daten anzeigen kann. Wenn jedoch ein Angreifer das Netzwerk kontrolliert (z. B. ein öffentlicher WLAN-Hotspot oder ein nicht geschütztes lokales Netzwerk), ist möglicherweise ein Man-in-the-Middle-Angriff möglich, und der Angreifer verwendet seinen eigenen Server (offensichtlich nicht https://www.cpan.org/).
vinc17

1

Verwenden Sie unter Windows mit der ActiveState-Distribution von Perl den Befehl ppm .


1

Das einfache Ausführen cpan Foo::Barauf einer Shell würde den Zweck erfüllen.


1

Scheint, als hätten Sie bereits Ihre Antwort erhalten, aber ich dachte, ich würde mich einschalten. Dies ist, was ich in einigen Skripten auf einem Ubuntu (oder Debian-Server) mache.

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

Das funktioniert gut für mich, vielleicht gibt es hier etwas, das Sie verwenden können.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.