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.?


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.


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.


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.


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

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.

11

sudo perl -MCPAN -e 'install Foo'


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.


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

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

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));"

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.



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

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


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.


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)


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


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

2

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


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.


" 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 .



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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.