Упакованное в py2exe приложение wxPython жалуется на загадочную DLL - PullRequest
1 голос
/ 30 марта 2012

Когда я упаковываю минимальную программу Python 2.7.1 / wxPython (Hello World) с py2exe с самой простой «конфигурацией» и запускаю ее на нетронутой виртуальной машине Windows 7 x32, сохраняю «Microsoft Visual C ++ 2008 Redistributable Package (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's" оба отлично работают.

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


Тот же процесс с использованием 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 'бинарный'.

Ответы [ 3 ]

2 голосов
/ 30 марта 2012

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

1 голос
/ 02 апреля 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.

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

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

...