Installation des modules Perl CPAN

Sous Windows, Linux et Mac OS

djibril

Vous souhaitez installer des modules Perl CPAN sur votre ordinateur (serveur), vous débutez ou rencontrez des difficultés… cet article vous explique comment le faire sous différents systèmes d'exploitation (Windows, Linux et Mac OS).
Commentez

- Titre : Installation des modules Perl CPAN

- Auteur : djibril

- Parution : 17 décembre 2008

- Mise à jour : 7 avril 2015

- Public visé :

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2015 djibril. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- I-A. Qu'est-ce qu'un module Perl ?

- I-B. Les modules CPAN

- I-C. Comment chercher un module sur le CPAN ?

- I-D. Où se trouvent les modules CPAN ?

- II. Installation des modules CPAN sous Windows

- II-A. Perl Package Manager

- II-A-1. PPM avec Internet

- II-A-1-a. Version antérieure à Perl 5.8.8 build 819

- II-A-1-b. Version Perl 5.8.8 build 819 et plus (5.10, 5.12…)

- II-A-1-c. Problèmes rencontrés

- II-A-2. PPM sans Internet

- II-B. Repositories

- II-B-1. Machines 64-bits

- II-C. Compilation des modules CPAN

- II-D. Utilitaire CPAN

- II-D-1. Sous Windows 32-bits

- II-D-2. Sous Windows 64-bits

- II-D-3. Quelques problèmes rencontrés

- II-E. Installation sous Strawberry Perl

- III. Installation des modules CPAN sous Linux et Mac OS

- III-A. Manuellement

- III-B. Via l'utilitaire CPAN

- III-C. En cas de soucis

- IV. Conclusion

- V. Remerciements

I - Introduction

I-A - Qu'est-ce qu'un module Perl ?

Un module est un script Perl avec une extension « .pm » qui a été écrit pour effectuer des tâches précises.
Lorsque vous programmez, votre script peut rapidement devenir très long (des milliers de lignes de codes) et vous avez du mal à vous y retrouver par la suite. Il n'est pas évident de le maintenir par vous ou une tierce personne des mois après. Il est donc important de le sectionner en procédures et modules afin de le rendre plus court, plus propre, facilement réutilisable.

Le but de cet article n'est pas d'expliquer comment écrire un module Perl, pour ce faire, reportez-vous aux cours et à la FAQ Perl.

I-B - Les modules CPAN

CPAN est le réseau complet d'archives de Perl. Il en fait sa grande force et son succès. En effet, il permet de collecter des milliers de modules prêts à être utilisés. Perl lui-même intègre une partie de ces modules sans lesquels il ne pourrait pas fonctionner.

La plupart des modules du CPAN sont testés régulièrement. Ils sont fiables et c'est à vous de lire attentivement la documentation et de les installer afin de les tester et en tirer tous les bénéfices.

I-C - Comment chercher un module sur le CPAN ?

Tous les développeurs recherchent des modules (librairies) afin de ne pas réinventer la roue . En Perl, tout est sur le CPAN. Il existe d'ailleurs une page de recherche simple d'utilisation. Tapez des mots-clés en fonction de votre recherche (File par exemple si vous recherchez un module en rapport avec des fichiers, Net pour réseaux, win pour Windows).

N.B. Sur la page de recherche du CPAN, il existe différentes catégories qui permettent de classer les modules. Une fois votre bonheur trouvé, lisez bien la documentation, et installez le module pour le tester.

I-D - Où se trouvent les modules CPAN ?

Il est possible de télécharger chaque module. Ces packages sont compressés et présents sur des sites miroirs tels oléane, ovh, enstimac, Jussieu… L'important n'est pas de les télécharger, mais surtout de les installer et cela en fonction de votre système d'exploitation. Perl a prévu des mécanismes différents pour vous faciliter la vie, surtout dans la gestion des dépendances entre modules.

N.B. Par abus de langage, on utilise le mot « module » CPAN pour signifier package.

II - Installation des modules CPAN sous Windows

L'installation des modules est simple, mais nécessite de connaître quelques outils Perl en fonction du système d'exploitation sur lequel on travaille. Lisez attentivement les sections suivantes !

Les explications sont issues d'expériences personnelles sous Windows 2000, 2003, XP, Vista, Seven…

II-A - Perl Package Manager

Perl Package Manager (PPM) vous permet d'accéder aux collections de packages, de les installer, de les supprimer ou de les mettre à jour sur votre système. Il est fortement recommandé d'installer des modules Perl CPAN en passant par ce gestionnaire. Il est installé en même temps que Perl. La version de PPM dépend de votre version de Perl :

- PPM version 2 ou 3 pour Perl 5.6 ;

- PPM version 4 pour Perl 5.8, 5.10 et plus.

Il est possible d'utiliser PPM de deux façons différentes :

- via une console DOS, quelle que soit la version de Perl ;

- via une interface graphique à partir de la version 5.8.8 build 820.

Pour connaître votre version de Perl, tapez sous DOS la commande suivante

perl -v
This is perl, v5.8.8 built for MSWin32-x86-multi-thread
(with 18 registered patches, see perl -V for more detail)

Copyright 1987-2007, Larry Wall

Binary build 822 [280952] provided by ActiveState http://www.ActiveState.com
Built Jul 31 2007 19:34:48

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

II-A-1 - PPM avec Internet

Si votre connexion Internet passe par un pare-feu (firewall) ou un serveur mandataire (proxy), vous devez positionner la variable d'environnement "HTTP_proxy" avec le nom du serveur mandataire.

Ex : http_proxy=http://proxy.example.org

Si votre serveur mandataire nécessite un nom d'utilisateur et un mot de passe, les variables d'environnement « HTTP_proxy_user » et « HTTP_proxy_pass » devront être initialisées avec ces valeurs. Vous pouvez tout aussi bien positionner « HTTP_proxy » ainsi :

Exemple : http_proxy=http://username:password@proxy.example.org

Si de plus vous utilisez un port autre que le port 80, rajoutez-le ainsi :

http_proxy=http://username:password@proxy.example.org:8080

N.B. Si dans votre username ou password, il y a un espace, pensez à le remplacer par .

PPM peut alors être exécuté en tapant "ppm" dans une fenêtre DOS ou bien via un double-clic sur C:\Perl\bin\ppm.bat.

II-A-1-a - Version antérieure à Perl 5.8.8 build 819

Si vous utilisez une ancienne version de Perl, notamment la 5.6, 5.8.0, jusqu'à 5.8.8 build 818, PPM ne s'utilise que via une console DOS.

Ouvrez une console DOS et tapez ppm. Ensuite, pour installer un module quelconque, tapez install MonModule.
Exemple :

ppm> install CGI
=============
Install 'CGI' version 2.91 in ActivePrl 5.8.2.808.
=============
Downloaded 147245 bytes.
Extracting 21/21: blib/arch/auto/CGI/.exists
Installing C:\Perl\html\site\lib\CGI.html
.........................................=> Installation OK
.........................................
Installing C:\Perl\site\lib\CGI.pm
.........................................
.........................................
Successfully installed CGI version 2.91 in ActivePerl5.8.2.808.
ou
ppm> install List-Compare
...

Voilà, c'est tout ! En cas de soucis, veuillez lire la section « Problèmes rencontrés ».

II-A-1-b - Version Perl 5.8.8 build 819 et plus (5.10, 5.12…)

Depuis cette version, vous disposez de la version 4.01 de PPM. Le gestionnaire peut être utilisé en console comme avant. Mais pour cela, vous devrez taper sous DOS la commande suivante : ppm-shell.
Si vous tapez « ppm », vous obtiendrez maintenant une belle interface graphique !

Pour installer un nouveau module, choisissez dans la liste des modules celui qui vous intéresse. Si ce dernier est jaune, il est déjà installé. S'il est grisé il n'est pas installé.

Faites un clic droit et choisissez "install". Vous pouvez le faire sur tous les modules que vous souhaitez installer.
Maintenant tous les modules que vous avez souhaité installer seront décorés d'une flèche verte. Cliquez maintenant sur la flèche verte.

L'installation commence et PPM gère tout seul les dépendances. Pour les désinstallations ou mises à jour des modules, c'est le même principe.

II-A-1-c - Problèmes rencontrés

Voici une liste des problèmes que l'on peut rencontrer :

- sous DOS, Note: Package 'MonModule' is already installed ou no missing packages to install ;

- sous DOS, Error: Package 'MonModule' not found. Please 'search' for it first. ou Can't find any package that provides MonModule ;

- via l'interface ou console: je ne vois pas le module qui m'intéresse, alors que je l'ai vu sur le site du CPAN  !

1 - Sous DOS, Note: Package 'MonModule' is already installed ou no missing packages to install

Pas très compliqué, notre module est déjà installé  !

2 - Sous DOS, Error: Package 'MonModule' not found. Please 'search' for it first. ou Can't find any package that provides MonModule

Dans ce cas, vérifiez que vous n'avez pas fait de fautes de frappe (majuscule ou non), vérifiez aussi le nom exact du package sur le site du CPAN. Il se peut que le nom du package contienne un tiret "-" plutôt qu'un ::".

Si vous avez un doute, faites une recherche via search

ppm> search

Si malgré cela vous ne le trouvez pas alors qu'il est disponible sur le site du CPAN, lisez les sections "repositories", puis "Compilation des modules CPAN" de cet article  !

3- Je ne vois pas le module qui m'intéresse alors que je l'ai vu sur le site du CPAN

Vous ne disposez pas d'assez de repositories, ou bien ce module n'est tout simplement pas encore compatible pour une installation via ppm. Dans tous les cas, lisez les sections "repositories" et "Compilation des modules CPAN".

Documentation officielle de PPM

II-A-2 - PPM sans Internet

Installer un module sans Internet signifie en fait y avoir déjà eu accès à un moment donné  ! Supposons que vous souhaitez aller chez un ami et profiter de sa connexion Internet pour vous permettre de récupérer certains modules (ex : List::Compare, Statistics::R) CPAN à installer chez vous, voilà comment procéder :

- Allez sur un repository

Je vais aller sur chaque repository que je connais pour essayer de trouver les modules List::Compare et Statistics::R. Sur bribes : Repository de bribes Perl, je le trouve ici.

Dans le fichier xml, je cherche une ligne qui ressemble à <SOFTPKG NAME="Statistics-R" VERSION="…"> et je copie le bloc dans un fichier que je nomme Statistic-R.ppd puis je l'enregistre sur ma clé USB dans un répertoire "ModulesPerso".

Statistic-R.ppd

<SOFTPKG NAME="Statistics-R" VERSION="0.02">
<ABSTRACT>
Controls the R (R-project) interpreter through Perl.
</ABSTRACT>
<AUTHOR>Graciliano M. P. <gm@virtuasites.com.br></AUTHOR>
<IMPLEMENTATION>
<ARCHITECTURE NAME="MSWin32-x86-multi-thread-5.8"/>
<CODEBASE HREF="http://theoryx5.uwinnipeg.ca/ppms/x86/Statistics-R.tar.gz"/>
</IMPLEMENTATION>
<PROVIDE NAME="Statistics::R" VERSION="0.02"/>
<PROVIDE NAME="Statistics::R::Bridge" VERSION="0.01"/>
<PROVIDE NAME="Statistics::R::Bridge::Linux" VERSION="0.01"/>
<PROVIDE NAME="Statistics::R::Bridge::pipe" VERSION="0.01"/>
<PROVIDE NAME="Statistics::R::Bridge::Win32" VERSION="0.01"/>
</SOFTPKG>

On remarque que dans ce fichier, il n'y a pas de balises :

<REQUIRE NAME="AutreModule"/>

ce qui signifie qu'il n'a pas besoin d'autres modules pour fonctionner. Si c'était le cas, il aurait fallu commencer l'installation de ce(s) module(s) en premier. Dans la balise CODEBASE, je récupère le "tar.gz" grâce à l'url. Je l'enregistre dans mon répertoire ModulesPerso. Puis, je change dans le fichier ppd la ligne CODEBASE par la ligne suivante :

codebase

<CODEBASE HREF="Statistics-R.tar.gz"/>

Attention : Dans la balise AUTHOR, il peut y avoir l'adresse email du créateur du module encadrée de < et >, pensez à les convertir en &lt; et &gt;.

AUTHOR

<AUTHOR>Graciliano M. P. &lt;gm@virtuasites.com.br&gt;</AUTHOR>

En ce qui concerne le module List::Compare, je ne le trouve pas sur theoryx. Je vais donc voir sur le repository trouchelle. En bas de la page, je peux faire une recherche de modules et je tape List::Compare. Je le trouve et en cliquant sur le module, le fichier ppd est donné en téléchargement. Je n'ai plus qu'à l'enregistrer dans mon répertoire. Un petit coup d'œil sur le fichier :

List-Compare.ppd

<?xml version="1.0" encoding="UTF-8"?>
<SOFTPKG NAME="List-Compare" VERSION="0,37,0,0">
<TITLE>List-Compare</TITLE>
<ABSTRACT>Compare elements of two or more lists</ABSTRACT>
<AUTHOR>James E Keenan (jkeenan@cpan.org)</AUTHOR>
<IMPLEMENTATION>
<OS NAME="MSWin32" />
<ARCHITECTURE NAME="MSWin32-x86-multi-thread-5.8" />
<CODEBASE HREF="MSWin32-x86-multi-thread-5.8/List-Compare-0.37.zip" />
<PROVIDE NAME="List::Compare" VERSION="0.37" />
<PROVIDE NAME="List::Compare::Base::_Auxiliary" VERSION="0.37" />
<PROVIDE NAME="List::Compare::Base::_Engine" VERSION="0.37" />
<PROVIDE NAME="List::Compare::Functional" VERSION="0.37" />
</IMPLEMENTATION>
</SOFTPKG>

Je récupère le fichier .zip, MSWin32-x86-multithread-5.8/List-Compare-0.37.zip à l'url suivante : http://trouchelle.com/ppm/MSWin32-x86-multithread-5.8/List-Compare-0.37.zip. Je modifie ensuite la balise dans mon fichier ppd de la même manière que précédemment. <CODEBASE HREF="List-Compare-0.37.zip" />.

J'ai mes deux modules ! Je peux maintenant les installer chez moi facilement sans Internet  !

Maintenant chez moi, je copie mon répertoire sur le C:/ par exemple, j'ouvre une console DOS

c:
cd ModulesPerso
ppm install Statistic-R.ppd
ppm install List-Compare.ppd

Voilà, c'est installé !

N.B. Il y a une version de Perl pour laquelle PPM posait un souci avec les packages zippés (ex: List-Compare-0.37.zip). Si cela vous arrive, décompressez le package et compressez en "tar.gz". N'oubliez pas de changer l'extension dans la balise CODEBASE du fichier ppd et voilà, le tour est joué !

Il existe une autre façon pour récupérer un module sur le CPAN et l'installer sur un ordinateur n'ayant pas Internet. Reportez-vous à la section du cours Compilation des modules CPAN.

Attention :Cette technique d'installation est très simple si l'on installe des modules sans dépendances à d'autres modules. Si dans votre fichier ppd, il y a les balises suivantes :

<REQUIRE NAME="AutreModule"/>

Il faudra penser à d'abord installer ces modules, ce qui peut devenir très lourd à gérer !!

II-B - Repositories

Les modules Perl CPAN disponibles et compatibles pour une installation via PPM sont présents sur différents dépôts. Par défaut, lorsque vous installez Perl, vous ne disposez que du dépôt ActiveState Package Repository. Il vous faut donc en ajouter pour augmenter vos chances de trouver votre module.

Voici la liste des dépôts que j'utilise :

- bribes : http://www.bribes.org/perl/ppm/

- bribes : http://www.bribes.org/perl/ppm64/ (pour les ordinateurs 64 bits)

- Tcool : http://ppm.tcool.org/archives/ pour une version de ActivePerl 5.8.8.820 et plus

- Tcool : http://ppm.tcool.org/server/ppmserver.cgi?urn:PPMServer pour une version de ActivePerl 5.8.8.817 ou moins

- Trouchelle : http://trouchelle.com/ppm/ (pour ActivePerl 5.8 et moins)

- Trouchelle : http://trouchelle.com/ppm10/ (pour ActivePerl 5.10 et moins)

- Trouchelle : http://trouchelle.com/ppm12/ (pour ActivePerl 5.12)

- Trouchelle : http://trouchelle.com/ppm14/ (pour ActivePerl 5.14)

Le dépôt Theoryx n'est volontairement pas dans la liste car il n'est plus disponible depuis quelques années. En fait, ce dépôt était maintenu par Randy Kobes qui est décédé en 2009 d'un cancer des poumons et il n'y a donc pas de repreneur.

Le dépôt Trouchelle n'est plus mis à jour depuis la version 5.16 de Perl.
Maintenant une personne ayant une version d'ActivePerl qui est passé du coté Business ne pourra plus bénéficier du repository d'ActivePerl pour l'installation des modules CPAN. C'est la nouvelle politique d'ActivePerl sachant qu'il y a une version tous les ans. Vous risquez d'avoir ce genre de message : « PPM gives me a 401 Authorization Required. Why ? ». Vous pouvez discuter de cette nouvelle politique d'ActivePerl ici.

Pour les ajouter en ligne de commande, faites ceci :

ppm> rep add bribes http://www.bribes.org/perl/ppm

ppm> rep add bribes http://www.bribes.org/perl/ppm64

ppm> rep add Tcool http://ppm.tcool.org/server/ppmserver.cgi?urn:PPMServer
ou
ppm> rep add Tcool http://ppm.tcool.org/archives/
ppm> rep add Trouchelle http://trouchelle.com/ppm/
ou
ppm> rep add Trouchelle http://trouchelle.com/ppm10/
ou
ppm> rep add Trouchelle http://trouchelle.com/ppm12/
ou
ppm> rep add Trouchelle http://trouchelle.com/ppm14/

Une fois tous les repositories ajoutés, vous pouvez maintenant essayer de nouveau d'installer votre module. Si vous ne le trouvez pas sur ces dépôts, cherchez-le sur d'autres repositories. Une autre hypothèse est qu'il peut ne pas être compatible avec PPM.

Une autre façon d'installer un module présent dans un repository consiste à taper "ppm install http://UrlRepository/nom_package.ppd" (si vous connaissez son adresse exacte bien sûr !!!).
Exemple :

ppm> install http://www.bribes.org/perl/ppm/CGI.ppd

Pour les ajouter via l'interface graphique, c'est encore plus simple !

Dans la fenêtre de l'interface, cliquez sur le symbole le plus à droite, tout en haut.

Si vous êtes sous ActivePerl 5.8.8 820 ou 822, vous devrez les ajouter un à un. Sur les versions plus récentes, tous les repositories sont déjà présents. Il vous suffit de les sélectionner un à un et de les installer.

II-B-1 - Machines 64-bits

De nos jours, beaucoup d'ordinateurs portables ou non et de serveurs ont une architecture 64-bits. Il existe de ce fait une version ActivePerl pour ce type de machine. Malheureusement, Perl a un gros défaut car il n'existe pas à ce jour autant de dépôts pour les machines 64-bits que 32-bits. Il existe bien évidemment le dépôt par défaut d'ActivePerl, Jean-Louis Morel (à l'origine du dépôt Bribes) a mis en place un dépôt pour les modules 64-bits.

Pour installer les modules Perl via ppm sous Windows 64-bits, le principe est le même lorsque vous utilisez l'interface graphique ou la ligne de commande comme décrite ci-dessus. Par contre, si vous souhaitez rajouter des repositories, ceux cités ci-dessus ne seront pas fonctionnels. Voici le seul dépôt que j'ai pu trouver qui contient quelques modules dont Tk… c'est celui de bribes.

Voici la liste des dépôts supplémentaires pour 64-bits :

- bribes : http://www.bribes.org/perl/ppm64/

Pour l'installer en ligne de commande :

ppm rep add bribes http://www.bribes.org/perl/ppm64

Si vous en connaissez d'autres, n'hésitez à me prévenir afin que je le rajoute dans cet article ( Commentez ).

Si malgré ce dépôt supplémentaire vous ne trouvez pas votre module, l'unique moyen est de le compiler soit-même ou d'utiliser l'utilitaire cpan comme décrit ci-dessous.

II-C - Compilation des modules CPAN

La compilation d'un module CPAN est nécessaire sous Windows lorsque l'on ne trouve pas un module dans les repositories. La section de cet article a deux buts :

- donner une dernière piste pour installer un module CPAN que vous ne trouvez pas via PPM, même après avoir installé tous les repositories ;

- créer une archive et un fichier ".ppd" afin d'installer un module sur un ordinateur non connecté à Internet.

Avant toute chose, il est primordial de toujours lire le README du module CPAN que vous souhaitez installer. Il se peut que ce dernier ne soit tout simplement pas compatible avec Windows.

Pour compiler les modules CPAN, il évidemment nécessaire d'avoir un compilateur installé sur l'ordinateur. Il est généralement conseillé d'installer Microsoft Visual C++ 2010 Express (gratuit) car il est utilisé pour la construction d'ActivePerl.
Voici le lien de téléchargement des Microsoft Visual C++ 2010 Express.
Pensez également à mettre dans votre variable d'environnement PATH le chemin C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin.

Je vous recommande également d'installer le module PPM::Make qui vous permettra de créer une archive et un fichier ".ppd" du module CPAN qui vous intéresse.

N.B. Si pour une raison ou une autre vous ne souhaitez pas installer l'usine à gaz Microsoft Visual (que je vous recommande tout de même), il est possible d'installer un compilateur plus léger. Voici la démarche à suivre que j'ai testée et qui fonctionne :

- téléchargez le compilateur gcc ici ;

- installez-le en choisissant un répertoire sans espace (ex: C:\gcc) ;

- le "make.exe" de gcc ne convient pas pour compiler les modules Perl, on va donc utiliser le "dmake.exe" modifié par Gurusamy Sarathy que l'on trouve dans son répertoire CPAN. C'est le fichier "dmake-4.1pl1-win32.zip". Si vous n'arrivez pas à le trouver, vous pouvez le télécharger ici ;

- décompressez le fichier zip, puis copiez le fichier "dmake.exe" et le répertoire "startup" dans le répertoire "bin" de gcc (C:\gcc\bin) ;

- rajoutez ;C:\gcc\bin; dans la variable PATH des variables d'environnement et redémarrez votre ordinateur ;

- maintenant pour la suite du document, vous n'aurez plus qu'à taper dmake à la place de nmake.

A ce stade, vous êtes armé pour commencer la compilation qui est très simple. Le principe en est le suivant :

Différentes étapes pour compiler un module CPAN :

- téléchargez le module sur le site du CPAN et décompressez-le ;

- cd RepertoireModule ;

- perl Makefile.PL ;

- nmake (ou dmake) ;

- nmake test (ou dmake test) ;

- nmake install (ou dmake install).

Ces commandes sont les plus couramment utilisées. Si tout se passe bien, le module sera installé sur votre PC.

Si vous souhaitez installer ce module sur un ordinateur n'ayant pas accès à Internet (et possédant un compilateur), alors vous pouvez procéder comme ci-dessus. Dans le cas où l'ordinateur ne possède pas de compilateur, vous devez créer une archive et un fichier ".ppd" à partir du module CPAN téléchargé de la manière suivante :

Création d'une archive et d'un fichier ppd d'un module CPAN

- téléchargez le module sur le CPAN et décompressez-le ;

- cd RepertoireModule ;

- make_ppm.

Pour une meilleure compréhension, rien de mieux qu'un exemple !

Paul et Jean disposent d'ActivePerl 5.10, mais Jean n'a pas Internet. Il souhaite installer les modules Tk, Tk::Preferences et Net::NTP. Jean va donc chez Paul.

Paul ayant prévu le coup, il a lu le début de cet article (faut bien se faire un peu de pub  !). Il a récupéré le module Tk comme expliqué dans la section "PPM sans Internet". Le fichier ppd et l'archive Tk sont donc prêts pour Jean. Mais il n'arrive pas à trouver les modules Tk::Preferences et Net::NTP sur le site des repositories. Il décide donc de suivre les instructions de la section "Compilation des modules CPAN"  ! Il installe les compilateurs MVSC et le module PPM::Make. Il télécharge le module Tk::Preferences sur le site du CPAN et le décompresse dans son répertoire C:/. Il ouvre une console DOS et effectue les commandes suivantes :

c:
cd Tk-Preferences-0.2
C:\>make_ppm
Using Archive::Tar ....
Using Compress::Zlib ....
Using nmake ....
Using C:\Perl\bin\perl.exe ....
Working directory: C://Tk-Preferences-0.2
C:\Perl\bin\perl.exe Makefile.PL INSTALLDIRS=site
Checking if your kit is complete...
Looks good
Writing Makefile for Tk::Preferences
nmake

Microsoft (R) Program Maintenance Utility Version 8.00.50727.42
Copyright (C) Microsoft Corporation. Tous droits r'serv's.

cp Preferences.pm blib\lib\Tk\Preferences.pm
cp Preferences.pod blib\lib\Tk\Preferences.pod
nmake test

Microsoft (R) Program Maintenance Utility Version 8.00.50727.42
Copyright (C) Microsoft Corporation. Tous droits r'serv's.

C:\Perl\bin\perl.exe "-Iblib\lib" "-Iblib\arch" test.pl
1..2
# Running under perl version 5.010000 for MSWin32
# Win32::BuildNumber 1004
# Current time local: Wed Jan 21 12:30:34 2009
# Current time GMT:   Wed Jan 21 11:30:34 2009
# Using Test.pm version 1.25
ok 1
setting palette: honeydew4 at blib\lib/Tk/Preferences.pm line 31.
configuring Heading at blib\lib/Tk/Preferences.pm line 55.
configuring Label at blib\lib/Tk/Preferences.pm line 55.
configuring Menu at blib\lib/Tk/Preferences.pm line 55.
configuring Optionmenu at blib\lib/Tk/Preferences.pm line 55.
configuring Entry at blib\lib/Tk/Preferences.pm line 55.
executing callback for Button at blib\lib/Tk/Preferences.pm line 51.
WOW I found a button!
let's configure it anyhow
ok 2
Trying to get ABSTRACT from Preferences.pm ...
Trying to get ABSTRACT from C:/Tk-Preferences-0.2/blib/lib/Tk/Preferences.pm ...
Trying to get ABSTRACT from C:/Tk-Preferences-0.2/blib/lib/Tk/Preferences.pod ...
Setting ABSTRACT to 'a perl module for setting font and color preferenes in all children of a perl/Tk'
blib/lib/Tk/.exists
blib/lib/Tk/Preferences.pm
blib/lib/Tk/Preferences.pod
blib/lib/Tk
blib/lib/auto/Tk/Preferences/.exists
blib/lib/auto/Tk/Preferences
blib/lib/auto/Tk
blib/lib/auto
blib/lib
blib/arch/.exists
blib/arch/auto/Tk/Preferences/.exists
blib/arch/auto/Tk/Preferences
blib/arch/auto/Tk
blib/arch/auto
blib/arch
blib/bin/.exists
blib/bin
blib/script/.exists
blib/script
blib/man1/.exists
blib/man1
blib/man3/.exists
blib/man3
blib/html/site/lib/Tk/Preferences.html
blib/html/site/lib/Tk
blib/html/site/lib
blib/html/site
blib/html
blib
Fetching with LWP:
http://ppm.activestate.com/CPAN/authors/01mailrc.txt.gz
Going to read C:\Perl\cpan\sources\authors\01mailrc.txt.gz
............................................................................DONE
Fetching with LWP:
http://ppm.activestate.com/CPAN/modules/02packages.details.txt.gz
Going to read C:\Perl\cpan\sources\modules\02packages.details.txt.gz
Database was generated on Mon, 19 Jan 2009 11:26:52 GMT
..............
New CPAN.pm version (v1.9301) available.
[Currently running version is v1.9205]
You might want to try
install CPAN
reload cpan
to both upgrade CPAN.pm and run the new version without leaving
the current session.

..............................................................DONE
Fetching with LWP:
http://ppm.activestate.com/CPAN/modules/03modlist.data.gz
Going to read C:\Perl\cpan\sources\modules\03modlist.data.gz
............................................................................DONE
Going to write C:\Perl\cpan\Metadata

Voilà, tout s'est bien passé ! Dans le répertoire un fichier Tk-Preferences.ppd a été créé, ainsi qu'une archive Tk-Preferences.tar.gz.
Maintenant, pour le module Net::NTP, Paul télécharge le module sur le site du CPAN et crée l'archive pour son ami. Tout est OK ! Il lui crée un répertoire C:/JeanModules dans lequel il lui met les trois fichiers ".ppd" et les trois archives tar.gz. Jean n'aura plus qu'à les récupérer sur une clé USB et faire une commande ppm install fichier.ppd pour les installer sur son ordinateur.

Paul décide également d'installer le module Net::NTP qu'il trouve bien. Il veut jouer au grand et décide de ne pas l'installer via le ppd qu'il a créé mais via les commandes nmake (histoire de tester la documentation !).

Voici donc ce qu'il a fait pour installer le module :

c:
cd Net-NTP-1.2
C:\Net-NTP-1.2>perl Makefile.PL
Writing Makefile for Net::NTP

C:\Net-NTP-1.2>nmake

Microsoft (R) Program Maintenance Utility Version 8.00.50727.42
Copyright (C) Microsoft Corporation. Tous droits r'serv's.

C:\Net-NTP-1.2>nmake test

Microsoft (R) Program Maintenance Utility Version 8.00.50727.42
Copyright (C) Microsoft Corporation. Tous droits r'serv's.

C:\Perl\bin\perl.exe "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib\lib', 'blib\arch')" t/*.t
t/1....ok
All tests successful.
Files=1, Tests=1,  0 wallclock secs ( 0.00 cusr +  0.00 csys =  0.00 CPU)

Z:\djibril\Perso\Programmation\perl\COMPILATION\Net-NTP-1.2>nmake install

Microsoft (R) Program Maintenance Utility Version 8.00.50727.42
Copyright (C) Microsoft Corporation. Tous droits r'serv's.

Installing C:\Perl\html\site\lib\Net\NTP.html
Installing C:\Perl\site\lib\Net\NTP.pm
Appending installation info to C:\Perl\lib/perllocal.pod

Certains modules peuvent ne pas avoir de script Makefile.PL mais plutôt un script configure, à vous de lire le README .

II-D - Utilitaire CPAN

Il est également possible d'utiliser l'utilitaire CPAN sous Windows. Mais il faut que vous disposiez d'un make ou dmake comme expliqué dans la section ci-dessus. Cela permet à l'utilitaire de compiler les modules à installer. Sachez qu'il est tout de même facile pour les machines 32-bits d'installer un compilateur et un utilitaire dmake grâce à l'utilitaire « cpan » comme expliqué ci-dessous.

II-D-1 - Sous Windows 32-bits

Avec les versions d'ActivePerl 5.12 ou plus, cpan installera un dmake automatiquement, il vous demandera d'installer via ppm le module MinGW. Donc avant d'utiliser la première fois l'utilitaire cpan, je vous recommande d'installer les modules MinGW, Term::ANSIColor et Win32::Console::ANSI, puis, dans votre console DOS, tapez cpan, puis install MonModule.

ppm install MinGw
ppm install Term-ANSIColor
ppm install Win32-Console-ANSI
cpan
cpan> install Mon::Module

En procédant ainsi, vous avez installé MinGW version GCC pour Windows et le cpan vous installera l'utilitaire dmake.

Sans ces installations préalables, si vous tapez cpan, activeperl peut vous demander de le faire ou le faire pour vous comme vous le montre la capture d'écran ci-dessous :

II-D-2 - Sous Windows 64-bits

Depuis ActivePerl version supérieur ou égale à 5.16.3, vous pouvez utiliser l'utilitaire cpan qui installera automatiquement dmake et MinGW. Si vous utilisez une version inférieure à 5.16.3, je vous recommande comme expliqué ci-dessus d'installer Microsoft Visual C++ 2010 Express, puis de mettre dans votre variable d'environnement PATH le chemin C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin.

cpan> q

Il est toujours utile d'avoir les modules Term::ANSIColor et Win32::Console::ANSI pour bénéficier d'un affichage couleur plus confortable.

II-D-3 - Quelques problèmes rencontrés

Je vous rapporte un problème que j'ai rencontré m'empêchant toute installation de modules CPAN via l'utilitaire « cpan ».

Sur mon ordinateur de test, ActivePerl 5.16 est installé. Et depuis quelques jours, à chaque fois que je souhaite installer un module Perl via l'utilitaire « cpan », j'ai le même message d'erreur. Prenons pour exemple l'installation du module WWW::Google::Translate.

Voici le résultat de ma console DOS :

Installation du module WWW::Google::Translate

cpan> install WWW::Google::Translate
Reading 'C:\Perl\cpan\Metadata'
Database was generated on Mon, 08 Jul 2013 11:07:42 GMT
Running install for module 'WWW::Google::Translate'
Running make for D/DY/DYLAN/WWW-Google-Translate-0.07.tar.gz
Fetching with LWP:
http://ppm.activestate.com/CPAN/authors/id/D/DY/DYLAN/WWW-Google-Translate-0.07.tar.gz
Fetching with LWP:
http://ppm.activestate.com/CPAN/authors/id/D/DY/DYLAN/CHECKSUMS
Checksum for C:\Perl\cpan\sources\authors\id\D\DY\DYLAN\WWW-Google-Translate-0.07.tar.gz ok
Scanning cache C:\Perl/cpan/build for sizes
....................................................................--------DONE
DEL(1/3): C:\Perl\cpan\build\JSON-2.59-tNbDwR
DEL(2/3): C:\Perl\cpan\build\Tk-Chart-1.20-Hzkshq.yml
DEL(3/3): C:\Perl\cpan\build\Tk-Chart-1.20-Hzkshq
WWW-Google-Translate-0.07/
WWW-Google-Translate-0.07/t/
WWW-Google-Translate-0.07/t/WWW-Google-Translate.t
WWW-Google-Translate-0.07/lib/
WWW-Google-Translate-0.07/lib/WWW/
WWW-Google-Translate-0.07/lib/WWW/Google/
WWW-Google-Translate-0.07/lib/WWW/Google/Translate.pm
WWW-Google-Translate-0.07/lib/WWW/Google/Translate.pod
WWW-Google-Translate-0.07/example/
WWW-Google-Translate-0.07/example/api.pl
WWW-Google-Translate-0.07/MANIFEST
WWW-Google-Translate-0.07/Makefile.PL
WWW-Google-Translate-0.07/Changes
WWW-Google-Translate-0.07/README

CPAN.pm: Building D/DY/DYLAN/WWW-Google-Translate-0.07.tar.gz

Set up gcc environment - 3.4.5 (mingw-vista special r3)
Checking if your kit is complete...
Looks good
JSON 2.5 is required for $ENV{PERL_JSON_BACKEND} = 'JSON::XS'
at C:/Perl/lib/CPAN/Meta/Converter.pm line 23.
at C:/Perl/lib/ExtUtils/MM_Any.pm line 877.
JSON 2.5 is required for $ENV{PERL_JSON_BACKEND} = 'JSON::XS'
at C:/Perl/lib/CPAN/Meta/Converter.pm line 23.
Warning: No success on command[C:\Perl\bin\perl.exe Makefile.PL INSTALLDIRS=site]
DYLAN/WWW-Google-Translate-0.07.tar.gz
C:\Perl\bin\perl.exe Makefile.PL INSTALLDIRS=site -- NOT OK
Running make test
Make had some problems, won't test
Running make install
Make had some problems, won't install
Could not read metadata file. Falling back to other methods to determine prerequisites
Failed during this command:
DYLAN/WWW-Google-Translate-0.07.tar.gz       : writemakefile NO 'C:\Perl\bin\perl.exe Makefile.PL INSTALLDIRS=site' returned status 512

Quelque soit le module, j'ai toujours le message :

JSON 2.5 is required for $ENV{PERL_JSON_BACKEND} = 'JSON::XS'
at C:/Perl/lib/CPAN/Meta/Converter.pm line 23.
at C:/Perl/lib/ExtUtils/MM_Any.pm line 877.
JSON 2.5 is required for $ENV{PERL_JSON_BACKEND} = 'JSON::XS'
at C:/Perl/lib/CPAN/Meta/Converter.pm line 23.
Warning: No success on command[C:\Perl\bin\perl.exe Makefile.PL INSTALLDIRS=site]

Le message stipule que j'ai une variable d'environnement nommée «  PERL_JSON_BACKEND » qui a pour valeur « JSON::XS ». Ce qui veut dire que « cpan » cherche à installer les modules avec ce module. Mais, cela nécessite d'avoir la version minimum 2.5 du module JSON.

Lorsque je vérifie via ppm, j'ai bien une version de JSON 2.59 et JSON::XS 2.34.

Pour connaître la date d'installation d'un module sur votre pc, la commande

Commande perldoc

perldoc perllocal

peut être utile.

À ce moment, je m'interroge  :

Bah, j'ai la bonne version des modules JSON et JSON::XS ! Qui a installé la variable d'environnement «  PERL_JSON_BACKEND » sur mon PC ? D'où vient ce message d'erreur ?

Après quelques recherches, j'ai trouvé une documentation sur le CPAN au sujet de cette variable dans le module JSON : JSON and YAML :

- PERL_JSON_BACKEND = 0 or PERL_JSON_BACKEND = 'JSON::PP'
Always use JSON::PP

- PERL_JSON_BACKEND == 1 or PERL_JSON_BACKEND = 'JSON::XS,JSON::PP'
(The default) Use compiled JSON::XS if it is properly compiled & installed, otherwise use JSON::PP.

- PERL_JSON_BACKEND == 2 or PERL_JSON_BACKEND = 'JSON::XS'
Always use compiled JSON::XS, die if it isn't properly compiled & installed.

- PERL_JSON_BACKEND = 'JSON::backportPP'
Always use JSON::backportPP. JSON::backportPP is JSON::PP back port module. JSON includes JSON::backportPP instead of JSON::PP.

Ne sachant pas si c'est ActivePerl qui a installé cette variable ou si c'est par le biais d'un autre module, j'ai supprimé la variable, j'ai fermé et relancé une fenêtre DOS. L'installation de mon module s'est donc bien déroulée et je n'ai plus de messages d'erreurs. Néanmoins, voulant en savoir plus, j'ai ajouté la variable : le problème est réapparu (après fermeture et ouverture de la fenêtre DOS pour recharger les variables d'environnements).

Dans la documentation citée ci-dessus, il est marqué :

PERL_JSON_BACKEND == 2 or PERL_JSON_BACKEND = 'JSON::XS'
Always use compiled JSON::XS, die if it isn't properly compiled & installed.

Il se peut que l'installation ne se soit pas correctement faite. Je décide donc de réinstaller les modules JSON :

- suppression de la variable « PERL_JSON_BACKEND » ;

- fermeture/ouverture DOS ;

- installation forcée du module :

cpan
force install JSON JSON::XS

- ajout de la variable « PERL_JSON_BACKEND » ;

- fermeture/ouverture DOS.

J'installe maintenant un autre module quelconque et je n'ai plus de messages d'erreurs.

J'en conclus que le module « JSON » n'était pas correctement installé sur ma machine pour une raison inconnue et que la variable «  PERL_JSON_BACKEND » ne pouvait qu'engendrer un souci à moins de la supprimer.

J'espère que cela pourra vous aider si vous vous retrouvez dans la même situation. N'hésitez pas à me faire part de commentaires, explications ou corrections ! Commentez .

II-E - Installation sous Strawberry Perl

Installer un module sous Strawberry Perl revient à installer un module comme sous Linux avec l'utilitaire « cpan ». Tout fonctionne correctement, Si vous avez beaucoup de soucis avec ActivePerl, je vous recommande d'installer Strawberry Perl. Pourquoi  ?

En fait, Strawberry Perl contient déjà tout ce qu'il faut pour la compilation des modules (gcc, dmake...) que ce soit sous une architecture 32-bits ou 64-bits. C'est pour cela que l'installation se fait via l'utilitaire « cpan » et sans soucis. Fini tous les tracas de recherche de dépôts ppm ou de jonglage de version d'ActivePerl. Vous pouvez ainsi installer les dernières versions de Strawberry Perl. N'hésitez pas à le tester, il existe des versions portables, ce qui vous permet d'avoir par exemple ActivePerl sur le PC et de tester Strawberry de l'autre.

Vous trouverez une discussion de comparaison entre ActivePerl et Strawberry Commentez , n'hésitez pas à donner votre avis, de nous parler de votre expérience.

III - Installation des modules CPAN sous Linux et Mac OS

Pour installer un module CPAN, vous pouvez soit le faire manuellement, soit le faire via l'utilitaire CPAN qui vous facilite la vie (comme PPM sous Windows). Par contre, il n'existe pas d'interface graphique, mais je pense que cela ne vous posera pas de soucis, vu que vous êtes sous Linux/Unix  !

III-A - Manuellement

La première chose à faire est de vous rendre sur le site du CPAN pour rechercher le module qui vous intéresse.

Prenons pour exemple le module List::Compare.

Je clique sur le lien List::Compare puis sur List-Compare-0.37(version actuelle au moment de la rédaction de cet article). Je lis le README (très important) ! Il me renseignera sur les commandes spéciales à taper ou des modules à installer avant. Je télécharge ensuite le module (en console via "wget" par exemple) et l'installe.

wget http://search.cpan.org/CPAN/authors/id/J/JK/JKEENAN/List-Compare-0.37.tar.gz
tar xvzf List-Compare-0.37.tar.gz
cd List-Compare-0.37
perl Makefile.PL
make
make test
make install

Voilà, c'est simple ! Encore plus si on est "root" : le module sera disponible pour tout le monde sur le serveur. Si ce n'est pas le cas, et que vous souhaitez l'installer pour vous seul :

cd /home/djibril
mkdir /home/djibril/ModuleCPAN
wget http://search.cpan.org/CPAN/authors/id/J/JK/JKEENAN/List-Compare-0.37.tar.gz
tar xvzf List-Compare-0.37.tar.gz
cd List-Compare-0.37
perl Makefile.PL INSTALL_BASE=/home/djibril/ModuleCPAN
make
make test
make install

Le module est installé dans le répertoire /home/djibril/ModuleCPAN/lib/perl5, pour l'utiliser dans vos scripts, ajoutez

use lib "$ENV{HOME}/lib/perl5";

Vous pouvez même utiliser un module sans l'installer. Pour cela, faites

perl Makefile.PL
make
make test

et faites pointer votre variable d'environnement PERL5LIB sur les répertoires blib/lib et blib/arch.

Une autre façon manuelle :

Vous pouvez installer un module via un package de votre distribution Linux. Par exemple sous Debian, j'aurais pu installer le module via cette commande en root :

apt-get install liblist-compare-perl

Pour le trouver, j'ai fait ceci : apt-cache search list-compare | grep perl

III-B - Via l'utilitaire CPAN

Sur votre console, tapez cpan. Si c'est la première fois, il vous posera des questions au fur et à mesure, auxquelles il n'est pas difficile de répondre. Je vous conseille de commencer par installer au moins les outils suivants :

- gzip, tar, unzip, bzip2

- make

- wget, lynx

- ftp

Une fois votre CPAN configuré, vous pouvez installer un module en tapant :

cpan
>cpan install MonModule
ou
perl -MCPAN -e 'install MonModule'

Si vous souhaitez configurer de novo votre CPAN, voici les commandes utiles à taper dans le cpan.

cpan>o conf
cpan>o conf init
cpan>o conf urllist

III-C - En cas de soucis

Si vous rencontrez des soucis d'installation, n'hésitez pas à installer certains outils de compilation qui peuvent être utiles :

- make

- libstdc++5

- libstdc++6-dev

- gcc

apt-get install make install libstdc++6-dev libstdc++5 gcc

IV - Conclusion

Gardez à l'esprit qu'il faut toujours lire le README du module !
Sous Windows, essayez toujours d'installer un module via PPM pour sa facilité de gestion des dépendances.

J'espère que cet article vous a aidé à comprendre l'installation des modules en Perl ou à résoudre vos problèmes.
N'hésitez pas à faire des remarques, corrections ou appréciations ! Commentez

V - Remerciements

Je remercie stoyak et ClaudeLELOUP pour la relecture et les forumeurs (kuzco) pour les remarques afin d'améliorer ce tutoriel.