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:
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()
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
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
)
Notez que j'ai tenté d'inclure manuellement certains modules via l'option "includes".

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