IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Modules Perl Discussion :

problème chemin vers librairies


Sujet :

Modules Perl

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 21
    Par défaut problème chemin vers librairies
    Bonjour,

    J'ai plusieurs projets qui font appel à un même répertoire lib contenant mes propres librairies perl et j'ai un problème concernant l'appel de ces librairies. Ce que j'ai actuellement est un chemin en dur pointant vers cette librairie, seulement je voudrais que ce soit portable et qu'un autre développeur puisse également avoir accès aux librairies sans qu'on n'ait à coder le chemin en dur.....

    Pour expliquer plus clairement, j'ai ce genre d'arborescence:

    monprojet/projet1/
    monprojet/projet2/
    monprojet/projet3/
    monprojet/lib/

    dans mes scripts sous projets1 (etc) j'ai ce require d'une librairie:
    require "/usr/truc/machin/util_1.pl";

    je pensais résoudre le problème de portage en mettant le chemin relatif à la place:
    require "../lib/util_1.pl";

    seulement ça ne fonctionne pas car la résolution du chemin ne se fait à partir du script, mais à partir de l'endroit d'où j'exécute ce script...

    J'ai la solution de mettre à jour la variable $PERL5LIB, mais le problème est que j'ai 2 fois le projet sur une même machine (ce qui est indispensable pour l'instant...). Donc cela m'oblige à jongler avec la mise à jour de $PERL5LIB selon que je veux l'environnement 1 ou 2. Je ne dois pas mettre les deux chemins de mes lib dans la variable, sinon j'aurai des problème d'appel de la mauvaise librairie...!

    Voilà... auriez-vous quelque chose à me conseiller ? comment ne pas avoir à mettre à chaque fois correctement à jour $PERL5LIB ? comment pouvoir utiliser correctement le chemin relatif ? Je suppose que je pourrais dans chaque script récupérer dans une variable le répertoire courant du dit script et faire qch comme :

    $dir = repertoire courant de mon script
    require "$dir/../lib/util_1.pl";

    mais c'est pas joli joli...

    Un avis ?

    Merci...

  2. #2
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations forums :
    Inscription : Février 2007
    Messages : 34
    Par défaut
    Tu peux sans doute faire deux shells (un pour chaque environnement) qui vont positionner la variable PERL5LIB à ce qui va bien, lexporter puis lancer un shell.

    Quand tu lanceras ton programme perl, il aura comme ça la bonne valeur de PERL5LIB.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 21
    Par défaut
    merci de ta réponse.
    c'est ce que je fais actuellement, mais je ne sais pas si c'est la meilleure solution, car j'ai un risque de me tromper d'environnement.

  4. #4
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations forums :
    Inscription : Février 2007
    Messages : 34
    Par défaut
    Y'a un autre moyen qui peut peut-être te convenir mieux : dans le programme principal, tu peux faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    use strict;
    use warnings;
     
    use File::Basename;
     
    my $strDir = dirname($0);
     
    print "Rep : $strDir\n";
     
    unshift(@INC,$strDir . '/libs');
     
    require module;
    qui met le répertoire libs de l'environnement déduit du répertoire de ton programme en tête de la liste de recherche des modules.

    Du coup, il n'y a qu'à le faire une seule fois dans le programme principal.

    L'incertitude que j'ai, c'est est-ce que dans $0 on a bien toujours le chemin du programme en cours d'exécution ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 21
    Par défaut
    finalement, comme j'ai besoin aussi de chemins externes, j'ai opté pour des fichiers dans lesquels j'ai des chemins:

    dans chemin.home:
    prefix = ~/blabla
    sharedir = /chemin/share

    dans chemin.commun:
    prefix = /chemin/blabla
    sharedir = /chemin/share

    j'ai un lien symbolique chemin -> chemin.home (ou .commun) selon l'envrionnement dans lequel je veux bosser. et j'ai une librairie qui charge automatiquement les bons chemins dans un hash à partir du fichier chemin.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [iText]Problème chemin vers image
    Par Hanoni dans le forum Documents
    Réponses: 3
    Dernier message: 21/09/2009, 14h27
  2. Problème avec la librairie POI
    Par clement42 dans le forum Documents
    Réponses: 3
    Dernier message: 18/11/2005, 19h11
  3. chemin vers Mes Documents
    Par andolini dans le forum C++Builder
    Réponses: 4
    Dernier message: 16/06/2005, 19h44
  4. Problème avec la librairie rfunc sous Firebird
    Par yayelix dans le forum SQL
    Réponses: 4
    Dernier message: 17/05/2005, 16h49
  5. Problème avec les librairies ZLIB et LIBPNG
    Par VenusX117 dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 14/03/2005, 14h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo