Wie kann ich CPAN anweisen, alle Abhängigkeiten zu installieren?


113

Wie kann ich CPAN anweisen, alle Abhängigkeiten zu installieren?

Ich habe versucht, diese in cpan:

cpan> o conf prerequisites_policy follow
cpan> o conf commit

Ich musste noch ein paar Mal mit "y" antworten (aber weniger als zuvor).

Gibt es eine Möglichkeit, es immer zum Installieren zu bringen? Ich möchte es unbeaufsichtigt machen.

Es scheint, dass ich möchte, dass eine Flagge immer darauf vertraut, dass CPAN das Richtige tut, und wenn sie eine Antwort vorschlägt, möchte ich ihr folgen (immer drücken, Enterwenn sie etwas fragt).


1
Vielleicht sollte ich meinem cpan-Skript eine Funktion hinzufügen, um die Umgebungsvariablen für die automatische Installation basierend auf der Einstellung CPAN.pm festzulegen. Siehe die Antwort von tsee, die die andere Hälfte des Problems darstellt.
Brian D Foy

Antworten:


30

Hier ist der Einzeiler, der diese Änderungen dauerhaft macht, einschließlich der automatischen erstmaligen CPAN-Konfiguration:

perl -MCPAN -e 'my $c = "CPAN::HandleConfig"; $c->load(doit => 1, autoconfig => 1); $c->edit(prerequisites_policy => "follow"); $c->edit(build_requires_install_policy => "yes"); $c->commit'

Oder kombinieren Sie es mit einem local::libModul für nicht privilegierte Benutzer:

perl -MCPAN -Mlocal::lib=~/perl5 -e 'my $c = "CPAN::HandleConfig"; $c->load(doit => 1, autoconfig => 1); $c->edit(prerequisites_policy => "follow"); $c->edit(build_requires_install_policy => "yes"); $c->commit'

Führen Sie es aus, bevor Sie die CPAN-Shell oder was auch immer verwenden.


ist es nicht dasselbe wie in @sdf anwer?
Filimonov

83

Versuchen Sie, PERL_MM_USE_DEFAULT wie folgt einzustellen:

PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install My::Module'

CPAN sollte auf alle Eingabeaufforderungen als Standard antworten.


Gibt es eine Möglichkeit, dies dauerhaft zu machen, sodass Sie jedes Mal "install My: Module" in cpan eingeben können und es sich daran erinnert? Config.pm bearbeiten?
Geoff

3
Wenn Sie unter Linux sind, fügen Sie die Zeile export PERL_MM_USE_DEFAULT=1zu Ihrem ~ / .bashrc
andersand

1
Wenn Sie eine Fehlermeldung erhalten, Can't locate object method "install" via package "xxx" at -e line 1.fügen Sie direkt vor dem Modulnamen ein "+" hinzu.
Yann Sagon

55

Die neueste und cpanmbeste Antwort auf diese Frage ist die Verwendung (auch als App :: cpanminus oder cpanminus bezeichnet)!

BESCHREIBUNG

cpanminus ist ein Skript zum Abrufen, Entpacken, Erstellen und Installieren von Modulen aus CPAN und führt nichts anderes aus.

Es ist abhängigkeitsfrei (kann sich selbst booten), erfordert keine Konfiguration und steht für sich allein. Beim Ausführen werden nur 10 MB RAM benötigt.

So installieren Sie den Bootstrap:

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

oder wenn Sie perlbreweinfach verwenden

perlbrew install-cpanm

oder von cpan selbst:

cpan install App::cpanminus

Von da an installieren Sie die Module durch Ausführen (ggf. als Root)

cpanm Foo::Bar

1
Ich habe dieses Problem, wenn ich es benutze cpanm, daher ist es hier nicht die Lösung, mir zu sagen, dass ich es verwenden soll.
Reinierpost

3
Anstelle eines blinden Kommentars stellen Sie bitte eine neue Frage und verlinken Sie hier. Ich vermute, ein Berechtigungsproblem könnte Ihr Problem sein
Joel Berger

Auf einem Ubuntu 18.04 habe ich mit installiert sudo apt install cpanminus make.
Pablo A

Down-Voting. Empfehlen Sie nicht, dass Personen die Ausgabe von Curl ausführen.
Richard Smith

28

Ich bin mir ziemlich sicher, dass Sie Folgendes suchen:

cpan> o conf prerequisites_policy follow
cpan> o conf commit

27

Es folgt das Ändern des folgenden Parameters über prerequisites_policy.

cpan> o conf prerequisites_policy 'follow'
cpan> o conf build_requires_install_policy yes
cpan> o conf commit

Dies ändert es von "fragen / ja" in "ja" und stoppt es, Sie zu fragen.


Vielen Dank! Ich brauche diese beiden Möglichkeiten, damit es mich nicht immer wieder fragt!
Dat TT

Beachten Sie, dass dies die Standardwerte für diese Einstellungen sind.
Ikegami


6

einstellen

prerequisites_policy

in der Konfiguration.

Siehe Konfigurationsvariablen .


2
Beziehen sich die Eingabeaufforderungen auf das Herunterladen der Modulquelle? Wenn ja, siehe Option connect_to_internet_ok . Andernfalls teilen Sie uns mit, welche anderen Eingabeaufforderungen Sie vermeiden möchten.
Sinan Ünür

Nun, im Grunde waren diese letzten "optionale Module".
Nifle

Das Problem sind Dinge, die sich automatisch selbst installieren. CPAN.pm hat keine Chance, damit umzugehen. Siehe die Antwort von tsee.
Brian D Foy

1
Link scheint jetzt tot zu sein
OrangeDog

3

Persönlich habe ich nur ein paar Mal versucht, die Einstellungen auf diese Weise zu ändern, und habe es tatsächlich einfacher gefunden, in die CPAN.pmShell zu gelangen, indem ich cpankeine Argumente angegeben und dann CPAN.pmüber die interaktive Eingabeaufforderung konfiguriert habe :

$ cpan
cpan> o conf init

Dadurch wird das CPAN.pmDienstprogramm zur Konfiguration der Schnittstellen gestartet. Gehen Sie es einfach durch und geben Sie "Folgen" an, wo Sie müssen (ich vergesse die Frage sofort), und Sie sollten bereit sein, loszulegen.


Sie können bestimmte Einstellungen an übergeben init. Zum Beispiel o conf init prerequisites_policy. Auf diese Weise müssen Sie nicht den langen Initialisierungsprozess durchlaufen, sondern erhalten trotzdem die freundliche Eingabeaufforderung für die betreffende Einstellung
ikegami

3

Ich fand, dass dies bei weitem der schnellste und zuverlässigste Weg ist, CPAN-Module zu installieren:

yes | perl -MCPAN -e "CPAN::Shell->notest(qw!install Your::Module!)"

Dies beantwortet die Frage nicht - das OP möchte eine Möglichkeit, Abhängigkeiten automatisch zu installieren / automatisch auf Eingabeaufforderungen zu reagieren.
William Turrell

Tatsächlich werden Abhängigkeiten installiert und automatisch auf Eingabeaufforderungen reagiert. Ich benutze es die ganze Zeit, auch in diesem Moment. Es besteht jedoch die Notwendigkeit einer kleinen Änderung: yes|/root/bin/perl -MCPAN -e "CPAN::Shell->notest(qw!install Your::Module!)"
Vladimir Marchenko

Was soll " yes" tun?
Peter Mortensen

2

Ich schreibe dies zum Nutzen von Leuten, die möglicherweise auf diese Seite gekommen sind, um nach einer Möglichkeit zu suchen, alle Modulabhängigkeiten zu installieren, die von einem bestimmten Perl-Skript benötigt werden. Ich habe ein Skript dafür geschrieben:

Es sollte ausgeführt werden als ./installdep.pl yourscript.pl

#!/usr/bin/perl
`sudo apt install cpanminus`;
while (<>) {
    if (/USE /i)
    {
        my $line=$_;
        $line=~ s/\s//g;
        $line=~ /^(.*)\./;
        $line=~ s/\;//;
        $line=~s/^USE//i;
        $line=~s/lib.*//i;
        $line=~s/feature.*//i;
        $line=~s/strict//i;
        $line=~s/warnings//i;
        $line =~ s/^(.*)\(.*/$1/;
        unless ($line eq '') {
        my $cmd='sudo cpanm '.$line;
        print "Installing $line \n";
        open my $cmd_fh, "$cmd |";
        while (<$cmd_fh>) {
          print "$_";
        }
        close $cmd_fh;
        print "\n";
    }
    }
}

Dadurch wird cpanminus verwendet, um alle für Ihr Skript erforderlichen Modulabhängigkeiten zu installieren. Wenn cpanm nicht installiert ist, wird es installiert.

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.