Difficultés exécution script PERL

dwouisdan

Membre enregistré
16 Février 2017
4
0
43
Bonjour tout le monde,

Voulant utiliser le service Bigmap d'Openstreetmap, le site m'a généré un script Perl. Au passage ce service a l'air génial pour générer des cartes en haute définition. En gros on peut facilement afficher dans le navigateur n'importe quelle carte de la taille et donc définition que l'on souhaite. Celle que je souhaite imprimer fait 14848x4608 pixels !
Par contre, ça serait trop beau si la carte affichée était composée d'une seule image. On ferait clic droit, enregistrer et zou c'est plié. Non, l'image est composée de plusieurs tuiles PNG, 58x18 tuiles dans mon cas. Le site propose de télécharger et d'exécuter un script Perl généré automatiquement qui recréera une grande image PNG à partir de ces tuiles.

Je télécharge donc le script, l'exécute à partir du Terminal, mais ça ne fonctionne pas. Voilà le message d'erreur :
Can't locate GD.pm in @INC (you may need to install the GD module) (@INC contains: /Library/Perl/5.18/darwin-thread-multi-2level /Library/Perl/5.18 /Network/Library/Perl/5.18/darwin-thread-multi-2level /Network/Library/Perl/5.18 /Library/Perl/Updates/5.18.2 /System/Library/Perl/5.18/darwin-thread-multi-2level /System/Library/Perl/5.18 /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level /System/Library/Perl/Extras/5.18 .) at mkmap.pl line 8.

BEGIN failed--compilation aborted at mkmap.pl line 8.

Ok, là on atteint la limite de ma compétence... Je ne sais pas ce qu'est ce @INC, je ne sais pas à quoi ça sert. Manifestement le script que j'ai téléchargé contient une instruction que le Terminal (si c'est lui qui exécute le script) ne comprend pas et je dois mettre à jour sa bibliothèque en installant un "GD module", mais je n'ai pas le début du commencement d'idée de comment faire ça. Je ne suis pas programmeur, juste utilisateur lambda qui est passé sous Mac il y a dix ans, justement parce que j'en avais marre de me prendre la tête avec des trucs de ce genre sous Windows.

Quelqu'un pourrait-il m'aider, ou au moins m'orienter dans la bonne direction ?

Merci d'avance !
 
Le script utilise un module mais il ne parvient pas à le charger.

Quelques explications : Perl est un langage interprété ; un script écrit en Perl sera interprété par le programme (un "simple" binaire, pas une application graphique) perl. Comme de nombreux autres langages de même type, il s'est constitué au cours du temps une large panoplie de bibliothèques (ici, il s'agit plutôt de "modules").
Une installation de base de Perl comprend déjà de très nombreux modules. Cependant tout le monde peut en créer et il en existe beaucoup d'autres encore.
Pour avoir une idée de ce qui existe et les télécharger le cas échéant, on se rend principalement sur le site d'archives CPAN.

Dans ton cas, il te faut :
  • identifier les différents modules nécessaires (il faut au moins GD) ;
  • les installer.
Une recherche de GD dans CPAN m'a amené à cette page.
Il te faut le télécharger puis l'installer, en espérant qu'il n'y ait pas de dépendances inattendues.

Autre méthode, mais pas forcément immédiate (je ne peux pas tester avant d'avoir mon Mac, ce soir) : dans Terminal utiliser la commande cpan, qui permet de faire ce genre d'installation (et les mises à jour) sans trop se fatiguer.
 
Bonjour Bompi,

Je te remercie pour tes éclaircissements. J'ai essayé d'installer GD, ça ne marchait pas car il fallait d'abord installer libgd.
J'ai donc suivi les instruction sur cette page, en remplaçant à chaque fois par la dernière version. TOUT A FONCTIONNE, youpi.
Je réessaye donc d'installer GD, et cette fois ci c'est ma version de Build qui est trop ancienne:
Module::Build version 0.42 required--this is only version 0.4003

Qu'à cela ne tienne, je commence à comprendre le système, je vais chercher la dernière version du module build, la 0.4220.
Je l'installe ( ./Build sudo install), ça a l'air de marcher en tout cas.

Je réessaye d'installer GD-2.56, mais il me dit toujours que ma version est la 0.4003. Donc la mise à jour ne fonctionne pas.

Quant à utiliser cpan dans le terminal, lorsque je tape get L/LD/LDS/GD-2.56.tar.gz,
ça tourne en boucle sur :
Running get for module 'CPAN::Meta'
---- Unsatisfied dependencies detected during ----
---- LEONT/Module-Build-0.4220.tar.gz ----
CPAN::Meta [build_requires]
Running get for module 'CPAN::Meta'
---- Unsatisfied dependencies detected during ----
---- LEONT/Module-Build-0.4220.tar.gz ----
CPAN::Meta [build_requires]
Running get for module 'CPAN::Meta'
---- Unsatisfied dependencies detected during ----
---- LEONT/Module-Build-0.4220.tar.gz ----
CPAN::Meta [build_requires]

et quand je tape make L/LD/LDS/GD-2.56.tar.gz ,ça tourne en boucle sur
CPAN.pm: Building D/DA/DAGOLDEN/CPAN-Meta-2.150010.tar.gz

---- Unsatisfied dependencies detected during ----
---- DAGOLDEN/CPAN-Meta-2.150010.tar.gz ----
CPAN::Meta::YAML [requires]
JSON::pP [requires]
Running make for module 'CPAN::Meta::YAML'
Running make for D/DA/DAGOLDEN/CPAN-Meta-YAML-0.018.tar.gz
Has already been unwrapped into directory /Users/tristan/.cpan/build/CPAN-Meta-YAML-0.018-KGVX2C
Has already been made
Running make for module 'JSON::pP'
Running make for M/MA/MAKAMAKA/JSON-PP-2.27400.tar.gz
Has already been unwrapped into directory /Users/tristan/.cpan/build/JSON-PP-2.27400-qaLcpM
Has already been made
Running make for L/LE/LEONT/Module-Build-0.4220.tar.gz
---- Unsatisfied dependencies detected during ----
---- LEONT/Module-Build-0.4220.tar.gz ----
CPAN::Meta [build_requires]
Running make for module 'CPAN::Meta'
Running make for D/DA/DAGOLDEN/CPAN-Meta-2.150010.tar.gz
Has already been unwrapped into directory /Users/tristan/.cpan/build/CPAN-Meta-2.150010-kgMKAM
 
Dernière édition:
Finalement, je suis rentré trop tard pour pouvoir tester donc j'essayerai ce soir : quel est le système de ton ordinateur ? Personnellement j'ai sous la main Sierra (pas la dernière version) et Yosemite (à jour).

Hier, j'ai essayé sur une toute autre configuration (cygwin/Windows) mais je n'en ai tiré aucun enseignement vraiment utile ici, sinon que j'ai aussi des dépendances pénibles à régler (circulaires...)
 
Je verrai ce soir, mais sans doute un peu tard. :zen:
 
Je viens de faire les actions suivantes :
  • télécharger GD sur son site (ici)
  • désarchiver l'archive quelque part (au choix)
  • ouvrir Terminal et aller dans le dossier de l'archive
  • lire le README, c'est toujours intéressant ;)
  • installer les bibliothèques manquantes avec homebrew ;
    en l'occurrence l'installation de GD aura suffi pour avoir toutes les bibliothèques nécessaires (j'avais déjà installé des éléments depuis un moment)
    • brew install libgd
  • par défaut, la version de Module::Build (module de Perl) n'est pas suffisante et il faut le mettre à jour.
  • lancer donc cpan, qui va s'initialiser gentiment ; ne pas se prendre la tête et répondre à chaque fois par la réponse par défaut, sauf pour le choix de la bibliothèque et prendre le mode sudo.
    • sudo cpan
      • What approach do you want? (Choose 'local::lib', 'sudo' or 'manual')
        [local::lib] sudo
  • mettre à jour le module :
    • upgrade Module::Build
      • les dernières lignes qui s'affichent sont :
      • < ...>
      • Installing /usr/local/bin/config_data
      • LEONT/Module-Build-0.4220.tar.gz
  • sortir de cpan (Ctrl-D)
  • établir le script de construction du module GD :
    • perl ./Build.PL
  • construire le module :
    • ./Build
      • il y a des warnings mais bon...
  • éventuellement tester le module
    • ./Build test
      • un des tests rate mais bon... on verra bien :zen:
  • installer :
    • sudo ./Build install
      • pas d'erreur
  • prendre le script de test trouvé sur la page d'accueil du site (voir ci-dessous), l'enregistrer dans un fichier (ici : brol.pl)
  • dans le dossier où brol.pl a été enregistré, le tester :
    • perl brol.pl > brol.png
    • open brol.png
      • le fichier s'ouvre dans Aperçu et on doit avoir l'image en pièce jointe.

Code du test :
Bloc de code:
use GD;
# create a new image
$im = new GD::Image(100,100);
# allocate some colors
$white = $im->colorAllocate(255,255,255);
$black = $im->colorAllocate(0,0,0);  
$red = $im->colorAllocate(255,0,0); 
$blue = $im->colorAllocate(0,0,255);
# make the background transparent and interlaced
$im->transparent($white);
$im->interlaced('true');
# Put a black frame around the picture
$im->rectangle(0,0,99,99,$black);
# Draw a blue oval
$im->arc(50,50,95,75,0,360,$blue);
# And fill it with red
$im->fill(50,50,$red);
# make sure we are writing to a binary stream
binmode STDOUT;
# Convert the image to PNG and print it on standard output
print $im->png;
 

Fichiers joints

  • brol.png
    brol.png
    631 bytes · Affichages: 113
Dernière édition:
Bonjour Bompi,

Merci pour ta réponse ! J'ai essayé de suivre tes étapes, mais malheureusement ça a merdé assez vite, dès la 5eme étape :

installer les bibliothèques manquantes avec homebrew ;
en l'occurrence l'installation de GD aura suffi pour avoir toutes les bibliothèques nécessaires (j'avais déjà installé des éléments depuis un moment)
  • brew install libgd

la sentence est immédiate :
-bash: brew: command not found
 
Salut dwouisdan

Le message :
Bloc de code:
-bash: brew: command not found
vient de ce que tu n'as pas installé ☞Homebrew☜ dans ton OS. C'est un gestionnaire permettant d'installer facilement des paquets.

Pour l'installer > tu fais un copier-coller dans une fenêtre du «Terminal» de la ligne de commande :
Bloc de code:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
et tu valides.

=> une fois l'opération accomplie > tu peux appeller l'utilitaire brew (installé at: /usr/local/Homebrew/bin/brew) dans le «Terminal» dans des commandes comme :
Bloc de code:
brew update
(pour mettre à jour le gestionnaire) ou comme :
Bloc de code:
brew install [nom]
(pour installer un paquet).
 
Oups ! j'avais oublié que tout le monde ne s'amuse pas à installer des utilitaires UNIX pour s'amuser, où avais-je la tête ? ;)

Soit tu installes brew, comme macomaniac te l'indiques, soit tu installes la bibliothèque avec Fink ou MacPort. Voire tu la compiles parce que tu trouves que c'est rigolo...

Mais brew, c'est le plus simple. :) Juste un détail : il est possible que, après avoir installé brew avec la commande indiquée, il te faille quitter puis relancer Terminal (ou travailler dans une nouvelle fenêtre), histoire d'avoir un contexte à jour dans ses onglets et que brew soit directement accessible.