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.?
cpan
.
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.?
cpan
.
Antworten:
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.
apt-cache search 'perl$'
pacman -Ss '^perl-'
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.
ppm
Verwendet Bindestriche, -
weil Sie die Distribution angeben, die Sie installieren möchten, was viel ehrlicher ist. Wenn Sie zum Beispiel verwenden cpan
zu installieren LWP
, LWP::Simple
oder LWP::UserAgent
es wird die Verteilung installieren libwww-perl
für Sie. Die meisten Distributionen enthalten ein einzelnes Modul mit einem äquivalenten Namen, aber es gibt mehrere Ausnahmen wie diese
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.
cpan
Installation App::cpanminus
ist 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 cpan
und Erstellung eines (danach) nutzlosen .cpan
Verzeichnisses.
cpanminus
vom Terminal aus installieren . Ich finde es cpanm
besser, als cpan
weil es keine Fehlerprotokolle auf dem Bildschirm anzeigt, sondern sie in temporären Protokolldateien speichert und den Pfad für den Fall von Fehlern angibt.
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".
install CPAN
wovon? $sudo apt-get install cpan
?
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 .
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
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.
Siehe auch Ja, auch Sie können CPAN verwenden . Es zeigt, wie Sie CPAN ohne Root- oder Sudo-Zugriff verwenden können.
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.
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
Viele Empfehlungen für CPAN.pm
, was großartig ist, aber wenn Sie verwenden, Perl 5.10
dann haben Sie auch Zugriff auf CPANPLUS.pm
die ist, CPAN.pm
aber besser.
Und natürlich ist es für Benutzer verfügbar CPAN
, die noch ältere Versionen von Perl verwenden. Warum nicht versuchen:
$ cpan CPANPLUS
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));"
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::Bar
an einer Eingabeaufforderung zu installieren, gehen Sie normalerweise wie folgt vor:
sudo apt-get install libfoo-bar-perl
Leider folgen nicht alle Module dieser Namenskonvention.
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
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
Auf Fedora können Sie verwenden
# yum install foo
solange Fedora ein Paket für das Modul hat.
Auf Fedora Linux
oder Enterprise Linux
, yum
auch 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)
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
Manchmal können Sie das verwenden yum search foo
, um das relative Perl-Modul zu durchsuchen und dann yum install xxx
zu installieren.
Sichere Lösung
In vielen Antworten wird die Verwendung des cpan
Dienstprogramms (das verwendet wird CPAN.pm
) ohne ein Wort zur Sicherheit erwähnt. Standardmäßig ist CPAN
2.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 CHECKSUMS
Dateien 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.pm
Datei (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.
https://www.cpan.org/
).
Das einfache Ausführen cpan Foo::Bar
auf einer Shell würde den Zweck erfüllen.
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.