Py2Exe и MatPlotLib: график не появится - PullRequest
2 голосов
/ 29 ноября 2011

У меня есть рабочий код Python 2.6 с использованием matplotlib, и я хотел бы получить из него работающий exe.У меня возникают проблемы с выполнением этого:

Изначально я получил ошибку за отсутствующий файл MSCVP90.dll, но я скачал его и извлек .dll в рабочий каталог, и эта ошибка исчезла.

У меня были некоторые ошибки, связанные с отсутствующим модулем tkagg, но я добавил это к исключениям и отредактировал файл matplotlibrc по умолчанию вместо WXAgg, и он исчез.

exe работает нормально, но в конце кодаон должен отображать сюжет, а это не так.Сюжет является основной целью этой программы, поэтому было бы неплохо иметь это.

Просто запуск кода Python приводит к хорошему сюжету.

Может кто-нибудь предложить какие-либо предложения или идеи?

Вот мой setup.py:

from distutils.core import setup
import py2exe
import matplotlib
matplotlib.use('wxagg') # overrule configuration
import pylab


setup(
    console=['test1.py'],
    options={
             'py2exe': {
                        'excludes': ['_gtkagg', '_tkagg', 'backend_tkagg'],
                       }
            },
    data_files=matplotlib.get_py2exe_datafiles(),

)

Заранее спасибо!



Хорошо, я использовал pyinstaller и вернул файл matplotlibrc обратно вего первоначальное состояние, где TkAgg был по умолчанию, и все работает на моем компьютере, но когда я пытаюсь запустить его на другом компьютере, график все равно не появляется ...

Я могу использовать pyinstaller для компиляции exe-файла изочень простой код matplotlib, например:

from pylab import *
t = arange(0.0, 2.0, 0.01)
s = sin(2*pi*t)
plot(t, s, linewidth=1.0)
show()

Но когда я беру этот exe на другой компьютер, он не работает.

У кого-нибудь еще была подобная проблема?Есть идеи?Спасибо

Ответы [ 2 ]

1 голос
/ 03 декабря 2011

Если исполняемый файл запускается на вашем компьютере, но не работает на другом компьютере, наиболее вероятной проблемой является отсутствие одного или нескольких необходимых dll, которые py2exe не упаковывает из-за проблем с лицензией.Очень часто это dll

gdiplus.dll
msvcp90.dll

Ищите их на компьютере, где работает exe-файл, и копируйте их на неисправный компьютер.Если exe по-прежнему не работает, проверьте другие DLL.Py2exe дает список бинарных зависимостей:

*** binary dependencies ***
Your executable(s) also depend on these dlls which are not included,
you may or may not need to distribute them.

Make sure you have the license if you distribute any of them, and
make sure you don't distribute files belonging to the operating system.

   OLEAUT32.dll - C:\Windows\system32\OLEAUT32.dll
   USER32.dll - C:\Windows\system32\USER32.dll
   gdiplus.dll - gdiplus.dll
   SHELL32.dll - C:\Windows\system32\SHELL32.dll
   ole32.dll - C:\Windows\system32\ole32.dll
   RPCRT4.dll - C:\Windows\system32\RPCRT4.dll
   WSOCK32.dll - C:\Windows\system32\WSOCK32.dll
   WINMM.dll - C:\Windows\system32\WINMM.dll
   ADVAPI32.dll - C:\Windows\system32\ADVAPI32.dll
   msvcrt.dll - C:\Windows\system32\msvcrt.dll
   WS2_32.dll - C:\Windows\system32\WS2_32.dll
   WINSPOOL.DRV - C:\Windows\system32\WINSPOOL.DRV
   GDI32.dll - C:\Windows\system32\GDI32.dll
   IMM32.dll - C:\Windows\system32\IMM32.dll
   MSVCP90.dll - C:\Python26\programas\test\MSVCP90.dll
   KERNEL32.dll - C:\Windows\system32\KERNEL32.dll
   ntdll.dll - C:\Windows\system32\ntdll.dll
   COMCTL32.dll - C:\Windows\system32\COMCTL32.dll
   COMDLG32.dll - C:\Windows\system32\COMDLG32.dll
   VERSION.dll - C:\Windows\system32\VERSION.dll

C:\Python26\programas\test>

Наконец, я успешно получил функциональную программу matplotlib, исполняемую с py2exe.Мне нужно было только добавить 'includes' в setup.py и установить WXAgg в качестве бэкенда в matplotlib.rc (с Tk у меня возникла та же проблема, что вы описали ...)Чтобы это работало, я должен был установить WXAgg в исходном файле matplotlib.rc (в папке matplotlib / mpl-data).Это тот, который импортирует py2exe (а не тот, который находится в каталоге конфигурации пользователя matplotlib).Чтобы быть уверенным, проверьте файл .rc в вашей папке dist.

from distutils.core import setup
import py2exe
import matplotlib

setup(
    console=['test1.py'],
    options={
             'py2exe': {
                        'excludes': ['Tkconstants','Tkinter', 'tcl'],
                        'includes': ['matplotlib.backends.backend_wxagg'],
                       }
            },
    data_files=matplotlib.get_py2exe_datafiles(),

)
0 голосов
/ 07 апреля 2015

Сегодня я потерял один день работы с этим, поэтому ...

Решение состоит в том, чтобы включить простоту модуля "FileDialog", потому что модуль "шесть" использует его.В частности, я решил свою проблему, включив six, dateutil, FileDialog, matplotlib, pylab, matplotlib.backends.backend_tkagg и другие.

Удачи!

...