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 :
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 ...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'
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 :
Si quelqu'un a une idée pour régler ça ...
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
Merci d'avance
Partager