Quelle est la manière la plus simple d’installer un module Perl manquant?

Je reçois cette erreur:

Can't locate Foo.pm in @INC

Existe-t-il un moyen plus simple de l’installer que de télécharger, de supprimer, de créer, etc.?

Sur Unix :

généralement vous commencez cpan dans votre shell:

# cpan

et taper

install Chocolate::Belgian

ou en abrégé:

cpan Chocolate::Belgian

Sous Windows :

Si vous utilisez ActivePerl sous Windows, le PPM (Perl Package Manager) a la même fonctionnalité que CPAN.pm.

Exemple:

# ppm
ppm> search net-smtp
ppm> install Net-SMTP-Multipart

voir Comment installer les modules Perl? dans la FAQ du CPAN

De nombreuses dissortingbutions envoient beaucoup de modules Perl en tant que packages.

  • Gentoo: catégorie dev-perl
  • Debian: apt-cache search 'perl$'

Vous devriez toujours les préférer lorsque vous bénéficiez de mises à jour automatiques (de sécurité) et de la facilité de suppression . Cela peut être assez compliqué avec l’outil cpan lui-même.

Pour Gentoo, il existe un bon outil appelé g-cpan qui construit / installe le module depuis CPAN et crée un paquet Gentoo ( ebuild ) pour vous.

Essayez App :: cpanminus :

 # cpanm Chocolate::Belgian 

C’est génial pour juste installer les choses. Il ne fournit aucune des fonctionnalités les plus complexes de CPAN ou CPANPLUS, il est donc facile à utiliser, à condition de savoir quel module vous souhaitez installer. Si vous n’avez pas encore de cpanminus, tapez simplement:

 # cpan App::cpanminus 

pour l’installer

Il est également possible de l’installer sans utiliser cpan. La procédure de démarrage de base est la suivante:

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

Pour plus d’informations, accédez à la page App :: cpanminus et consultez la section sur l’installation.

Je note quelques personnes suggérant une exécution de cpan sous sudo. Avant, il était nécessaire de l’installer dans le répertoire système, mais les versions modernes du shell CPAN vous permettent de le configurer pour utiliser sudo uniquement pour l’installation. C’est beaucoup plus sûr, car cela signifie que les tests ne sont pas exécutés en tant que root.

Si vous avez un ancien shell CPAN, installez simplement le nouveau cpan (“install CPAN”) et lorsque vous rechargez le shell, il doit vous demander de configurer ces nouvelles directives.

De nos jours, quand je suis sur un système avec un ancien CPAN, la première chose que je fais est de mettre à jour le shell et de le configurer pour que je puisse faire le gros du travail de cpan en tant qu’utilisateur normal.

En outre, je suggère fortement aux utilisateurs de Windows d’enquêter sur Perl Perl . Ceci est une version de Perl fournie avec un shell CPAN préconfiguré et un compilateur. Il comprend également des modules Perl difficiles à comstackr avec leurs dépendances de bibliothèque C externes, notamment XML :: Parser. Cela signifie que vous pouvez faire la même chose que tous les autres utilisateurs de Perl quand il s’agit d’installer des modules, et les choses tendent à «fonctionner» beaucoup plus souvent.

Si vous êtes sur Ubuntu et que vous souhaitez installer le module perl pré-packagé (par exemple, geo :: ipfree), essayez ceci:

     $ apt-cache search perl geo :: ipfree
     libgeo-ipfree-perl - Un pays de recherche du module Perl d'adresse IP

     $ sudo apt-get install libgeo-ipfree-perl

Quelques personnes ont mentionné l’utilitaire cpan, mais c’est plus qu’un simple démarrage de shell. Il suffit de lui donner les modules que vous souhaitez installer et de le laisser faire son travail.

 $prompt> cpan Foo::Bar 

Si vous ne lui donnez aucun argument, il lance le shell CPAN.pm. Cela fonctionne sur Unix, Mac, et devrait être très bien sur Windows (en particulier Strawberry Perl).

Il y a plusieurs autres choses que vous pouvez faire avec l’outil cpan. Voici un résumé des fonctionnalités actuelles (qui peuvent être plus récentes que celles fournies avec CPAN.pm et perl):

 -a Creates the CPAN.pm autobundle with CPAN::Shell->autobundle. -A module [ module ... ] Shows the primary maintainers for the specified modules -C module [ module ... ] Show the Changes files for the specified modules -D module [ module ... ] Show the module details. This prints one line for each out-of-date module (meaning, modules locally installed but have newer versions on CPAN). Each line has three columns: module name, local version, and CPAN version. -L author [ author ... ] List the modules by the specified authors. -h Prints a help message. -O Show the out-of-date modules. -r Recomstacks dynamically loaded modules with CPAN::Shell->recomstack. -v Print the script version and CPAN.pm version. 

sudo perl -MCPAN -e 'install Foo'

Voir aussi Oui, même vous pouvez utiliser CPAN . Il montre comment utiliser CPAN sans avoir access root ou sudo.

Otto a fait une bonne suggestion . Cela fonctionne aussi pour Debian, ainsi que pour tout autre dérivé de Debian. La pièce manquante est ce qu’il faut faire quand apt-cache search ne trouve rien.

 $ sudo apt-get install dh-make-perl build-essential apt-file $ sudo apt-file update 

Ensuite, chaque fois que vous avez un module aléatoire que vous souhaitez installer:

 $ cd ~/some/path $ dh-make-perl --build --cpan Some::Random::Module $ sudo dpkg -i libsome-random-module-perl-0.01-1_i386.deb 

Cela vous donnera un paquet deb que vous pouvez installer pour obtenir Some :: Random :: Module. L’un des grands avantages est que les pages de manuel et les exemples de scripts, en plus du module lui-même, seront placés dans l’emplacement de votre dissortingbution. Si la dissortingbution arrive avec un paquet officiel pour une version plus récente de Some :: Random :: Module, elle sera automatiquement installée lorsque vous utiliserez la mise à niveau.

Déjà répondu et accepté réponse – mais de toute façon:

À mon humble avis, la manière la plus simple d’installer des modules CPAN (sur des systèmes de type Unix, et n’ayant aucune idée des merveilles) est la suivante:

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

Ce qui précède installe le programme d’installation des modules CPAN sans configuration appelé cpanm . (L’installation peut prendre plusieurs minutes – ne pas casser le processus)

et après – simplement:

 cpanm Foo cpanm Module::One cpanm Another::Module 

Plusieurs fois, il arrive que la commande d’installation de cpan échoue avec le message comme “make test a renvoyé un mauvais état, ne s’installe pas sans force”

Dans ce cas, voici comment installer le module:

 perl -MCPAN -e "CPAN::Shell->force(qw(install Foo::Bar));" 

Beaucoup de recommandations pour CPAN.pm , ce qui est génial, mais si vous utilisez Perl 5.10 vous avez également access à CPANPLUS.pm qui est comme CPAN.pm mais mieux.

Et, bien sûr, il est disponible sur CPAN pour les personnes qui utilisent encore d’anciennes versions de Perl. Pourquoi ne pas essayer:

 $ cpan CPANPLUS 

2 façons dont je connais:

UTILISATION DE PPM:

Avec Windows (ActivePerl), j’ai utilisé ppm

à partir de la ligne de commande, tapez ppm. À l’invite ppm …

 ppm> install foo 

ou

 ppm> search foo 

pour obtenir une liste des modules foo disponibles. Tapez aide pour toutes les commandes

UTILISATION DE CPAN:

Vous pouvez également utiliser CPAN comme ceci ( systèmes * nix ):

 perl -MCPAN -e 'shell' 

vous obtient une invite

 cpan> 

à l’invite …

 cpan> install foo (again to install the foo module) 

tapez h pour obtenir une liste de commandes pour cpan

Sur Fedora, vous pouvez utiliser

 # yum install foo 

tant que Fedora dispose d’un package existant pour le module.

Même cela devrait fonctionner:

 cpan -i module_name 

Utilisez la commande cpan Modulename comme cpan Modulename

 $ cpan HTML::Parser 

Pour installer les dépendances, suivez automatiquement les instructions ci-dessous.

 $ perl -MCPAN -e shell cpan[1]> o conf prerequirejsites_policy follow cpan[2]> o conf commit exit 

Je préfère App :: cpanminus , il installe automatiquement les dépendances. Juste faire

 $ cpanm HTML::Parser 

Sur Ubuntu, la plupart des modules Perl sont déjà intégrés, l’installation est donc beaucoup plus rapide que la plupart des autres systèmes à comstackr.

Pour installer Foo::Bar à une invite de commande par exemple, vous faites simplement:

 sudo apt-get install libfoo-bar-perl 

Malheureusement, tous les modules ne suivent pas cette convention de nommage.

Sur Fedora Linux ou Enterprise Linux , yum suit également les dépendances des bibliothèques perl. Ainsi, si le module perl est disponible et que certains packages rpm exportent cette dépendance, il installera le package approprié pour vous.

 yum install 'perl(Chocolate::Belgian)' 

(très probablement paquet perl-chocolat-belge, ou même paquet de ChocolateFactory)

La façon la plus simple pour moi est la suivante:

 PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install DateTime::TimeZone' 

a) détection automatique des dépendances récursives / résolution / installation

b) c’est un shell onliner, bon pour les scripts d’installation

Sous Windows avec la dissortingbution ActiveState de Perl, utilisez la commande ppm .

Si vous souhaitez placer le nouveau module dans un emplacement personnalisé que votre shell cpan n’est pas configuré pour utiliser, alors, peut-être, les éléments suivants seront utiles.

  #wget  ##unpack perl Build.PL ./Build destdir=$HOME install_base=$HOME ./Build destdir=$HOME install_base=$HOME install 

Parfois, vous pouvez utiliser la yum search foo pour rechercher le module perl relatif, puis utiliser yum install xxx pour l’installer.

Il semblerait que vous ayez déjà trouvé votre réponse, mais je pensais que ce serait le cas. C’est ce que je fais dans certains scripts sur Ubuntu (ou serveur Debian)

 #!/usr/bin/perl use warnings; use ssortingct; #I've gotten into the habit of setting this on all my scripts, prevents weird path issues if the script is not being run by root $ENV{'PATH'} = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'; #Fill this with the perl modules required for your project my @perl = qw(LWP::Simple XML::LibXML MIME::Lite DBI DateTime Config::Tiny Proc::ProcessTable); chomp(my $curl = `which curl`); if(!$curl){ system('apt-get install curl -y > /dev/null'); } chomp(my $cpanm = system('/bin/bash', '-c', 'which cpanm &>/dev/null')); #installs cpanm if missing if($cpanm){ system('curl -s -L http://cpanmin.us | perl - --sudo App::cpanminus'); } #loops through required modules and installs them if missing foreach my $x (@perl){ eval "use $x"; if($@){ system("cpanm $x"); eval "use $x"; } } 

Cela fonctionne bien pour moi, peut-être y a-t-il quelque chose que vous pouvez utiliser ici.

cpan Foo::Bar simplement cpan Foo::Bar sur le shell serait utile.