Estoy intentando crear una aplicación independiente usando py2exe que depende de matplotlib y numpy. El código de la aplicación es la siguiente:bundle_files = 1 falla con py2exe usando matplotlib
import numpy as np
import pylab as plt
plt.figure()
a = np.random.random((16,16))
plt.imshow(a,interpolation='nearest')
plt.show()
el código de configuración para py2exe (modificado de http://www.py2exe.org/index.cgi/MatPlotLib) es la siguiente:
from distutils.core import setup
import py2exe
import sys
sys.argv.append('py2exe')
opts = {
'py2exe': {"bundle_files" : 3,
"includes" : [ "matplotlib.backends",
"matplotlib.backends.backend_qt4agg",
"pylab", "numpy",
"matplotlib.backends.backend_tkagg"],
'excludes': ['_gtkagg', '_tkagg', '_agg2',
'_cairo', '_cocoaagg',
'_fltkagg', '_gtk', '_gtkcairo', ],
'dll_excludes': ['libgdk-win32-2.0-0.dll',
'libgobject-2.0-0.dll']
}
}
setup(console=[{"script" : "matplotlib_test.py"}],
zipfile=None,options=opts)
Ahora, cuando bundle_files se establece = 3 o está ausente, todo trabaja muy bien , pero el exe resultante no se puede distribuir a una máquina que no está configurada con la misma versión de Python, etc. Si configuro bundle_files = 1, crea un archivo exe adecuadamente grande que debe tener todo incluido, pero no se ejecuta localmente. o distribuido. En este caso, estoy creando todo en una máquina con Windows 7 con Python 2.6.6 y tratando de ejecutar localmente y en una máquina con XP con Python 2.6.4 instalado.
Los errores que consigo cuando se ejecuta en la máquina XP parecer extraño, ya que, sin empaquetar, me sale ningún error en Windows 7. Con la agrupación, Win 7 no informa de la información de rastreo, por lo que no se puede estar seguro de que los errores son la mismo. En cualquier caso, aquí está el mensaje de error en Windows XP:
Traceback (most recent call last):
File "matplotlib_test.py", line 2, in <module>
File "zipextimporter.pyc", line 82, in load_module
File "pylab.pyc", line 1, in <module>
File "zipextimporter.pyc", line 82, in load_module
File "matplotlib\__init__.pyc", line 709, in <module>
File "matplotlib\__init__.pyc", line 627, in rc_params
File "matplotlib\__init__.pyc", line 565, in matplotlib_fname
File "matplotlib\__init__.pyc", line 240, in wrapper
File "matplotlib\__init__.pyc", line 439, in _get_configdir
RuntimeError: Failed to create C:\Documents and Settings\mnfienen/.matplotlib; c
onsider setting MPLCONFIGDIR to a writable directory for matplotlib configuratio
n data
Muchas gracias de antemano si alguien me puede apuntar en una dirección que va a arreglar esto!
EDIT 1:
Seguí el consejo de William y solucionado el problema con MPLCONFIGDIR, pero ahora consigo un nuevo error:
:Traceback (most recent call last):
File "matplotlib\__init__.pyc", line 479, in _get_data_path
RuntimeError: Could not find the matplotlib data files
EDIT 2: He arreglado el problema de los archivos de datos mediante el uso de:
data_files=matplotlib.get_py2exe_datafiles()
Esto lleva a un nuevo error:
Traceback (most recent call last):
File "matplotlib_test.py", line 5, in <module>
import matplotlib.pyplot as plt
File "matplotlib\pyplot.pyc", line 78, in <module>
File "matplotlib\backends\__init__.pyc", line 25, in pylab_setup
ImportError: No module named backend_wxagg
Gracias William. Entonces, traté de cambiar MPLCONFIGDIR, pero fue una pista falsa. Resulta que incluso el código .py de la prueba base no se ejecutaría en la máquina XP sin MPLCONFIGDIR configurado en un lugar de escritura, pero ahora aparece un nuevo error. Ver edición en la pregunta original anterior ... – mishaF
Parece que este es un problema más serio de lo que parecía al principio. Para su nuevo error actual, puede intentar agregar "matplotlib.backends.backend_tkagg" a su lista de inclusiones, pero algo me dice que hay una solución más completa y más completa flotando alrededor de =/ – William
Divertido-Intenté poner "matplotlib.backends.backend_tkagg" "en excluye, pero no incluye. Estoy de acuerdo, pensé, que en algún lugar hay un pez más grande para freír. – mishaF