py2exe打包wxPython应用程序抱怨神秘DLL

时间:2012-03-30 04:05:03

标签: python wxpython py2exe

当我使用最基本的“配置”py2exe打包最小的Python 2.7.1 / wxPython程序(Hello World)并在原始的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.

运行py2exe末尾列出的所有DLL都存在于gdiplus.dll的目标VM上,我手动复制到dist路径中的一些wxPython库。

文字和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生成的程序运行失败是通过运行本地驱动器(在VM上)而非网络共享来解决的。我没有测试是否也修复了py2exe'二进制'。

3 个答案:

答案 0 :(得分:2)

使用cx_Freeze并快乐

答案 1 :(得分:1)

环境:

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可能遇到的任何问题。

答案 2 :(得分:0)

您可以使用http://www.dependencywalker.com/找出缺少的DLL并手动添加它。