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

Py2exe Python Discussion :

Importlib et py2exe / cxfreeze [Python 3.X]


Sujet :

Py2exe Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club Avatar de xoxotf
    Homme Profil pro
    Recherche d'emploi
    Inscrit en
    Mars 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Recherche d'emploi
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2016
    Messages : 7
    Par défaut Importlib et py2exe / cxfreeze
    Salut,

    J'ai un programme python qui marche parfaitement via la console, mais une fois compilé avec py2exe, cxfreeze ou même pyinstaller j'ai un module qui ne fonctionne plus et rend donc mon programme obsolète. Le module en question est "importlib". Je l'utilise pour pouvoir importer dynamiquement un module c'est à dire comme en php pouvoir faire un include du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $var = "NomDuModule";
    include($var);
    Le soucis c'est puisque ça ne fonctionne pas, il me retourne un string et non un objet et donc a l'appelle de ce dernier j'ai une erreur.

    voici la déclaration:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    idm = cc.GetModule("idmantypeinfo.tlb")
    name = str(idm)
    module = name[9:65]
    IDMan = importlib.import_module(module)
    La dernière ligne est celle qui me fait défaut, et qui et donc l'équivalent (en non-dynamique) de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import comtypes.gen._ECF21EAB_3AA8_4355_82BE_F777990001DD_0_1_0 as IDMan
    Comme vous pouvez vous en douter, c'est le UUID que je doit récupérer, d'ou ma manoeuvre puisque évidemment il et unique sur chaque pc.
    Et donc à l'appelle de IDMan via la console tout marche parfaitement mais une fois compiler l'appelle de IDMan me donne une erreur puisque ce n'est plus un objet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    idm1 = cc.CreateObject("IDMan.CIDMLinkTransmitter", None, None, IDMan.ICIDMLinkTransmitter2)
    Mon soucis est donc de réussir à faire un executable avec un module importlib fonctionnel. Après plusieurs recherche je n'arrive pas à trouver ma réponse, même en modifiant les différents setup.py pour include manuellement le module avant compilation cela ne change rien j'ai toujours le même soucis. Je m'en remet donc à vous

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je viens d'essayer un petit code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import importlib
     
    modul = importlib.import_module("sys", package=None)
     
    print(modul.platform) # doit afficher "win32" sous Windows
    L'exécution de ce code python affiche bien "win32".

    Je fais le traitement avec cx_freeze avec un setup.py qui n'a aucune instruction spécifique pour importlib, et l'exécution de l'exe fait ce qu'il doit faire: il affiche bien "win32"!

    Est-ce que ça fait la même chose chez toi?

  3. #3
    Nouveau membre du Club Avatar de xoxotf
    Homme Profil pro
    Recherche d'emploi
    Inscrit en
    Mars 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Recherche d'emploi
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2016
    Messages : 7
    Par défaut
    Oui j'ai bien win32 qui s'affiche (après avoir compiler avec cx). Enfaite pour être plus précis, j'utilise le module comtypes.client qui permet d'accéder à une interface COM, après avoir utilisé la méthode GetModule() je récupère en string l'UUID du module COM, identifiant necessaire pour importer le module correspondant (car le nom change en fonction de l'UUID). J'essaye ensuite de l'importer grâce à importlib mais une fois compilé, ça ne fonctionne plus..

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Et à titre d'essai, est-ce que le module qui ne s'importe pas avec importlib peut-il être importé de façon classique avec import?

  5. #5
    Nouveau membre du Club Avatar de xoxotf
    Homme Profil pro
    Recherche d'emploi
    Inscrit en
    Mars 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Recherche d'emploi
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2016
    Messages : 7
    Par défaut
    Eh bien étrangement non, je ne suis pas expert mais j'ai au début avant importlib tenter de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IDMan = __import__(module)
    mais au lieu d'importer cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import comtypes.gen._ECF21EAB_3AA8_4355_82BE_F777990001DD_0_1_0 as IDMan
    j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <module 'comtypes' from 'C:\\Python34\\lib\\site-packages\\comtypes\\__init__.py'>
    J'ai donc déduit que l'import c'était bizarrement arrêter au premier ".", mais le comment du pourquoi je ne sais pas, après ça j'ai découvert importlib qui fonctionner parfaitement bien, excepter après compilation

  6. #6
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Est-ce que "comtypes" est un répertoire dans lequel il y a un fichier "__init__.py" même vide?

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

Discussions similaires

  1. [py2exe] wxPython et py2exe -> pb de rendu
    Par bibile dans le forum Py2exe
    Réponses: 7
    Dernier message: 14/06/2008, 19h02
  2. [PyQt] [py2exe]
    Par Zorro dans le forum Py2exe
    Réponses: 2
    Dernier message: 05/05/2006, 13h36
  3. [py2exe] Impossible de charger un module...
    Par Mr Hyde dans le forum Py2exe
    Réponses: 3
    Dernier message: 28/09/2005, 17h17
  4. [py2exe] Creation Py2Exe
    Par kedare dans le forum Py2exe
    Réponses: 8
    Dernier message: 15/09/2005, 12h50
  5. wxPython + MatPlotLib + py2exe
    Par bibile dans le forum Py2exe
    Réponses: 1
    Dernier message: 05/08/2005, 22h49

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