2010-12-15 401 views
0

En utilisant CPAN, j'ai installé GD :: Graph pour créer des graphiques à barres empilées horizontales. CPAN a installé les modules dans /root/.cpan/build/GD-2.45-4PSn9K, qui n'est pas dans @INC. Dans mon script, je peux accéder aux modules en ajoutantPourquoi le débogueur Perl ne trouve-t-il pas le module trouvé par ce script?

use lib "/root/.cpan/build/GD-2.45-4PSn9K" 

Le script génère maintenant les diagrammes sans problème. Je voulais utiliser le débogueur perl ("perl -d myscript.pl") mais il se plaint de ne pas pouvoir trouver GD.pm (qui est dans ce chemin). J'ai ajouté le chemin à PERL5LIB, vérifié avec "perl -V", mais toujours le débogueur ne peut pas le trouver. Peut-être un moyen de contourner cela est d'avoir GD installé dans l'un des chemins @INC, mais a) Je ne sais pas comment faire cela, et b) Je voudrais vraiment comprendre ce qui se passe.

C'est sur Fedora Core 12.

Je ne sais pas si, si fait une différence, mais GD :: Graph est en fait utilisé dans un module qui est inclus par mon script principal. Le script principal ne l'utilise pas. Mise à jour: Suite aux suggestions ci-dessous, je suis entré de nouveau dans le CPAN et j'ai forcé l'installation. Le CPAN a déclaré avoir trouvé l'installation dans /root/.cpan/ (etc) et a pré-attribué ce chemin à @INC. J'ai ensuite supprimé manuellement GD du répertoire .cpan et suis allé installer à nouveau. Cette fois CPAN l'a mis au même endroit, et aussi dans /usr/local/lib/perl5/GD-2.45PSn9K ".Il a ajouté deux chemins à @INC. J'ai vérifié qu'il est là, et le débogueur perl prétend à la recherche là-bas, mais encore ne peut pas trouver GD.pm (qui est là) et ne sera pas exécuter le script

@INC: 
/usr/local/lib/perl5/GD-2.45-4PSn9K/ 
    (and others) 

De perl -d:.

Can't locate loadable object for module GD in @INC (@INC contains: 

... et il répertorie ce chemin parmi ses autres, il est vraiment là:

[root /]# find . -name "GD.pm" 
./usr/local/lib/perl5/GD-2.45-4PSn9K/GD.pm 
./usr/local/lib/perl5/GD-2.45-4PSn9K/blib/lib/GD.pm 
(and the /root/.cpan paths) 
+0

c'est un répertoire de construction CPAN, il aurait dû aussi installer les fichiers quelque part dans 'PERL5LIB'. CPAN répertorie les répertoires auxquels il a installé les fichiers à la fin de la génération. –

+3

Vous pouvez également essayer 'perldoc -lm GD :: Graph' pour trouver l'emplacement d'installation. – dwarring

Répondre

1

Sur bourne compatible:

export PERL5LIB=$PERL5LIB:/root/.cpan/build/GD-2.45-4PSn9K 

Ce n'est pas la meilleure solution. Vous devriez réellement l'installer via cpan. Si cela fonctionne bien et ne sera pas installé, alors vous devrez peut-être force.

force install GD::Graph 

Et il y a aussi

perl -I/root/.cpan/build/GD-2.45-4PSn9K -d myscript.pl 
+0

@ jasper77: Il a probablement échoué à un test ou à une condition peu robuste que le développeur de la version a ajoutée. – Axeman

0

Ne pas utiliser cet endroit - cpan va probablement jeter bientôt (comme Eric a mentionné dans son commentaire, c'est juste un répertoire de construction, et ceux-ci sont nettoyées loin après un moment).

Si vous pouvez y accéder à partir de votre script sans cette ligne use lib vous pouvez trouver l'autre (probablement correctement installé) Version par

use GD; 
warn $INC{"GD.pm"}; 

ou regarder les chemins @INC pour voir les endroits potentiels, il pourrait se cacher

warn join, "\n", @INC; 

astuce de Snoopy perldoc lm est bien aussi, mais peut-être pas tout à fait exact si vous avez d'autres choses qui jouent avec @INC dans le script.

Si vous avez besoin de cette ligne use lib pour le faire fonctionner dans la version de script, alors probablement il n'a pas été installé correctement donc la suggestion force install d'Axeman pourrait valoir la peine (et cela devrait vous dire où il met les dossiers).

+0

Le forçage de l'installation a uniquement provoqué l'ajout de l'emplacement /root/.cpan à PERL5LIB, au lieu de l'installer à un emplacement. endroit différent. Donc, je l'ai retiré de là et j'ai essayé l'installation à nouveau, cette fois le forçant. Le CPAN le remet au même endroit. Si cpan va jeter cet endroit, que puis-je faire? – jasper77