Пакетное приложение wxPython py2exe жалуется на загадочную DLL

Когда я упаковываю минимальную программу Python 2.7.1 / wxPython (Hello World) с py2exe с самой базовой конфигурацией и запускаю ее на чистой виртуальной машине Windows 7 x32 с сохранением установленного распространяемого пакета Microsoft Visual C ++ 2008 (x86), я получаю бесполезная ошибка:

Z:\>z:\wxhello\wxhello.exe
Traceback (most recent call last):
  File "wxhello.py", line 1, in <module>
  File "wx\__init__.pyc", line 45, in <module>
  File "wx\_core.pyc", line 4, in <module>
  File "wx\_core_.pyc", line 12, in <module>
  File "wx\_core_.pyc", line 10, in __load
ImportError: DLL load failed: The system cannot find the file specified.

Все библиотеки DLL, перечисленные в конце запуска py2exe, существуют на целевой виртуальной машине, за исключением gdiplus.dll, некоторой библиотеки wxPython, которую я вручную скопировал в путь dist.

Текст и Tkinter Hello World работают нормально.

Что случилось? Могу ли я получить дополнительную полезную информацию по отладке?


Тот же процесс с использованием cx_Freeze дает немного другую ошибку:

Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\cx_Freeze\initscripts\Console.py", line 27, in <module>
  File "wxhello.py", line 1, in <module>
  File "C:\Python27\lib\site-packages\wx-2.8-msw-unicode\wx\__init__.py", line 45, in <module>
  File "C:\Python27\lib\site-packages\wx-2.8-msw-unicode\wx\_core.py", line 4, in <module>
  File "ExtensionLoader_wx__core_.py", line 12, in <module>
ImportError: DLL load failed: The system cannot find the file specified.

Обновлять:

Ошибка запуска созданной cx_Freeze программы была решена путем ее запуска с локального диска (на виртуальной машине), а не с общего сетевого ресурса. Я не проверял, исправляет ли это "двоичный" py2exe.


person Nick T    schedule 30.03.2012    source источник


Ответы (3)


Используйте cx_Freeze и будьте счастливы

person Ambyte    schedule 30.03.2012
comment
Как вы использовали cxFreeze? Я использую его для запуска командного файла, расположенного по адресу c:\Python27\Scripts\cxfreeze.bat. - person Fenikso; 30.03.2012
comment
@Fenikso, использующий либо это, и скрипт Python, использующий cx_Freeze setup(), оба имеют одинаковый результат - person Nick T; 31.03.2012

Окружающая обстановка:

OS: Windows-XP-5.1.2600-SP3
Python: 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)]
wxPython: 2.8.12.1 (msw-unicode)
cx_Freeze: 4.2.3

Источник:

import wx

class MainWindow(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)

        self.panel = wx.Panel(self)
        self.button = wx.Button(self.panel, label="Hello WX!")

        self.sizer = wx.BoxSizer()
        self.sizer.Add(self.button)

        self.panel.SetSizerAndFit(self.sizer)  
        self.Show()

app = wx.App(False)
win = MainWindow(None)
app.MainLoop()

Команда:

c:\Python27\Scripts\cxfreeze.bat hellowx.py

Работает без ошибок и создает следующие файлы в выходных данных каталога dist:

bz2.pyd
gdiplus.dll
hellowx.exe
python27.dll
unicodedata.pyd
wx._controls_.pyd
wx._core_.pyd
wx._gdi_.pyd
wx._misc_.pyd
wx._windows_.pyd
wxbase28uh_net_vc.dll
wxbase28uh_vc.dll
wxmsw28uh_adv_vc.dll
wxmsw28uh_core_vc.dll
wxmsw28uh_html_vc.dll

Это без проблем работает на Windows 7 Ultimate, Version 6.1, Build 7600 виртуальной машине.

Надеюсь, это поможет вам определить любые проблемы, которые могут возникнуть с вашей установкой или отсутствующей DLL.

person Fenikso    schedule 02.04.2012

Вы можете использовать http://www.dependencywalker.com/, чтобы узнать, какая DLL отсутствует, и добавить ее вручную. .

person lazy1    schedule 30.03.2012