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).
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.
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.
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
Voici ce que je suis sûr que vous recherchez:
cpan> o conf prerequisites_policy follow
cpan> o conf commit
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.
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.)
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!)"
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.
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.