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.?
cpan
.
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.?
cpan
.
Réponses:
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.
apt-cache search 'perl$'
pacman -Ss '^perl-'
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.
ppm
utilise 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 cpan
pour installer LWP
, LWP::Simple
ou LWP::UserAgent
il installera la distribution libwww-perl
pour vous. La majorité des distributions contiennent un seul module avec un nom équivalent, mais il y a plusieurs exceptions comme ça
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.
cpan
pour installer App::cpanminus
est 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 cpan
et la création d'un .cpan
répertoire (par la suite) inutile .
cpanminus
partir du terminal. Je trouve cpanm
mieux que cpan
parce 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.
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.
install CPAN
d'où? $sudo apt-get install cpan
?
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 .
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
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.
Voir également Oui, même vous pouvez utiliser CPAN . Il montre comment utiliser CPAN sans avoir d'accès root ou sudo.
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.
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
Beaucoup de recommandations pour CPAN.pm
, ce qui est excellent, mais si vous utilisez, Perl 5.10
vous avez également accès à CPANPLUS.pm
ce qui est comme CPAN.pm
mais meilleur.
Et, bien sûr, il est disponible CPAN
pour les personnes utilisant encore des versions plus anciennes de Perl. Pourquoi ne pas essayer:
$ cpan CPANPLUS
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));"
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.
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
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
Sur Fedora, vous pouvez utiliser
# yum install foo
tant que Fedora a un package existant pour le module.
On Fedora Linux
ou Enterprise Linux
, yum
suit é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)
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
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
Parfois, vous pouvez utiliser le yum search foo
pour rechercher le module perl relatif, puis utiliser yum install xxx
pour installer.
Solution sécurisée
De nombreuses réponses mentionnent l'utilisation de l' cpan
utilitaire (qui utilise CPAN.pm
) sans un mot sur la sécurité. Par défaut, la version CPAN
2.27 et les versions antérieures se configurent urllist
pour 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 CHECKSUMS
fichiers, 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.pm
fichier 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.
https://www.cpan.org/
).
Le simple fait d'exécuter cpan Foo::Bar
sur le shell servirait le but.
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.