py2exe и matplotlib: ошибка с бэкэндами - PullRequest
1 голос
/ 21 марта 2012

Я пытаюсь сделать исполняемый файл, используя py2exe.Мой .py использует Tkinter, matplotlib и что-то еще:

import Tkinter
import math
from matplotlib.figure import Figure
from pylab import *
import random

Файл Setup.py, который я использую для создания своего исполняемого файла, выглядит следующим образом:

 from distutils.core import setup
import py2exe


# We need to import the glob module to search for all files.
import glob

# We need to exclude matplotlib backends not being used by this executable.  You may find
# that you need different excludes to create a working executable with your chosen backend.
# We also need to include include various numerix libraries that the other functions call.

opts = {
    'py2exe': { "includes" : [
                               "matplotlib.figure","pylab", "numpy"],
                'excludes': ['_gtkagg', '_tkagg', '_agg2', '_cairo', '_cocoaagg', "matplotlib.numerix.fft","sip", "PyQt4._qt",
                             "matplotlib.backends",  "matplotlib.backends.backend_qt4agg",
                               "matplotlib.numerix.linear_algebra", "matplotlib.numerix.random_array",
                               "matplotlib.backends.backend_tkagg"
                             '_fltkagg', '_gtk','_tkagg','_gtkcairo' ],
                'dll_excludes': ['libgdk-win32-2.0-0.dll',
                                 'libgobject-2.0-0.dll']
              }
       }

# Save matplotlib-data to mpl-data ( It is located in the matplotlib\mpl-data
# folder and the compiled programs will look for it in \mpl-data
# note: using matplotlib.get_mpldata_info
data_files = [(r'mpl-data', glob.glob(r'C:\Python26\Lib\site-packages\matplotlib\mpl-data\*.*')),
                    # Because matplotlibrc does not have an extension, glob does not find it (at least I think that's why)
                    # So add it manually here:
                  (r'mpl-data', [r'C:\Python26\Lib\site-packages\matplotlib\mpl-data\matplotlibrc']),
                  (r'mpl-data\images',glob.glob(r'C:\Python26\Lib\site-packages\matplotlib\mpl-data\images\*.*')),
                  (r'mpl-data\fonts',glob.glob(r'C:\Python26\Lib\site-packages\matplotlib\mpl-data\fonts\*.*'))]

# for console program use 'console = [{"script" : "scriptname.py"}]
setup(windows=[{"script" : "test.py"}], options=opts,   data_files=data_files)

Теперь я делаю свой исполняемый файл,но когда я запускаю его, я получаю этот список ошибок:

Traceback (most recent call last):
File "test.py", line 17, in <module>
File "pylab.pyc", line 1, in <module>
File "matplotlib\pylab.pyc", line 259, in <module>
File "matplotlib\pyplot.pyc", line 94, in <module>
ImportError: No module named backends

Я не знаю много о бэкендах, я также пытался ничего не исключать из файла Setup.py, но я получаю ту же ошибку: "Ни один модуль не назван бэкэндами"

1 Ответ

0 голосов
/ 22 марта 2012

Я решил немного изменить файл setup.py, используемый для создания исполняемого файла:

from distutils.core import setup
import py2exe


# We need to import the glob module to search for all files.
import glob

# We need to exclude matplotlib backends not being used by this executable.  You may find
# that you need different excludes to create a working executable with your chosen backend.
# We also need to include include various numerix libraries that the other functions call.

opts = {
  'py2exe': { "includes" : ["matplotlib.backends.backend_tkagg"],

                'excludes': ['_gtkagg', '_tkagg', '_agg2', '_cairo', '_cocoaagg', "matplotlib.numerix.fft","sip", "PyQt4._qt",
                              "matplotlib.backends.backend_qt4agg",
                               "matplotlib.numerix.linear_algebra", "matplotlib.numerix.random_array",

                             '_fltkagg', '_gtk','_gtkcairo' ],
                'dll_excludes': ['libgdk-win32-2.0-0.dll',
                                 'libgobject-2.0-0.dll']
              }
       }

# Save matplotlib-data to mpl-data ( It is located in the matplotlib\mpl-data
# folder and the compiled programs will look for it in \mpl-data
# note: using matplotlib.get_mpldata_info
data_files = [(r'mpl-data', glob.glob(r'C:\Python26\Lib\site-packages\matplotlib\mpl-data\*.*')),
                    # Because matplotlibrc does not have an extension, glob does not find it (at least I think that's why)
                    # So add it manually here:
                  (r'mpl-data', [r'C:\Python26\Lib\site-packages\matplotlib\mpl-data\matplotlibrc']),
                  (r'mpl-data\images',glob.glob(r'C:\Python26\Lib\site-packages\matplotlib\mpl-data\images\*.*')),
                  (r'mpl-data\fonts',glob.glob(r'C:\Python26\Lib\site-packages\matplotlib\mpl-data\fonts\*.*'))]

# for console program use 'console = [{"script" : "scriptname.py"}]
setup(windows=[{"script" : "test.py"}], options=opts,   data_files=data_files)
...