Bonjour,
Je m'essaye à py2exe mais je me trouve face un soucis. Je bosse sur un script exemple nommé prog.py que je souhaite "compiler" en un unique executable (à plus ou moins quelques dll). Si j'utilise l'option bundle_files à 3 (par défaut) de mon setup.py tout fonctionne très bien. Les problèmes arrivent dès que je passe à 1 (un seul exe) ou 2 (un exe + python27.dll): la compilation se déroule sans messages d'erreurs ni warnings mais l'execution du programme (l'exe) plante salement. A savoir pas de prog.exe.log de généré, pas de message dans l'invite de commande si je le lance depuis là mais un bonne vieille fenêtre windows "prog.exe a cessé de fonctionner". That's it.
J'ai remarqué que cela se produit seulement pour certains modules importés dans prog.py. Dans mon cas cela intervient pour les modules:
- PIL.Image et PIL.ImageTk (pas si je fait import PIL seul)
- import scipy.sparse (mais pas import scipy)
Voici mon programme prog.py:
Et le setup.py associé:
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 #!/usr/bin/env python # -*- coding: utf-8 -*- import Tkinter import numpy as np import PIL # WORKS from PIL import Image # DONT WORKS #from PIL import ImageTk # DONT WORKS import threading # WORKS import Queue # WORKS import traceback # WORKS import ttk # WORKS #from scipy.sparse import bmat # DONT WORKS data = np.random.random(1)[0] root = Tkinter.Tk() label = Tkinter.Label(root, text=str(data)) label.pack(padx=2, pady=2) root.mainloop()
Notez que j'ai tenté d'inclure manuellement certains modules via l'option "includes".
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 #!/usr/bin/env python # -*- coding: utf-8 -*- from distutils.core import setup import py2exe from PIL import Image # Monkey patch to solve tkinter dll copying issue with py2exe py2exe.build_exe.py2exe.old_prepare = py2exe.build_exe.py2exe.plat_prepare def new_prep(self): self.old_prepare() from _tkinter import TK_VERSION, TCL_VERSION self.dlls_in_exedir.append('tcl{0}.dll'.format(TCL_VERSION.replace('.',''))) self.dlls_in_exedir.append('tk{0}.dll'.format(TK_VERSION.replace('.',''))) py2exe.build_exe.py2exe.plat_prepare = new_prep includes = ['scipy.sparse', 'PIL.Image'] excludes = [] dll_excludes = [] data_files = [] scripts = ['prog.py'] opt = {"py2exe": {"compressed": True, "optimize": 2, "includes": includes, "excludes": excludes, "dll_excludes": dll_excludes, "bundle_files": 1, "dist_dir": "dist", "xref": False, "skip_archive": False, "ascii": False, "custom_boot_script": '', } } setup( name = '', scripts = scripts, windows = [{'script': 'prog.py'}], data_files = data_files, options = opt, zipfile = None )
Est-ce que l'un de vous à déjà rencontré ce soucis? Mes recherches sont infructueuses pour le moment. Je bosse sur Windows7 64bits, python 2.7.6 32bits (Python(X,Y)), PIL 1.1.7.
[EDIT]
Je viens de passer à python 2.7.9 32bits et py2exe 0.6.9 sans aucun changement apparent.
Ciao,
J
Partager