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

192

J'obtiens 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.?

dreeves
la source
1
Si le module en question est un module principal, consultez Comment réparer «Impossible de localiser Archive / Tar.pm» .
ikegami
Soyez très prudent concernant la sécurité: ce qui est nécessaire pour s'assurer que les modules n'ont pas été modifiés doit être téléchargé de manière sécurisée depuis un site de confiance. Voir ma réponse sur l'utilisation de cpan.
vinc17

Réponses:

226

Sous Unix :

généralement vous démarrez cpan dans votre shell:

# cpan

et tapez

install Chocolate::Belgian

ou sous forme courte:

cpan Chocolate::Belgian

Sous Windows :

Si vous utilisez ActivePerl sous Windows, le PPM (Perl Package Manager) a en grande partie les mêmes fonctionnalités que CPAN.pm.

Exemple:

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

voir Comment installer des modules Perl? dans la FAQ CPAN

De nombreuses distributions proposent de nombreux modules Perl sous forme de packages.

  • Debian / Ubuntu: apt-cache search 'perl$'
  • Arch Linux: pacman -Ss '^perl-'
  • Gentoo: catégorie dev-perl

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

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

Benedikt Waldvogel
la source
14
La forme courte est juste "cpan Chocolate :: Belgian" de la ligne de commande :)
brian d foy
3
IIRC le dernier ActivePerl n'a plus de ppm de ligne de commande, il ouvre maintenant une interface graphique sophistiquée.
Kev
6
Juste "ppm" ouvre l'interface graphique, mais suivi des commandes, il reste sur la ligne de commande. Donc, "ppm help", "ppm install ...", etc.
Bill Ruppert
Notez que ppm utilise des tirets pour le séparateur de chemin du module et non les doubles deux points habituels. (Peut-être parce que les deux points signifient des lecteurs dans dos?) Cela m'a eu plusieurs fois;)
Matthew Lock
3
@MatthewLock: ppmutilise des traits d'union -parce que vous spécifiez la distribution que vous souhaitez installer, ce qui est beaucoup plus honnête. Par exemple, si vous utilisez cpanpour installer LWP, LWP::Simpleou LWP::UserAgentil installera la distribution libwww-perlpour vous. La majorité des distributions contiennent un seul module avec un nom équivalent, mais il y a plusieurs exceptions comme ça
Borodin
65

Essayez App :: cpanminus :

# cpanm Chocolate::Belgian

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

# cpan App::cpanminus

pour l'installer.

Il est également possible de l'installer sans utiliser du tout cpan. La procédure d'amorçage de base est,

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

Pour plus d'informations, rendez-vous sur la page App :: cpanminus et consultez la section sur l'installation.

Philip Potter
la source
7
Utiliser cpanpour installer App::cpanminusest un peu étrange. Les instructions d'installation normales impliquent une procédure d'amorçage consistant à télécharger une partie de celui-ci à partir de cpanmin.us et à l'utiliser pour installer le reste. Cela évite la configuration cpanet la création d'un .cpanrépertoire (par la suite) inutile .
Chas. Owens
Sur Ubuntu, vous pouvez simplement installer à cpanminuspartir du terminal. Je trouve cpanmmieux que cpanparce qu'il ne met pas les journaux d'erreurs à l'écran plutôt que les stocke dans des fichiers journaux temporaires et donne le chemin en cas d'erreurs.
user13107
J'obtiens
IgorGanapolsky
29

Je note que certaines personnes suggèrent une exécution de cpan sous sudo. Cela était nécessaire pour installer dans le répertoire système, mais les versions modernes du shell CPAN vous permettent de le configurer pour utiliser simplement sudo pour l'installation. C'est beaucoup plus sûr, car cela signifie que les tests ne s'exécutent pas 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 devrait vous inviter à 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 le faire afin que je puisse faire la plupart de mon travail cpan en tant qu'utilisateur normal.

De plus, je suggère fortement aux utilisateurs de Windows d'étudier Perl à la fraise . Il s'agit d'une version de Perl fournie avec un shell CPAN préconfiguré ainsi qu'un compilateur. Il inclut également des modules Perl difficiles à compiler 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 ont tendance à "juste fonctionner" beaucoup plus souvent.

Dave Rolsky
la source
1
install CPANd'où? $sudo apt-get install cpan?
isomorphismes
1
@Lao Tzu: non, car CPAN est un module de base Perl et n'est pas disponible en tant que package DEB séparé. Je pense que dans la plupart des situations, il est encore mieux d'utiliser App::cpanminus, c'est une telle joie de l'utiliser. Philip Potter le suggère dans sa réponse ici et vous pourriez essayer ce Chas. Réponse d'Owens .
sem.22
25

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

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

    $ sudo apt-get install libgeo-ipfree-perl
Otto
la source
C'est bien. Je vous remercie.
Ivan X
16

Quelques personnes ont mentionné l'utilitaire cpan, mais il ne s'agit pas seulement de démarrer un shell. Donnez-lui simplement les modules que vous souhaitez installer et laissez-le faire son travail.

$prompt> cpan Foo::Bar

Si vous ne lui donnez aucun argument, il démarre le shell CPAN.pm. Cela fonctionne sous Unix, Mac et devrait être parfait sous 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
Recompiles dynamically loaded modules with CPAN::Shell->recompile.

-v
Print the script version and CPAN.pm version.
brian d foy
la source
11

sudo perl -MCPAN -e 'install Foo'

dreeves
la source
Génial, cela a fonctionné pour moi tout à l'heure sur Windows avec Git perl, mais j'ai dû installer GnuWin make d'abord
wytten
8

Otto a fait une bonne suggestion . Cela fonctionne aussi pour Debian, ainsi que pour tout autre dérivé Debian. La pièce manquante est ce qu'il faut faire lorsque la recherche apt-cache ne trouve pas quelque chose.

$ 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 package deb que vous pouvez installer pour obtenir Some :: Random :: Module. L'un des grands avantages ici est que les pages de manuel et les exemples de scripts en plus du module lui-même seront placés à l'emplacement de choix de votre distribution. Si la distribution sort un jour avec un package officiel pour une version plus récente de Some :: Random :: Module, il sera automatiquement installé lorsque vous aurez apt-get upgrade.

mikegrb
la source
7

Déjà répondu et réponse acceptée - mais quand même:

À mon humble avis, le moyen le plus simple d'installer des modules CPAN (sur des systèmes de type Unix, et je n'ai aucune idée des merveilles) est:

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

Ce qui précède consiste à installer le "programme d'installation des modules CPAN à configuration zéro" appelé cpanm. (L'installation peut prendre plusieurs minutes - ne pas interrompre le processus)

et après - simplement:

cpanm Foo
cpanm Module::One
cpanm Another::Module
jm666
la source
6

Beaucoup de recommandations pour CPAN.pm, ce qui est excellent, mais si vous utilisez, Perl 5.10vous avez également accès à CPANPLUS.pmce qui est comme CPAN.pmmais meilleur.

Et, bien sûr, il est disponible CPANpour les personnes utilisant encore des versions plus anciennes de Perl. Pourquoi ne pas essayer:

$ cpan CPANPLUS
Dave Cross
la source
Heh, c'est mignon. Utilisez CPAN.pm pour se remplacer par CPANPLUS. :)
brian d foy
5

Plusieurs fois, il arrive que la commande cpan install échoue avec le message du type "make test avait renvoyé un mauvais état, ne sera pas installé sans forcer"

Dans ce cas, voici la manière d'installer le module:

perl -MCPAN -e "CPAN::Shell->force(qw(install Foo::Bar));"
jaxbihani
la source
Malheureusement, cela donne: Impossible de localiser CPAN.pm dans @INC (vous devrez peut-être installer le module CPAN) (@INC contient: / etc / perl
IgorGanapolsky
4

Sur ubuntu, la plupart des modules perl sont déjà fournis, l'installation est donc beaucoup plus rapide que la plupart des autres systèmes qui doivent compiler.

Pour installer Foo::Barà une invite de commande par exemple, il vous suffit généralement de faire:

sudo apt-get install libfoo-bar-perl

Malheureusement, tous les modules ne suivent pas cette convention de dénomination.

Myforwik
la source
4

Même cela devrait fonctionner:

cpan -i module_name
serenesat
la source
4

Utilisez la commande cpan comme cpan Modulename

$ cpan HTML::Parser

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

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

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

$ cpanm HTML::Parser
Chankey Pathak
la source
3

2 façons dont je connais:

UTILISATION DE PPM:

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

à partir du type de ligne de commande ppm. À l'invite ppm ...

ppm> install foo

ou

ppm> search foo

pour obtenir une liste des modules toto disponibles. Tapez help pour toutes les commandes

UTILISATION DU CPAN:

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

perl -MCPAN -e 'shell'

vous reçoit une invite

cpan>

à l'invite ...

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

tapez h pour obtenir une liste de commandes pour cpan

JWHEAT
la source
1
Vous pouvez aussi simplement dire "$ cpan Foo :: Bar" pour installer directement à partir de la ligne de commande. Pas besoin d'une doublure fantaisie ou d'une coque CPAN. :)
brian d foy
3

Sur Fedora, vous pouvez utiliser

# yum install foo

tant que Fedora a un package existant pour le module.

Bruce Alderman
la source
3

On Fedora Linuxou Enterprise Linux, yumsuit également les dépendances de la bibliothèque Perl. Donc, si le module perl est disponible et que certains packages rpm exportent cette dépendance, il installera le bon package pour vous.

yum install 'perl(Chocolate::Belgian)'

(probablement un paquet perl-chocolat-belge, ou même un paquet ChocolateFactory)

Michal Ingeli
la source
3

Le moyen le plus simple pour moi est le suivant:

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

a) détection / résolution / installation de dépendances récursives automatiques

b) c'est un shell onliner, bon pour les scripts de configuration

Monsieur X
la source
2

Si vous souhaitez placer le nouveau module dans un emplacement personnalisé que votre shell cpan n'est pas configuré pour utiliser, alors peut-être que ce qui suit sera pratique.

 #wget <URL to the module.tgz>
 ##unpack
 perl Build.PL
./Build destdir=$HOME install_base=$HOME
./Build destdir=$HOME install_base=$HOME install
venkrao
la source
2

Parfois, vous pouvez utiliser le yum search foopour rechercher le module perl relatif, puis utiliser yum install xxxpour installer.

Chris Forever
la source
2

Solution sécurisée

De nombreuses réponses mentionnent l'utilisation de l' cpanutilitaire (qui utilise CPAN.pm) sans un mot sur la sécurité. Par défaut, la version CPAN2.27 et les versions antérieures se configurent urllistpour utiliser une URL http (à savoir, http://www.cpan.org/ ), qui autorise les attaques MITM, n'est donc pas sécurisée. C'est ce qui est utilisé pour télécharger les CHECKSUMSfichiers, de sorte qu'il doit être changé en une URL sécurisée (par exemple https://www.cpan.org/ ).

Ainsi, après avoir exécuté cpan et accepté la configuration par défaut, vous devez modifier le MyConfig.pmfichier généré (le chemin complet est sorti) de la manière suivante. Remplacer

'urllist' => [q[http://www.cpan.org/]],

par

'urllist' => [q[https://www.cpan.org/]],

Remarque: https n'est pas suffisant; vous avez également besoin d'un site Web fiable. Alors, soyez prudent si vous voulez choisir un miroir arbitraire.

Ensuite, vous pouvez utiliser cpan de la manière habituelle.

Mon rapport de bogue sur rt.cpan.org à propos de l'URL non sécurisée.

Vinc17
la source
" Cpan.org " n'est-il pas redirigé vers " cpan.org "?
Dave Everitt le
1
@DaveEveritt La redirection de http vers https n'est utile que pour la confidentialité, par exemple contre quelqu'un qui ne peut regarder que les données transitant sur le réseau. Mais si un attaquant contrôle le réseau (par exemple un hotspot wifi public ou un réseau local non protégé), une attaque de type " man-in-the-middle" peut être possible, et l'attaquant utilisera son propre serveur (évidemment pas https://www.cpan.org/).
vinc17
1

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

PW.
la source
1

Le simple fait d'exécuter cpan Foo::Barsur le shell servirait le but.

Kamal Nayan
la source
1

On dirait que vous avez déjà votre réponse, mais j'ai pensé que j'interviendrais. C'est ce que je fais dans certains scripts sur un serveur Ubuntu (ou serveur Debian)

#!/usr/bin/perl

use warnings;
use strict;

#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, il y a peut-être quelque chose que vous pouvez utiliser ici.

Ed Dunn
la source