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

Déploiement/Installation Python Discussion :

[python 3] Problème avec cx_freeze et tkinter


Sujet :

Déploiement/Installation Python

  1. #1
    Futur Membre du Club Avatar de bvrignaud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 17
    Points : 9
    Points
    9
    Par défaut [python 3] Problème avec cx_freeze et tkinter
    Bonjour à tous,

    Je suis bien embarrassé. Je souhaiterais déployer mon application à l'aide de cx_freeze, mais quand je test le build réalisé, sur un debian fraîche, cela ne fonctionne pas.
    J'ai donc essayé avec les exemples de cx_freeze (https://bitbucket.org/anthony_tuinin...er/?at=default), mais malheureusement (ou pas), j’obtiens le même résultat.

    SimpleTkApp.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    try:
        from tkinter import Tk, Label, Button, BOTTOM
    except ImportError:
        from Tkinter import Tk, Label, Button, BOTTOM
     
    root = Tk()
    root.title('Button')
    Label(text='I am a button').pack(pady=15)
    Button(text='Button').pack(side=BOTTOM)
    root.mainloop()
    setup.py
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    # -*- coding: utf-8 -*-
     
    # A simple setup script to create an executable using Tkinter. This also
    # demonstrates the method for creating a Windows executable that does not have
    # an associated console.
    #
    # SimpleTkApp.py is a very simple type of Tkinter application
    #
    # Run the build process by running the command 'python setup.py build'
    #
    # If everything works well you should find a subdirectory in the build
    # subdirectory that contains the files needed to run the application
     
    import sys
    from cx_Freeze import setup, Executable
     
    base = None
    if sys.platform == 'win32':
        base = 'Win32GUI'
     
    executables = [
        Executable('SimpleTkApp.py', base=base)
    ]
     
    setup(name='simple_Tkinter',
          version='0.1',
          description='Sample cx_Freeze Tkinter script',
          executables=executables
          )
    Je "compile" avec la commande : Si j’exécute le fichier généré sur mon poste de développement (LMDE 2), cela fonction parfaitement.
    En revanche, quand j’exécute sur ma VM de test (Debian 8.x), j’obtiens l’erreur suivante :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Traceback (most recent call last):
      File "/usr/lib/python3.4/tkinter/__init__.py", line 39, in <module>
        import _tkinter
      File "/usr/lib/python3.4/importlib/_bootstrap.py", line 2237, in _find_and_load
        return _find_and_load_unlocked(name, import_)
      File "/usr/lib/python3.4/importlib/_bootstrap.py", line 2226, in _find_and_load_unlocked
        module = _SpecMethods(spec)._load_unlocked()
      File "/usr/lib/python3.4/importlib/_bootstrap.py", line 1191, in _load_unlocked
        return self._load_backward_compatible()
      File "/usr/lib/python3.4/importlib/_bootstrap.py", line 1161, in _load_backward_compatible
        spec.loader.load_module(spec.name)
      File "/usr/lib/python3.4/importlib/_bootstrap.py", line 539, in _check_name_wrapper
        return method(self, name, *args, **kwargs)
      File "/usr/lib/python3.4/importlib/_bootstrap.py", line 1715, in load_module
        fullname, self.path)
      File "/usr/lib/python3.4/importlib/_bootstrap.py", line 321, in _call_with_frames_removed
        return f(*args, **kwds)
    ImportError: libBLT.2.5.so.8.6: cannot open shared object file: No such file or directory
     
    During handling of the above exception, another exception occurred:
     
    Traceback (most recent call last):
      File "SimpleTkApp.py", line 5, in <module>
      File "/usr/lib/python3.4/importlib/_bootstrap.py", line 2237, in _find_and_load
        return _find_and_load_unlocked(name, import_)
      File "/usr/lib/python3.4/importlib/_bootstrap.py", line 2226, in _find_and_load_unlocked
        module = _SpecMethods(spec)._load_unlocked()
      File "/usr/lib/python3.4/importlib/_bootstrap.py", line 1191, in _load_unlocked
        return self._load_backward_compatible()
      File "/usr/lib/python3.4/importlib/_bootstrap.py", line 1161, in _load_backward_compatible
        spec.loader.load_module(spec.name)
      File "/usr/lib/python3.4/tkinter/__init__.py", line 41, in <module>
        raise ImportError(str(msg) + ', please install the python3-tk package')
    ImportError: libBLT.2.5.so.8.6: cannot open shared object file: No such file or directory, please install the python3-tk package
     
    During handling of the above exception, another exception occurred:
     
    Traceback (most recent call last):
      File "/usr/local/lib/python3.4/dist-packages/cx_Freeze-4.3.4-py3.4-linux-x86_64.egg/cx_Freeze/initscripts/Console.py", line 27, in <module>
      File "SimpleTkApp.py", line 7, in <module>
      File "/usr/lib/python3.4/importlib/_bootstrap.py", line 2237, in _find_and_load
        return _find_and_load_unlocked(name, import_)
      File "/usr/lib/python3.4/importlib/_bootstrap.py", line 2224, in _find_and_load_unlocked
        raise ImportError(_ERR_MSG.format(name), name=name)
    ImportError: No module named 'Tkinter'
    J'ai essayer des imports dans tous les sens, rien ne fonctionne. Une idée ?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut,

    Citation Envoyé par bvrignaud Voir le message
    J'ai essayer des imports dans tous les sens, rien ne fonctionne. Une idée ?
    La cause du problème est due à votre environnement (debian, python, bibliothèques,...).
    Il faut commencer par rechercher sur Internet les discussions de ceux qui ont rapporté des problèmes similaires.
    Voir si la correction proposée, s'il y en a, fait sens dans votre contexte et tester si elle fonctionne chez vous.

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

  3. #3
    Futur Membre du Club Avatar de bvrignaud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    La cause du problème est due à votre environnement (debian, python, bibliothèques,...).
    Il faut commencer par rechercher sur Internet les discussions de ceux qui ont rapporté des problèmes similaires.
    Voir si la correction proposée, s'il y en a, fait sens dans votre contexte et tester si elle fonctionne chez vous.
    - W
    Merci, mais avant de poser le message sur le forum, j'ai cherchez de long et en large sur le net, et je n'ai rien trouver de probant. C'est pourquoi j'ai posé ma question ici.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Citation Envoyé par bvrignaud Voir le message
    Merci, mais avant de poser le message sur le forum, j'ai cherchez de long et en large sur le net, et je n'ai rien trouver de probant. C'est pourquoi j'ai posé ma question ici.
    Certes mais à part vous dire "avez vous appliqué la correction mentionnée ici?", puis si çà ne fonctionne pas "avez vous appliqué la correction mentionné là".
    Si vous n'exploitez pas les réponses déjà données par ailleurs vous allez resté coincé longtemps d'autant que vous ne mentionné pas les médecines que vous avez déjà essayé d'appliquer.

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

  5. #5
    Futur Membre du Club Avatar de bvrignaud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Certes mais à part vous dire "avez vous appliqué la correction mentionnée ici?", puis si çà ne fonctionne pas "avez vous appliqué la correction mentionné là".
    Si vous n'exploitez pas les réponses déjà données par ailleurs vous allez resté coincé longtemps d'autant que vous ne mentionné pas les médecines que vous avez déjà essayé d'appliquer.

    - W
    Je me suis sans doute mal exprimé.
    Mon code fonctionne parfaitement sur ma machine de dev.
    Je le "compile" à l'aide de mon script cx_freeze/setup.py toujours sur ma machine de dev.
    Si je test le résultat de la compilation sur mon poste de dev, tout est OK, mais c'est quand je test sur une autre machine que j'obtiens une erreur.

  6. #6
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    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 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je n'ai pas répondu jusqu'ici parce que j'utilise cx_freeze surtout sous Windows, et je n’utilise pas tkinter.

    Mais j'avais essayé sous Linux (Ubuntu) il y a quelques années, et j'avais rencontré le même genre de problème.

    J'ai résolu ça en ajoutant dans le setup.py une option "bin_path_includes" avec une valeur '["/usr/lib"]'. Ça permet à cx_freeze de charger les bibliothèques dont il aura besoin pour tourner sur une machine "toute nue".

    J'avais fait ça entre un Ubuntu contenant tous les paquets utiles pour l'exécution normale, et un Ubuntu tout frais d'installation.

    Par contre, je ne sais pas si ça marcherait sur une autre version de la même distribution Linux et encore moins sur une autre distribution...

    A titre d'info, j'ai un tuto sur le sujet ici: http://python.jpvweb.com/mesrecettes...p?id=cx_freeze. En utilisant un "modèle" multiplateforme de setup, ça me permet non seulement de m'adapter facilement à chaque cas particulier, mais aussi de faire évoluer ce modèle en fonction des difficultés rencontrées (il y en a eu et il y en aura encore...). Il ne faut jamais oublier que ce que fait cx_freeze est très compliqué: il faut l'aider de temps en temps par des instructions particulières.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

Discussions similaires

  1. [Python 3.X] problème avec le module tkinter
    Par nintenndopc76 dans le forum Programmation multimédia/Jeux
    Réponses: 2
    Dernier message: 18/09/2016, 21h28
  2. Problème avec PyDEV et Tkinter
    Par divpload dans le forum EDI/RAD
    Réponses: 1
    Dernier message: 15/06/2009, 19h25
  3. [Python 3] Problème avec sendall()
    Par sorry60 dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 19/04/2009, 17h14
  4. Swig - Python/C++ problème avec STL
    Par mencaglia dans le forum Interfaçage autre langage
    Réponses: 2
    Dernier message: 26/11/2007, 18h21
  5. Problème avec python
    Par Thrystan dans le forum Gnome
    Réponses: 2
    Dernier message: 17/08/2006, 00h29

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