web-dev-qa-db-fra.com

Quel est le moyen le plus simple d'installer un module Perl manquant?

Je reçois cette erreur:

Can't locate Foo.pm in @INC

Y a-t-il un moyen plus facile de l’installer que de télécharger, décompresser, fabriquer, etc.?

170
dreeves

Sous Unix :

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

# cpan

et le type

install Chocolate::Belgian

ou sous forme abrégée:

cpan Chocolate::Belgian

Sous Windows :

Si vous utilisez ActivePerl sous Windows, PPM (Perl Package Manager) a à peu près 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 livrent beaucoup de 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 de mises à jour automatiques et de la facilité de suppression . Cela peut être assez délicat avec l'outil cpan lui-même.

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

208
Benedikt Waldvogel

Essayez App :: cpanminus :

# cpanm Chocolate::Belgian

C'est génial pour juste installer des 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 cpanminus, tapez simplement:

# cpan App::cpanminus

pour l'installer.

Il est également possible de l'installer sans utiliser cpan. La procédure de base bootstrap est la suivante:

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

Pour plus d'informations, consultez la page App :: cpanminus et consultez la section relative à l'installation.

61
Philip Potter

Je remarque que certaines personnes suggèrent une course sous Cpan sous Sudo. Auparavant, 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 qu'il utilise Sudo pour l'installation . C'est beaucoup plus sûr, car cela signifie que les tests ne fonctionnent pas en tant que root.

Si vous avez un ancien shell CPAN, installez simplement le nouveau cpan ("installer CPAN") et lorsque vous rechargez le shell, il devrait vous inviter à configurer ces nouvelles directives.

De nos jours, lorsque je suis sur un système avec un ancien CPAN, la première chose à faire est de mettre à jour le shell et de le configurer afin que je puisse faire la plupart de mes tâches de cpan en tant qu'utilisateur normal.

En outre, je suggérerais fortement aux utilisateurs de Windows d’enquêter fraise Perl . Il s'agit d'une version de Perl livrée 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 en ce qui concerne l’installation de modules, et que les choses ont tendance à "fonctionner" plus souvent.

29
Dave Rolsky

Si vous êtes sur Ubuntu et que vous voulez installer le module Perl préemballé (par exemple, geo :: ipfree), essayez ceci:

 $ apt-cache search Perl geo :: ipfree 
 libgeo-ipfree-Perl - Un pays de recherche de l'adresse IP du module Perl 
 
 $ Sudo apt-get installez libgeo-ipfree-Perl 
24
Otto

Quelques personnes ont mentionné l’utilitaire cpan, mais c’est plus qu’un simple démarrage d’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 lance le shell CPAN.pm. Cela fonctionne sous Unix, Mac et devrait convenir sous Windows (en particulier Strawberry Perl).

Il existe plusieurs autres choses que vous pouvez faire avec l'outil cpan. Voici un résumé des fonctionnalités actuelles (qui pourraient ê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.
15
brian d foy

Sudo Perl -MCPAN -e 'install Foo'

11
dreeves

Voir aussi Oui, même vous pouvez utiliser CPAN . Il montre comment utiliser CPAN sans accès root ou Sudo.

10
Corion

Otto a fait un 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 lorsque la recherche d'apt-cache 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 pourrez installer pour obtenir Some :: Random :: Module. Les pages de manuel constituent l’un des principaux avantages: des exemples de scripts, en plus du module lui-même, seront placés dans l’emplacement de votre choix. Si la distribution fournit un paquetage officiel pour une version plus récente de Some :: Random :: Module, elle sera automatiquement installée lors de la mise à jour d'apt-get.

8
mikegrb

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

IMHO le moyen le plus simple d'installer des modules CPAN (sur des systèmes similaires à Unix, et ne pas avoir la moindre idée de ce qui se passe) est:

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

Ce qui précède est l’installation du "programme d’installation de 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
7
jm666

Beaucoup de recommandations pour CPAN.pm, ce qui est génial, mais si vous utilisez Perl 5.10, vous avez également accès à CPANPLUS.pm qui ressemble à CPAN.pm mais en mieux.

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

$ cpan CPANPLUS
6
Dave Cross

Il arrive souvent que la commande cpan install échoue avec le message tel que "make test a renvoyé un statut incorrect, ne s'installera pas sans force"

Dans ce cas, voici comment installer le module:

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

Sur Ubuntu, la plupart des modules Perl sont déjà empaquetés. L'installation est donc beaucoup plus rapide que la plupart des autres systèmes qui doivent compiler.

Pour installer Foo::Bar à l'invite de commande, vous devez par exemple généralement:

Sudo apt-get install libfoo-bar-Perl

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

4
Myforwik

Même cela devrait marcher:

cpan -i module_name
4
Mandar Pande

Utilisez la commande cpan en tant que 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. Il suffit de faire

$ cpanm HTML::Parser
4
Chankey Pathak

La manière la plus simple pour moi est la suivante:

Perl_MM_USE_DEFAULT=1 Perl -MCPAN -e 'install DateTime::TimeZone'

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

b) c'est un shell en ligne, bon pour les scripts d'installation

3
Mister X

2 façons que je connaisse:

TILISANT 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

TILISANT CPAN:

vous pouvez aussi utiliser CPAN comme ceci (* nix systems):

Perl -MCPAN -e 'Shell'

vous obtient un invite

cpan>

à l'invite ...

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

tapez h pour obtenir une liste de commandes pour cpan

3
JWHEAT

Sur Fedora Linux ou Enterprise Linux, yum suit également les dépendances de la bibliothèque Perl. Ainsi, si le module Perl est disponible et que certains paquetages rpm exportent cette dépendance, il installera le bon paquet pour vous.

yum install 'Perl(Chocolate::Belgian)'

(probablement le paquet Perl-Chocolate-Belgian, ou même le paquet ChocolateFactory)

3
Michal Ingeli

Sur Fedora, vous pouvez utiliser

# yum install foo

tant que Fedora a un paquet existant pour le module.

3
Bruce Alderman

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

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

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

2
Chris Forever

On dirait que vous avez déjà reçu votre réponse, mais je me suis dit que je devrais intervenir. C’est ce que je fais dans certains scripts sur Ubuntu (ou un 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, peut-être qu’il ya quelque chose que vous pouvez utiliser.

1
Ed Dunn

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

1
PW.

Exécuter simplement cpan Foo::Bar sur Shell servirait à cela.

1
Kamal Nayan