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 :

faire un import conditionnel


Sujet :

Python

  1. #1
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut faire un import conditionnel
    Bonjour,
    Mon appli fait l'import d'un module. Cet import génère un floating exception lorsque je lance l'appli sur la machine m1 mais fonctionne sur la machine m2 : les 2 machines ont le même environnement : même linux RedHat, même versions python,gtk,pygtk.
    J'ai mis une exception sur l'import mais elle ne capte pas ce floating exception.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    try:
       from matplotlib.backends.backend_gtkagg import *
    except:
       print "ImportError"
    Si l'exception ne marche pas, comment faire pour ne pas exécuter l'import sur m1 et l'exécuter sur m2.
    Merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    J'essaierai les imports à la console, genre:
    python -c "from matplotlib.backends.backend_gtkagg import *"
    Si cela fonctionne, on peut supposer que ce n'est pas qu'un problème d'import mais un effet de bord entre l'application et son environnement qu'il va falloir débugger - pour définir les pré-requis du déploiement de votre appli.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut
    J'ai fait le test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >awalter 62>: python -c "from matplotlib.backends.backend_gtkagg import FigureCanvasGtk"
    Floating exception
    >awalter 63>:
    donc ce serait un pb d'import ?
    Merci

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par awalter1 Voir le message
    donc ce serait un pb d'import ?
    Ben si çà fonctionne sur l'autre machine, çà élimine votre application...
    Mais il va falloir farfouiller pour comprendre le pourquoi du comment car "elles ont été construites à l'identique".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 147
    Points : 88
    Points
    88
    Par défaut chercher l'erreur avec méthode
    Bonjour

    je propose de chercher l'erreur avec méthode. Il faut structurer la recherche en partant du général au particulier. Et en écrivant les actions réalisées.
    Environnement est-il vraiment identique? faire une liste écrite des vérifications, taille et dates des fichiers vraiment identiques,etc.....
    ensuite vérifier
    version des outils, python, modules standard des distributions, modules commun développé. etc.......

    l'étape d'après est de chercher des lieux pour mettre des marqueurs qui doivent en principe donner les mêmes informations pour un même contexte.

    La méthode qui consisterait à dupliquer à l'aveugle la totalité es fichiers source d'une machine à une autre (avec un backup ) peut être à la fois radical et dangereux.

    Pour ce genre d'affaire, quand je ne comprends pas, je me donne du temps et construit une méthode, j'écris ce que j'ai fait......je réalise en plusieurs étapes espacées de plusieurs jours.......je muris progressivement, et j'arrive en général à cerner le problème. Une fois cerné c'est presque gagné......il y a le forum
    je conçois que l'attente et la patience pas toujours facile à gérer. Mais je sais que jusqu'à maintenant, j'ai toujours fini par aboutir

  6. #6
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut
    C'est pourquoi je n'ai pas demandé comment résoudre le pb de floating exception mais comment le contourner.
    En réalité c'est sur ma machine de développement que l'erreur se produit et c'est pour une fonctionnalité rarement utilisé. Par contre sur la machine du client c'est OK. C'est pour cela que je préfèrais opter pour une solution de contournement qui me permettrait (sur ma machine de développement) de lancer mon application sans la fonctionnalité qui pose problème d'ou la demande pour faire un import conditionnel.
    Merci

  7. #7
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Utiliser un flag activable, avec sys.argv par exemple ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import sys
     
    impflag = False # Attention à la portée
    if len(sys.argv) == 2 and sys.argv[1] == 'noimp':
        impflag = True
    ...
    if not impflag:
        from matplotlib.backends.backend_gtkagg import *
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import sys
     
    if len(sys.argv) == 1: # donc pas d'argument
        from matplotlib.backends.backend_gtkagg import *
    Mais bon... Si on importe quelque chose c'est que l'on en a besoin donc occulter le problème ne mène à rien.

    @+
    Merci d'utiliser le forum pour les questions techniques.

  8. #8
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Ou encore récupérer le stdout de la commande python -c "from matplotlib.backends.backend_gtkagg import FigureCanvasGtk" avec subprocess et faire l'import suivant le résultat.
    Ou utiliser le module imp ?

    @+
    Merci d'utiliser le forum pour les questions techniques.

  9. #9
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut
    Merci de vos réponses, le coup d'utiliser un argument d'appel me convient bien.

  10. #10
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Sans doute si vous voulez avancer votre code sur la machine de développement sans tenir compte de l'erreur.
    Mais vous devriez y revenir par la suite pour en trouver la source et corriger cela. Sinon le code n'est pas propre.
    Il existe sans doute d'autres réponses mais le moyen le plus simple d'occulter l'import est, il me semble, if.

    Bon code.
    Merci d'utiliser le forum pour les questions techniques.

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

Discussions similaires

  1. [SQL2K] Faire un requête conditionnelle pour un CURSOR
    Par zooffy dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 07/08/2007, 14h00
  2. Faire un import d'un VBS dans un VBS
    Par SoaB dans le forum VBScript
    Réponses: 4
    Dernier message: 03/05/2007, 09h10
  3. [RegEx] Faire un remplacement conditionnel
    Par guidav dans le forum Langage
    Réponses: 1
    Dernier message: 26/01/2007, 19h22
  4. Réponses: 4
    Dernier message: 24/02/2006, 22h54
  5. [Débutant] Comment faire un import de package ?
    Par MASSAKA dans le forum Eclipse Java
    Réponses: 8
    Dernier message: 07/05/2004, 09h45

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