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

Python Discussion :

path mis dans PYTHONPATH


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut path mis dans PYTHONPATH
    Bonjour,
    je pensais que PYTHONPATH pouvait inclure plusieurs "paths", le cas suivant montre que non ou alors je ne comprends pas la logique associée : j'ai interverti les deux paths mis dans PYTHONPATH, ce qui fait marcher ou pas mon application.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >awalter>: setenv PYTHONPATH /ipas2/user/awalter/ccm_wa/NEDI-ACE2011A_prep/NEDI:/ipas2/user/awalter/ccm_wa/AIXM-ACE2011A_prep/AIXM
    >awalter>: python /ipas2/user/awalter/ccm_wa/AIXM-ACE2011A_prep/AIXM/HMI/main_export.py -u IPAS0 -s ACE2011A 
    Traceback (most recent call last):
      File "/ipas2/user/awalter/ccm_wa/AIXM-ACE2011A_prep/AIXM/HMI/main_export.py", line 18, in ?
        from DataInterface.databaseaixm import DataBaseAixm__,Handler__
    ImportError: No module named databaseaixm
    >awalter>
    >awalter>: setenv PYTHONPATH /ipas2/user/awalter/ccm_wa/AIXM-ACE2011A_prep/AIXM:/ipas2/user/awalter/ccm_wa/NEDI-ACE2011A_prep/NEDI
    >awalter>: python -O /ipas2/user/awalter/ccm_wa/AIXM-ACE2011A_prep/AIXM/HMI/main_export.py -u IPAS0 
    =>Quit AIXM Application !
    >awalter>:
    Quelqu'un peut 'il m'expliquer ce qui cloche ?

    Le souci est que j'ai un pb python (localisé par le path a) doit lancer un autre pg python (localisé par le path b), comment faire dans ce cas pour positionner PYTHONPATH si ce qui est cité plus haut est confirmé.
    Merci

  2. #2
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Bonjour.

    Citation Envoyé par awalter1 Voir le message
    ... j'ai un pg python (localisé par le path a) doit lancer un autre pg python (localisé par le path b), comment faire dans ce cas ...
    Voici une méthode qui marche sous les systèmes Unix. Pour Windows, il faudra peut-être donner précisément le chemin de Python dans le 1er élément de la liste des arguments (cf. code) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    #!/usr/bin/env python3
     
    import subprocess
    import os
     
    currentDirectory = os.path.dirname( __file__ )
    currentDirectory = os.path.normpath(currentDirectory)
     
    pathOfThePythonFileToCall = os.path.join(currentDirectory,
                                             'called.py')
     
    try:
        subprocess.check_call(cwd = currentDirectory,
                              args = ['python', # Windaube ?
                                      pathOfThePythonFileToCall])
    except:
        print('The Python file cannot be called.')
    Le code du fichier appelé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #!/usr/bin/env python
    #coding=utf-8
     
    import time
     
    lastCall = time.strftime('%d-%m-%Y_%H-%M-%S', time.localtime())
     
    # We use the syntax of print in Python 2
    # so as to see that Python 2 has been called.
    print lastCall
    Dans cet exemple, le 1er code est lancé depuis Python 3 et il appelle le 2nd sous Python 2.6.

    Rien n'empêche de faire des appels avec la même version de Python.

    PS : pour ceux qui sont sous Windows, je suis preneur des modifications qu'il faut apporter.

  3. #3
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    10 contre 1 que vous avez un module DataInterface dans "/ipas2/user/awalter/ccm_wa/NEDI-ACE2011A_prep/NEDI".

  4. #4
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Bonjour Antoine.

    Peux-tu nous en dire plus ?

    PS : sur ce, je vais aller nager.

  5. #5
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Bien sur

    Pour charger un module, python regarde dans toutes les entrées du PYTHONPATH une à une, en commençant évidemment par la première.

    Dès qu'il trouve le module, il arrête la recherche.
    Du coup, il se pourrait tout à fait qu'il trouve un module DataInterface dans le premier dossier. Module qu'il charge, pour ensuite découvrir qu'il n'y a pas de sous-module nommé databaseaixm dedans.

    Dans l'autre sens, tout fonctionne bien. La seule conclusion logique que je vois, c'est que le module DataInterface est présent dans les deux dossiers, mais que celui de NEDI ne contient pas databaseaixm.

    PS: awalter, vous avez certainement fait du java

  6. #6
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut
    Bonjour,
    Oui Antoine, vous avez raison, tous mes projets répondent à la même structure et donc ont un répertoire DataInterface. J'aurais pu y penser.
    Je vais essayer la solution proposée plus haut ou l'adapter car je suis en python 2.4.4 sous Linux.
    Merci

  7. #7
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut
    Je ne comprends pas la solution de rambc :
    current_directory va fournir le path du programme appelant (celui qui s'exécute) et pas celui à appeler ?
    Merci

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

Discussions similaires

  1. Récupérer path fichier dans appli Web
    Par Mister Nono dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 16/05/2007, 10h31
  2. Réponses: 7
    Dernier message: 16/04/2007, 11h45
  3. map.path(asp) dans vb.net c'est quoi ?
    Par charaf dans le forum Windows Forms
    Réponses: 1
    Dernier message: 09/03/2007, 10h04
  4. [VBA EXCEL] password mis dans la macro
    Par ecirb dans le forum VBA Word
    Réponses: 10
    Dernier message: 28/02/2007, 18h32
  5. [PATH] $(Outdir) dans le code
    Par ZaaN dans le forum MFC
    Réponses: 7
    Dernier message: 15/11/2006, 13h24

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