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).

Nifle
quelle
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.

Atento
quelle
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.

kbosak
quelle
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
Joel Berger
quelle
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
Mark C.
quelle
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.

sdf
quelle
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 .

Sinan Ünür
quelle
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.

numberwhun
quelle
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!)"
Vladimir Marchenko
quelle
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.

Joel G Mathew
quelle