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

Programmation et administration système Perl Discussion :

gestion des modules perl sur le système!


Sujet :

Programmation et administration système Perl

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2009
    Messages : 218
    Points : 130
    Points
    130
    Par défaut gestion des modules perl sur le système!
    Bonjour!

    Je suis nouveau sous perl, et j'ai un problème qui relève plus de l'administration du logiciel que de son utilisation.

    En effet, par défaut perl cherche les modules dans les répertoires de librairies/modules standards.

    Cependant j'ai un répertoire local dans lequel j'ai installé des modules non standards. J'aimerais donc étendre ce répertoire à l'espace @INC.

    en faisant un
    export PERL5LIB="/opt/bss/lib/perl5:/opt/bss/lib/perl5/5.8.7:/opt/bss/lib/perl5/site_perl
    la commande perl -V me montre bien que mes répertoires ont été ajoutés à liste des répertoires d'@INC, comme le montre cette sortie standard (les répertoires commençant par /opt/ sont ceux où se trouvent mes modules à moi).

    Summary of my perl5 (revision 5 version 8 subversion 8) configuration:
    Platform:
    osname=linux, osvers=2.6.18-128.1.10.el5, archname=x86_64-linux-thread-multi
    uname='linux ls20-bc2-13.build.redhat.com 2.6.18-128.1.10.el5 #1 smp wed apr 29 13:53:08 edt 2009 x86_64 x86_64 x86_64 gnulinux '
    config_args='-des -Doptimize=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Dversion=5.8.8 -Dmyhostname=localhost -Dperladmin=root@localhost -Dcc=gcc -Dcf_by=Red Hat, Inc. -Dinstallprefix=/usr -Dprefix=/usr -Dlibpth=/usr/local/lib64 /lib64 /usr/lib64 -Dprivlib=/usr/lib/perl5/5.8.8 -Dsitelib=/usr/lib/perl5/site_perl/5.8.8 -Dvendorlib=/usr/lib/perl5/vendor_perl/5.8.8 -Darchlib=/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi -Dsitearch=/usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi -Dvendorarch=/usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi -Darchname=x86_64-linux-thread-multi -Dvendorprefix=/usr -Dsiteprefix=/usr -Duseshrplib -Dusethreads -Duseithreads -Duselargefiles -Dd_dosuid -Dd_semctl_semun -Di_db -Ui_ndbm -Di_gdbm -Di_shadow -Di_syslog -Dman3ext=3pm -Duseperlio -Dinstallusrbinperl=n -Ubincompat5005 -Uversiononly -Dpager=/usr/bin/less -isr -Dd_gethostent_r_proto -Ud_endhostent_r_proto -Ud_sethostent_r_proto -Ud_endprotoent_r_proto -Ud_setprotoent_r_proto -Ud_endservent_r_proto -Ud_setservent_r_proto -Dinc_version_list=5.8.7 5.8.6 5.8.5 -Dscriptdir=/usr/bin'
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=define use5005threads=undef useithreads=define usemultiplicity=define
    useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
    use64bitint=define use64bitall=define uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
    Compiler:
    cc='gcc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm',
    optimize='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic',
    cppflags='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -I/usr/include/gdbm'
    ccversion='', gccversion='4.1.2 20080704 (Red Hat 4.1.2-44)', gccosandvers=''
    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=8, prototype=define
    Linker and Libraries:
    ld='gcc', ldflags =''
    libpth=/usr/local/lib64 /lib64 /usr/lib64
    libs=-lresolv -lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lpthread -lc
    perllibs=-lresolv -lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
    libc=, so=so, useshrplib=true, libperl=libperl.so
    gnulibc_version='2.5'
    Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E -Wl,-rpath,/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE'
    cccdlflags='-fPIC', lddlflags='-shared -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic'


    Characteristics of this binary (from libperl):
    Compile-time options: MULTIPLICITY PERL_IMPLICIT_CONTEXT
    PERL_MALLOC_WRAP USE_64_BIT_ALL USE_64_BIT_INT
    USE_ITHREADS USE_LARGE_FILES USE_PERLIO
    USE_REENTRANT_API
    Built under linux
    Compiled at Jul 2 2009 05:49:38
    %ENV:
    PERL5LIB="/opt/bss/lib/perl5:/opt/bss/lib/perl5/5.8.7:/opt/bss/lib/perl5/site_perl"
    @INC:
    /opt/bss/lib/perl5/5.8.7
    /opt/bss/lib/perl5
    /opt/bss/lib/perl5/5.8.7
    /opt/bss/lib/perl5/site_perl/5.8.7
    /opt/bss/lib/perl5/site_perl
    /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi
    /usr/lib/perl5/site_perl/5.8.8
    /usr/lib/perl5/site_perl
    /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi
    /usr/lib/perl5/vendor_perl/5.8.8
    /usr/lib/perl5/vendor_perl
    /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi
    /usr/lib/perl5/5.8.8
    .
    Le problème est que désormais perl commence par chercher les modules dans les nouveaux répertoires, et mon script de test ci-dessous qui marchait avant l'ajout des répertoires me sort une erreur dans le module Math :

    #!/usr/bin/perl

    use Math::Trig;
    use Net::FTP;
    #use Algorithm::C3;
    $x = tan(0.9);
    $y = acos(3.7);
    $z = asin(2.4);
    $pi_sur_deux = pi/2;
    $rad = deg2rad(120);
    print "terminé pour les calculs, voici le radian : $rad*\n";
    Voici l'erreur :

    is only avaliable with the XS version at /opt/bss/lib/perl5/5.8.7/Math/Complex.pm line 71
    BEGIN failed--compilation aborted at /opt/bss/lib/perl5/5.8.7/Math/Complex.pm line 71.
    Compilation failed in require at /opt/bss/lib/perl5/5.8.7/Math/Trig.pm line 13.
    BEGIN failed--compilation aborted at /opt/bss/lib/perl5/5.8.7/Math/Trig.pm line 13.
    Compilation failed in require at ./test.pl line 5.
    BEGIN failed--compilation aborted at ./test.pl line 5.
    Par contre le code de test ci-dessous du module Algorithm::C3 que j'avais fait pour tester mon module Algorithm::C3 installé dans le répertoire que j'ai ajouté marche bien.

    #!/usr/bin/perl
    use Algorithm::C3;

    # merging a classic diamond
    # inheritance graph like this:
    #
    # <A>
    # / \
    # <B> <C>
    # \ /
    # <D>

    my @merged = Algorithm::C3::merge(
    'D',
    sub {
    # extract the ISA array
    # from the package
    no strict 'refs';
    @{$_[0] . '::ISA'};
    }
    );

    print join ", " => @merged;
    print join "\n",@INC
    Conclusion: SI je supprime la variable d'environnement PERL5LIB tout marche bien avec les modules standards, mais mes modules installés ailleurs ne sont plus trouvés par perl; si je set la variable PERL5LIB, mes modules sont détectés parfaitement, mais perl commence ses recherches par les répertoires que j'ai ajoutés, et ml signale des erreurs.

    Alors ma question est:

    Quel peut être le problème avec Math dans le premier script de test ci-dessus, selon vous s'il vous plait?
    Comment ajouter des nouveaux répertoires à la fin et non au début de @INC s'il vous plait?
    Comment régler mon système afin que perl utilise toujours d'abord les répertoires standards avant d'utiliser la variable PERL5LIB? Peut-on modifier @INC directement? Dans quel fichier cela se configure?
    En fin quellle solution efficace et permanente me proposeriez-vous pour mon problème de manière générale?

    Merci pour votre aide.

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Je te suggère de garder ta configuration standard avec les modules standards fonctionnant, puis dans ton programme, tu rajoutes un use lib '/opt'; avant l'appel de tes modules non standards.

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2009
    Messages : 218
    Points : 130
    Points
    130
    Par défaut
    Ouais merci!

    C'est la solution que j'applique en ce moment. Mais justement c'est pas celle là que je voulais. Mais j'ai réglé le souci en installant une instance de perl dans le répertoire où se trouvent les modules et en créant un alias dessus dans le /usr/local/bin où sont exécutés les srcipts .

    Merci.

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

Discussions similaires

  1. PyDev Gestion des Modules
    Par dev_ggy dans le forum Général Python
    Réponses: 1
    Dernier message: 22/12/2009, 16h40
  2. Gestion des Tab Index sur une page
    Par Fngonka dans le forum ASP.NET
    Réponses: 2
    Dernier message: 17/07/2008, 13h55
  3. Réponses: 3
    Dernier message: 10/03/2006, 16h41
  4. [Exception]Gestion des exceptions, capture sur la classe.
    Par @lantis dans le forum Général Java
    Réponses: 9
    Dernier message: 22/07/2005, 19h43

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