Bonjour,
Je me tire les cheveux depuis plusieurs heures sur un problème avec py2exe et Anaconda. Je cherche à packager un programme python 2.7 qui fait appel à des bibliothèques de fonctions orientées maths (numpy, scipy, etc...). J'ai déjà réussi à faire cela il y a quelques temps, mais je développais en utilisant le bundle python(x,y). Depuis je suis passé sur Anaconda pour être en 64 bits.
Bref, là n'est pas le problème. Voici mon programme test:
Voici mon setup.py:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 # main.py import Tkinter import numpy import pandas import matplotlib import scipy import os, sys
Mon environnement de travail:
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80 # -*- coding: utf-8 -*- from distutils.core import setup import py2exe, sys, os import numpy as np import matplotlib sys.setrecursionlimit(5000) sys.path.append(os.getcwd()) import main # 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 # List of stuff wich need to be included (not handled automatically by # py2exe includes = ['sip', 'matplotlib.backends', 'matplotlib.figure', 'pylab', 'numpy', 'numpy.linalg', 'scipy.sparse.csgraph._validation', 'scipy.special._ufuncs_cxx', 'matplotlib.backends.backend_tkagg', 'matplotlib.backends.backend_qt4agg', 'FileDialog'] # List of stuff which can be excluded to get a lighter executable excludes = ['_gtkagg', '_agg2', '_cairo', '_cocoaagg', '_fltkagg', '_gtk', '_gtkcairo', '_ssl', 'pdb'] # List of not usefull dlls dll_excludes = ['libgdk-win32-2.0-0.dll', 'libgobject-2.0-0.dll'] data_files = [] data_files.extend(matplotlib.get_py2exe_datafiles()) # List of scripts of the program scripts = ['main.py'] # Py2exe options opt = {'py2exe': {'compressed': False, 'optimize': 2, 'includes': includes, 'excludes': excludes, 'dll_excludes': dll_excludes, 'bundle_files': 3, 'dist_dir': 'bin', 'xref': False, 'skip_archive': False, 'ascii': False, 'custom_boot_script': '', } } setup( name = 'test', scripts = scripts, windows = [{'script': 'main.py', 'dest_base': 'main', 'icon_ressources': None}], data_files = data_files, options = opt, )
J'utilise la version 0.6.10 de py2exe. Le packaging se passe plutôt bien, mais lorsque j'essaye de lancer l’exécutable créé ça plante. Le log m'indique ceci:platform : win-64
conda version : 3.19.3
conda-build version : 1.19.0
python version : 2.7.11.final.0
requests version : 2.9.1
root environment : C:\users-apps\Anaconda2 (writable)
default environment : C:\users-apps\Anaconda2
envs directories : C:\users-apps\Anaconda2\envs
package cache : C:\users-apps\Anaconda2\pkgs
channel URLs : https://repo.continuum.io/pkgs/free/win-64/
https://repo.continuum.io/pkgs/free/noarch/
https://repo.continuum.io/pkgs/pro/win-64/
https://repo.continuum.io/pkgs/pro/noarch/
config file : None
is foreign system : False
Toutes mes recherches n'ont rien données. Je peux reproduire ce problème chez tous les utilisateurs destinataire du programme ayant la même config que moi, ainsi que ceux n'ayant pas du tout python installé.Traceback (most recent call last):
File "main.py", line 1, in <module>
File "numpy\__init__.pyo", line 172, in <module>
File "numpy\add_newdocs.pyo", line 13, in <module>
File "numpy\lib\__init__.pyo", line 18, in <module>
File "numpy\lib\polynomial.pyo", line 19, in <module>
File "numpy\linalg\__init__.pyo", line 51, in <module>
File "numpy\linalg\linalg.pyo", line 29, in <module>
File "numpy\linalg\lapack_lite.pyo", line 12, in <module>
File "numpy\linalg\lapack_lite.pyo", line 10, in __load
ImportError: DLL load failed: La procédure spécifiée est introuvable.
Est-ce que quelqu'un ici voit ce qui pourrait être à l'origine du problème?
Julien
Partager