Come faccio a dire a CPAN di installare tutte le dipendenze?


113

Come faccio a dire a CPAN di installare tutte le dipendenze?

Ho provato a impostarli in cpan:

cpan> o conf prerequisites_policy follow
cpan> o conf commit

Ho ancora dovuto rispondere "y" un paio di volte (ma meno di prima sembra).

C'è un modo per farlo andare sempre avanti e installarlo? Voglio renderlo incustodito.

Sembrerebbe che io voglia che una bandiera si fidi sempre di CPAN per fare la cosa giusta, e se suggerisce una risposta vorrei seguirla (premere sempre Enterquando chiede qualcosa).


1
Forse dovrei aggiungere una funzionalità al mio script cpan per impostare le variabili di ambiente di installazione automatica in base all'impostazione CPAN.pm. Vedi la risposta di tsee, che è l'altra metà del problema.
brian d foy

Risposte:


31

Di seguito è riportata la riga di comando che rende permanenti queste modifiche, inclusa la configurazione CPAN automatica per la prima volta:

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'

Oppure combinalo con il local::libmodulo per utenti non privilegiati:

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'

Eseguilo prima di utilizzare la shell CPAN o qualsiasi altra cosa.


non è lo stesso di @sdf anwer?
filimonov

83

Prova a impostare PERL_MM_USE_DEFAULT in questo modo:

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

Dovrebbe fare in modo che CPAN risponda all'impostazione predefinita a tutti i prompt.


Qualche modo per renderlo persistente, quindi puoi semplicemente digitare "installa My: Module" in cpan ogni volta e lo ricorderà? Modificare Config.pm?
Geoff

3
Se sei su Linux, aggiungi la riga export PERL_MM_USE_DEFAULT=1al tuo ~ / .bashrc
andersand

1
Se ricevi un errore Can't locate object method "install" via package "xxx" at -e line 1.aggiungi un "+" subito prima del nome del modulo.
Yann Sagon

55

L'ultima e più grande risposta a questa domanda è quella di utilizzare cpanminvece (indicato anche come App :: cpanminus o cpanminus)!

DESCRIZIONE

cpanminus è uno script per ottenere, decomprimere, costruire e installare moduli da CPAN e non fa nient'altro.

È privo di dipendenze (può eseguire il bootstrap da solo), non richiede configurazione ed è autonomo. Durante l'esecuzione, richiede solo 10 MB di RAM.

Per installarlo in bootstrap:

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

o se stai usando perlbrewsemplicemente

perlbrew install-cpanm

o dallo stesso cpan:

cpan install App::cpanminus

Da quel momento in poi installa i moduli eseguendo (come root se necessario)

cpanm Foo::Bar

1
Ho questo problema quando lo uso cpanm, quindi dirmi di usarlo non è la soluzione qui.
reinierpost

3
piuttosto che un commento cieco, chiedi come nuova domanda e collega qui. Sospetto che un problema di autorizzazioni potrebbe essere il tuo problema
Joel Berger

Su Ubuntu 18.04 ho installato con sudo apt install cpanminus make.
Pablo A

Down-voto. Non raccomandare alle persone di eseguire l'output di curl.
Richard Smith

28

Ecco cosa sono abbastanza sicuro che stai cercando:

cpan> o conf prerequisites_policy follow
cpan> o conf commit

27

Segue la modifica del seguente parametro in cima a prerequisites_policy.

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

Questo lo cambierà da "chiedi / si" a "si" e smetterà di chiederti.


Grazie! Ho bisogno di queste due opzioni in modo che non me lo chieda ancora e ancora!
Dat TT

Notare che questi sono i valori predefiniti per queste impostazioni.
ikegami


6

Impostato

prerequisites_policy

nella configurazione.

Vedere Variabili di configurazione .


2
I prompt sono relativi al download dell'origine del modulo? In tal caso, vedere l' opzione connect_to_internet_ok . Altrimenti, dicci quali altri suggerimenti stai cercando di evitare.
Sinan Ünür

Insomma, tutti questi ultimi erano "moduli opzionali".
Nifle

Il problema sono le cose che si installano automaticamente da sole. CPAN.pm non ha la possibilità di gestire quella roba. Vedi la risposta.
brian d foy

1
Il collegamento ora sembra essere morto
OrangeDog

3

Personalmente ho provato solo un paio di volte a modificare le impostazioni in quel modo e in realtà ho trovato più facile entrare nella CPAN.pmshell cpannon dando argomenti, quindi configurando CPAN.pmdal prompt interattivo:

$ cpan
cpan> o conf init

Questo avvierà l' CPAN.pmutilità di configurazione delle interfacce. Eseguilo semplicemente e specifica "segui" dove devi (dimentico la domanda a colpo sicuro), e dovresti essere a posto.


Puoi passare impostazioni specifiche a init. Ad esempio o conf init prerequisites_policy,. In questo modo, non è necessario eseguire il lungo processo di inizializzazione, ma ottenere comunque il prompt amichevole per l'impostazione in questione
ikegami

3

Ho trovato che questo è di gran lunga il modo più veloce e affidabile per installare i moduli CPAN:

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

Questo non risponde alla domanda: l'OP vuole un modo per installare automaticamente le dipendenze / rispondere automaticamente ai prompt.
William Turrell

In effetti, installa le dipendenze e risponde automaticamente ai prompt. Lo uso sempre, anche in questo momento. Ma c'è bisogno di una piccola modifica: yes|/root/bin/perl -MCPAN -e "CPAN::Shell->notest(qw!install Your::Module!)"
Vladimir Marchenko

Cosa " yes" dovrebbe fare?
Peter Mortensen

2

Sto scrivendo questo a beneficio di persone che potrebbero essere arrivate su questa pagina alla ricerca di un modo per installare tutte le dipendenze dei moduli necessarie per un particolare script Perl. Ho scritto una sceneggiatura per questo:

Dovrebbe essere eseguito come ./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";
    }
    }
}

Questo utilizzerà cpanminus per installare tutte le dipendenze del modulo richieste dallo script. Se cpanm non è installato, lo installerà.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.