web-dev-qa-db-fra.com

Comment dire à CPAN d'installer toutes les dépendances?

Comment dire à CPAN d'installer toutes les dépendances?

J'ai essayé de les définir dans cpan:

cpan> o conf prerequisites_policy follow
cpan> o conf commit

Je devais quand même répondre "y" plusieurs fois (mais moins qu'avant).

Y a-t-il un moyen de le faire toujours installer et installer? Je veux le faire sans surveillance.

Il semblerait que je veuille d’un drapeau qui permette toujours à CPAN de faire ce qui est juste, et si cela suggère une réponse, j’aimerais le suivre (toujours appuyer sur Enter quand il demande quelque chose).

113
Nifle

Voici le one-liner rendant ces modifications permanentes, y compris la configuration automatique du CPAN pour la première fois:

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'

Ou combinez-le avec local::lib module pour les utilisateurs non privilégiés:

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'

Exécutez-le avant d'utiliser le shell CPAN ou autre.

29
Atento

Essayez de définir Perl_MM_USE_DEFAULT comme suit:

Perl_MM_USE_DEFAULT=1 Perl -MCPAN -e 'install My::Module'

CPAN devrait répondre par défaut à toutes les invites.

81
kbosak

La dernière et meilleure réponse à cette question est d'utiliser plutôt cpanm (également appelé App :: cpanminus ou cpanminus)!

LA DESCRIPTION

cpanminus est un script pour obtenir, décompresser, construire et installer des modules à partir de CPAN et ne fait rien d’autre.

C'est une dépendance gratuite (peut bootstrap elle-même), ne nécessite aucune configuration et est autonome. Lors de son exécution, il ne nécessite que 10 Mo de RAM.

Pour bootstrap l'installer:

curl -L http://cpanmin.us | Perl - --Sudo App::cpanminus

ou si vous utilisez perlbrew simplement

perlbrew install-cpanm

ou de cpan lui-même:

cpan install App::cpanminus

À partir de là, installez les modules en exécutant (en tant que root si nécessaire)

cpanm Foo::Bar
52
Joel Berger

Voici ce que je suis sûr que vous recherchez:

cpan> o conf prerequisites_policy follow
cpan> o conf commit
28
Mark C

La modification du paramètre suivant par-dessus prerequisites_policy est la suivante.

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

Cela changera de "demander/oui" à "oui" et arrêtera de vous demander.

27
sdf

Peut-être que c'est lié à ExtUtils :: AutoInstall ou Module :: AutoInstall en cours d'utilisation. Essayez de définir la variable d’environnement Perl_AUTOINSTALL. (Cf. la documentation de ces modules.)

6
tsee

Ensemble

prerequisites_policy

dans la configuration.

Voir Variables de configuration .

6
Sinan Ünür

J'ai trouvé que c'était de loin le moyen le plus rapide et le plus fiable d'installer des modules CPAN:

yes | Perl -MCPAN -e "CPAN::Shell->notest(qw!install Your::Module!)"
3
Vladimir Marchenko

Personnellement, je n’ai essayé que quelques fois de modifier les paramètres de cette façon et j’ai trouvé plus facile de tomber dans le CPAN.pm Shell en donnant cpan aucun argument, puis en configurant CPAN.pm de l'invite interactive:

$ cpan
cpan> o conf init

Ceci initiera le CPAN.pm Utilitaire de configuration des interfaces. Parcourez-la simplement et indiquez "suivez" là où vous devez (j'oublie la question tout de suite), et vous devriez être prêt à partir.

3
numberwhun

J'écris ceci au profit des personnes qui sont peut-être venues sur cette page à la recherche d'un moyen d'installer toutes les dépendances de modules nécessaires à un script Perl particulier. J'ai écrit un script pour ça:

Il devrait être exécuté en tant que ./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";
    }
    }
}

Ceci utilisera cpanminus pour installer toutes les dépendances de module requises par votre script. Si cpanm n'est pas installé, il l'installera.

1
Joel G Mathew