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 :

cx_freeze / pptx "PackageNotFoundError"


Sujet :

Déploiement/Installation Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur calcul et simulation
    Inscrit en
    Juin 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Ingénieur calcul et simulation
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 41
    Par défaut cx_freeze / pptx "PackageNotFoundError"
    Bonjour,

    Je recréé un post sur le sujet car les autres sont dans un poste dont le titre ne correspond plus au problème actuel ("exe corrompu créé avec Cx Freeze (lxml)").

    Je travaille actuellement sur un programme utilisant le module "pptx" destiné à manipuler des Powerpoints. Le programme fonctionne très bien lorsqu'il est lancé depuis l'interpreteur, mais une fois compilé à l'aide de cx_freeze, j'obtiens le message d'erreur suivant lorsque je tente d'utiliser le bouton principal :

    Exception in Tkinter callback
    Traceback (most recent call last):
    File "Tkinter.pyc", line 1470, in __call__
    File "pptx_02.py", line 187, in ButtonErstellen
    File "pptx\api.pyc", line 29, in __init__
    File "pptx\presentation.pyc", line 87, in __init__
    File "pptx\presentation.pyc", line 170, in __open
    File "pptx\packaging.pyc", line 88, in open
    File "pptx\packaging.pyc", line 671, in __new__
    PackageNotFoundError: Package not found at 'C:\Users\Moi\Programmation\Python\build\exe.win32-2.7\library.zip\pptx\templates\default.pptx'
    Le problème est que ce fichier default.pptx est pourtant bien à l'adresse indiquée dans le message d'erreur, donc je n'ai aucune idée de la raison pour laquelle il ne le trouve pas ...

    J'ai également essayé avec py2exe, et j'obtiens exactement le même message d'erreur ...

    En cherchant dans les fonctions du module pptx, je suis allé voir progressivement jusqu'à la dernière erreur (File "pptx\packaging.pyc", line 671, in __new__) et je vous mets ici le code de la classe en question. Peut être que le problème vient d'ici, que la fonction ne prévoit pas tous les cas de figure (notament le fait que le fichier soit dans un zip sans en être un), mais je ne suis malheureusement pas d'un niveau suffisant en Python pour le savoir :

    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
    class FileSystem(object):
        """
        Factory for filesystem interface instances.
     
        A FileSystem object provides access to on-disk package items via their URI
        (e.g. ``/_rels/.rels`` or ``/ppt/presentation.xml``). This allows parts to
        be accessed directly by part name, which for a part is identical to its
        item URI. The complexities of translating URIs into file paths or zip item
        names, and file and zip file access specifics are all hidden by the
        filesystem class. |FileSystem| acts as the Factory, returning the
        appropriate concrete filesystem class depending on what it finds at *path*.
        """
        def __new__(cls, file):
            # if *file* is a string, treat it as a path
            if isinstance(file, basestring):
                path = file
                if is_zipfile(path):
                    fs = ZipFileSystem(path)
                elif os.path.isdir(path):
                    fs = DirectoryFileSystem(path)
                else:
                    raise PackageNotFoundError("Package not found at '%s'" % path)
            else:
                fs = ZipFileSystem(file)
            return fs
    Si quelqu'un a une idée pour régler ça ...

    Merci d'avance

  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,

    J'ai déjà eu un problème qui ressemble à ça.

    J'avais créé un package qui contenait un module qui devait lire et exploiter un fichier de données situé dans le même répertoire. Le problème rencontré est celui-ci: le module une fois intégré au sein de library.zip ne sait pas retrouver le fichier de données lui aussi dans le library.zip. Il peut y avoir un problème de zip ou un problème d'adresse ou les 2.

    La solution que j'ai trouvée est celle-ci: demander la recopie du package complet (pptx dans ton cas) au même niveau que l'exe, avec l'option "include_files" du setup.py. Et si ça ne marche toujours pas, ajoute le chemin dans le path (chemins de recherche des modules), voire "pptx" dans l'option package.

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur calcul et simulation
    Inscrit en
    Juin 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Ingénieur calcul et simulation
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 41
    Par défaut
    Bonjour,

    J'ai ajouté pptx dans include_files et dans package et ça a fonctionné ! Je n'ai pas eu besoin de mettre le chamin dans path.

    Merci beaucoup

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

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