Quelle est la meilleure façon 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 simple de l'installer que le téléchargement, le démontage, la fabrication, etc.?
23 réponses
À La Unix :
vous commencez habituellement cpan dans votre coquille:
# cpan
et type
install Chocolate::Belgian
ou en abrégé:
cpan Chocolate::Belgian
À La Windows :
si vous utilisez ActivePerl sur 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 le CPAN FAQ
de nombreuses distributions envoient beaucoup de modules perl comme les paquets.
- Gentoo: category dev-perl
- Debian:
apt-cache search 'perl$'
Vous devriez toujours les préfère que vous bénéficiez d'automatique (sécurité) mises à jour et la facilité de l'enlèvement . Cela peut être assez délicat avec l'outil cpan lui-même.
pour Gentoo il y a un bel outil appelé g-cpan qui construit/installe le module à partir de CPAN et crée un paquet Gentoo ( ebuild ) pour vous.
Try App:: cpanminus :
# cpanm Chocolate::Belgian
c'est génial pour juste obtenir des trucs installés. Il ne fournit aucune des fonctionnalités les plus complexes de CPAN ou CPANPLUS, donc il est facile à utiliser, à condition que vous sachiez quel module vous voulez installer. Si vous n'avez pas déjà cpanminus, tapez juste:
# cpan App::cpanminus
pour l'installer.
il est également possible de l'installer sans utiliser cpan. Base la procédure de bootstrap 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 installation.
je note que des gens ont suggéré un passage en 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 sudo juste 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 vieux shell CPAN, installez simplement le nouveau cpan ("install CPAN") et lorsque vous rechargez le shell, il devrait vous demander de configurer ces nouveaux directive.
de nos jours, quand je suis sur un système avec un vieux 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 de cpan comme un utilisateur normal.
aussi, je suggère fortement que les utilisateurs de Windows enquêtent sur Perl fraise . Il s'agit d'une version de Perl qui est livrée avec un shell CPAN préconfiguré ainsi qu'un compilateur. Il comprend également certains modules Perl difficiles à compiler avec leur dépendances externes de bibliothèque C, 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 travailler" beaucoup plus souvent.
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 - A look up country of ip address Perl module $ sudo apt-get install libgeo-ipfree-perl
quelques personnes ont mentionné l'utilité de cpan, mais c'est plus que juste démarrer un shell. Donnez-lui juste les modules que vous voulez installer et laissez-le faire.
$prompt> cpan Foo::Bar
si vous ne lui donnez aucun argument, il démarre le CPAN.Premier ministre shell. 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 le cpan. Voici un résumé de l' les caractéristiques actuelles (qui pourraient être plus récentes que celle fournie 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.
voir Aussi Oui, même vous pouvez utiliser CPAN . Il montre comment vous pouvez utiliser CPAN sans avoir accès à root ou sudo.
Otto fait une bonne suggestion . Cela fonctionne pour Debian, ainsi que tout autre dérivé de Debian. La pièce manquante est ce qu'il faut faire lorsque 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 Certains::Random::Module. Un des grands avantages ici est pages de manuel et de l'échantillon les scripts en plus du module lui-même seront placés dans l'emplacement de choix de votre distro. Si le distro sort un jour avec un paquet officiel pour une nouvelle version de certains modules::Random::, il sera automatiquement installé lorsque vous obtiendrez la mise à jour apt-get.
déjà répondu et accepté la réponse - mais de toute façon:
IMHO la façon la plus facile d'installer des modules CPAN (sur des systèmes unix, et n'ont aucune idée des wondows) est:
curl -L http://cpanmin.us | perl - --sudo App::cpanminus
ce qui précède installe le" Zero configuration CPAN modules installer "appelé cpanm
. (Peut prendre plusieurs minutes pour l'installer - ne pas casser le processus)
et après-simplement:
cpanm Foo
cpanm Module::One
cpanm Another::Module
il arrive souvent que la commande CPAN install échoue avec le message comme "make test était retourné mauvais état, ne s'installe pas sans force"
dans ce cas, voici la façon d'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
alors vous avez aussi accès à CPANPLUS.pm
qui est comme CPAN.pm
mais mieux.
et, bien sûr, il est disponible sur CPAN
pour les personnes qui utilisent encore les anciennes versions de Perl. Pourquoi ne pas essayer:
$ cpan CPANPLUS
2 chemins que je connais:
UTILISANT PPM:
avec Windows (ActivePerl) j'ai utilisé ppm
du type de ligne de commande ppm. Au ppm invite ...
ppm> install foo
ou
ppm> search foo
pour obtenir une liste des modules foo disponibles. Tapez help pour toutes les commandes
UTILISANT CPAN:
vous pouvez également utiliser CPAN comme ceci ( les systèmes *nix, ) :
perl -MCPAN -e 'shell'
vous obtient un prompt
cpan>
à l'instant ...
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
aussi longtemps que Fedora dispose d'un paquet existant pour le module.
utilisez la commande cpan comme cpan Modulename
$ cpan HTML::Parser
pour installer des dépendances suivez automatiquement 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 des dépendances automatiquement. Il suffit de faire
$ cpanm HTML::Parser
sur ubuntu la plupart des modules perl sont déjà empaquetés, de sorte que l'installation est beaucoup plus rapide que la plupart des autres systèmes qui doivent compiler.
pour installer Foo::Bar
à une invite commmand par exemple habituellement vous faites juste:
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
assure également le suivi de perl dépendances de la bibliothèque. Donc, si le module perl est disponible, et qu'un paquet rpm exporte cette dépendance, il installera le bon paquet pour vous.
yum install 'perl(Chocolate::Belgian)'
(le plus probable perl-Chocolat Belge-paquet, ou même ChocolateFactory package)
la façon la plus facile pour moi est celle-ci:
PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install DateTime::TimeZone'
a )détection/résolution/installation automatique de dépendances de type récursif
b) c'est un shell onliner, bon pour setup-scripts
si vous voulez mettre le nouveau module dans un emplacement personnalisé que votre shell cpan n'est pas configuré pour utiliser, alors peut-être, 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
parfois, vous pouvez utiliser le yum search foo
pour rechercher le module perl relatif, puis utiliser yum install xxx
pour installer.
Semble que vous avez déjà votre réponse, mais j'ai pensé carillon. C'est ce que je fais dans certains scripts sur un serveur Ubuntu (ou 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 y a quelque chose ici que vous pouvez utiliser.
simplement exécuter cpan Foo::Bar
sur shell servirait le but.