[Perl] chemin des modules dynamique...

chemin des modules dynamique... [Perl] - Perl - Programmation

Marsh Posté le 16-01-2003 à 14:16:51    

bonjour à tous,
 
je suis en train de faire un script qui utilise des modules. Mon script est en phase de développement et il se trouve en /home/z0rglub/script/ dans lequel j'ai un sous répertoire avec mes modules : /home/z0rglub/script/module/
 
Dans mon script principal, j'utilise

Code :
  1. use lib qw( ./module/ );
  2. use Affichage;
  3. ...


 
Mais je voudrais pouvoir lancer ce script depuis autre part que le répertoire où il se trouve. Il faut donc que je mette :

Code :
  1. use lib qw( /home/z0rglub/script/module/ );
  2. use Affichage;
  3. ...


 
Seulement voilà, le jour où je passe le script en production, il faudra que je modifie le chemin "/home/z0rglub/script/"... (évidemment, cela apparaît plusieurs fois, sinon, ce serait pas vraiment la peine...). Et j'aimerais ne pas tout modifier.... Donc je fais ça :
 

Code :
  1. $path = '/home/z0rglub/script/';
  2. use lib qw( $path.'module/' );
  3. use Affichage;
  4. ...


 
Mais ça ne fonctionne pas, le $path n'est pas interprêté....
 
Alors je me demande comment faire pour rendre le chemin des modules plus "dynamique" (sachant que là j'ai volontairement simplifié, les modules étant en réalité dans plusieurs répertoires différents...)
 
:(


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 16-01-2003 à 14:16:51   

Reply

Marsh Posté le 16-01-2003 à 16:33:01    

met le dans une variable d'environement que tu defini différement pour ton utilisateur de prod et celui de test.  
Ca te fait une conf automatique  :whistle:


---------------
Graphisme, créations, court-métrages, fonds d'écrans :  
Reply

Marsh Posté le 05-02-2003 à 16:10:44    

z0rglub a écrit :

bonjour à tous,
 
je suis en train de faire un script qui utilise des modules. Mon script est en phase de développement et il se trouve en /home/z0rglub/script/ dans lequel j'ai un sous répertoire avec mes modules : /home/z0rglub/script/module/
 
Dans mon script principal, j'utilise

Code :
  1. use lib qw( ./module/ );
  2. use Affichage;
  3. ...


 
Mais je voudrais pouvoir lancer ce script depuis autre part que le répertoire où il se trouve. Il faut donc que je mette :

Code :
  1. use lib qw( /home/z0rglub/script/module/ );
  2. use Affichage;
  3. ...


 
Seulement voilà, le jour où je passe le script en production, il faudra que je modifie le chemin "/home/z0rglub/script/"... (évidemment, cela apparaît plusieurs fois, sinon, ce serait pas vraiment la peine...). Et j'aimerais ne pas tout modifier.... Donc je fais ça :
 

Code :
  1. $path = '/home/z0rglub/script/';
  2. use lib qw( $path.'module/' );
  3. use Affichage;
  4. ...


 
Mais ça ne fonctionne pas, le $path n'est pas interprêté....
 
Alors je me demande comment faire pour rendre le chemin des modules plus "dynamique" (sachant que là j'ai volontairement simplifié, les modules étant en réalité dans plusieurs répertoires différents...)
 
:(


 
Tu utilises le module FindBin. Grace a lui, tu as le chemin dans lequel se trouve le script que tu es entrain de faire tourner.
Ca donne:

Code :
  1. use FindBin;
  2. use lib $FindBin::Bin;

Reply

Marsh Posté le 08-04-2003 à 16:33:06    

phoenix35 a écrit :


 
Tu utilises le module FindBin. Grace a lui, tu as le chemin dans lequel se trouve le script que tu es entrain de faire tourner.
Ca donne:

Code :
  1. use FindBin;
  2. use lib $FindBin::Bin;




parfait (bon OK, la réponse est tardive, mais je ne l'utilise que depuis maintenant, et ça marche super, j'aurais économisé du temps si j'avais appliqué ta technique plus tôt)


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 08-04-2003 à 16:40:07    

z0rglub a écrit :


parfait (bon OK, la réponse est tardive, mais je ne l'utilise que depuis maintenant, et ça marche super, j'aurais économisé du temps si j'avais appliqué ta technique plus tôt)


Desole pour le retard, mais avant je ne savais pas qu'hardware avec une section speciale Perl, alors maintenant, si je peux aider...

Reply

Marsh Posté le 08-04-2003 à 16:49:56    

phoenix35 a écrit :


Desole pour le retard, mais avant je ne savais pas qu'hardware avec une section speciale Perl, alors maintenant, si je peux aider...


http://forum.hardware.fr/forum2.php3?post=34879&cat=10  :D


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 17-04-2003 à 10:45:30    

Bonjour,
J'ai le même problème que z0rglub, mais en pire...
En effet, mes scripts sont appellés grâce à des liens dynamiques dans un répertoire XXX sous UNIX (créés avec ln -s), ce qui fait que FindBin renvoie la position des liens et non pas l'emplacement réel des scripts (qui sont dans un répertoire YYY, avec les modules dans YYY/Modules).
Quelqu'un connaitrait-il une solution ?


---------------
Certains font l'Histoire, d'autres la subissent
Reply

Marsh Posté le 17-04-2003 à 14:25:40    

[:belgarion_cer]


---------------
Certains font l'Histoire, d'autres la subissent
Reply

Marsh Posté le 18-04-2003 à 08:34:42    

Fenris a écrit :

Bonjour,
J'ai le même problème que z0rglub, mais en pire...
En effet, mes scripts sont appellés grâce à des liens dynamiques dans un répertoire XXX sous UNIX (créés avec ln -s), ce qui fait que FindBin renvoie la position des liens et non pas l'emplacement réel des scripts (qui sont dans un répertoire YYY, avec les modules dans YYY/Modules).
Quelqu'un connaitrait-il une solution ?


Tu fais un FindBin pour trouver la position "symbolique" de ton script.
Tu fais un readlink sur ce fichier pour trouver la position reel de ton script.
Tu fais un dirname pour recuperer juste le chemin
Tu n'as plus qu'a rajouter le chemin  concatene a Modules
Et Voila

Reply

Marsh Posté le 18-04-2003 à 09:50:47    

phoenix35 a écrit :


Tu fais un FindBin pour trouver la position "symbolique" de ton script.
Tu fais un readlink sur ce fichier pour trouver la position reel de ton script.
Tu fais un dirname pour recuperer juste le chemin
Tu n'as plus qu'a rajouter le chemin  concatene a Modules
Et Voila


 
Ca a l'air pas mal comme solution, je vais essayer, merci :jap:


---------------
Certains font l'Histoire, d'autres la subissent
Reply

Marsh Posté le 18-04-2003 à 09:50:47   

Reply

Marsh Posté le 18-04-2003 à 10:12:34    

Fenris a écrit :


 
Ca a l'air pas mal comme solution, je vais essayer, merci :jap:


Encore mieux et plus facile.
Regardes la doc de FindBin du cote de $RealBin et $RealScript, ca a l'air d'etre directement ce que tu veux  ;)  
 
Je suis con, j'avais oublie de verifier

Reply

Marsh Posté le 18-04-2003 à 10:32:35    

Bien vu, je n'avais pas trouvé les bonnes docs non plus :ange:
 
En fait , il suffit de faire:
 
use FindBin(qw($Bin $Script $RealBin $RealScript));
# $Bin         - path to bin directory from where script was invoked
# $Script      - basename of script from which perl was invoked
# $RealBin     - $Bin with all links resolved
# $RealScript  - $Script with all links resolved
 
use lib $FindBin::RealBin;
 
Et ça marche nickel ! Merci encore :jap:


---------------
Certains font l'Histoire, d'autres la subissent
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed