我对Python一般都很陌生,但我在Python 2.6/wxPython 2.8中创建了一个应用程序,当我通过Python运行时它非常有效.但我想更进一步,并能够将其部署为Windows可执行文件,所以我一直在尝试py2exe.但是我无法让它发挥作用.它总是会编译一个exe,但是当我真的尝试运行它时会发出一些神秘的错误消息.起初他们是简单的消息,说它找不到某些DLL,但即使给它所需的所有DLL,它现在返回:
The application failed to initialize properly (0xc0000142). Click OK to terminate the application.
所以我打破了局面,只是用wxPython制作了一个非常非常简单的应用程序,看看它是否有用,或者我的原始应用程序的一些更复杂的功能是否会妨碍.但即便是我的简单测试也返回了相同的错误.这是简单测试脚本的代码:
import wx class MainWindow(wx.Frame): def __init__(self, parent, id, title): wx.Frame.__init__(self, parent, wx.ID_ANY, title, style=wx.DEFAULT_FRAME_STYLE ^ wx.MAXIMIZE_BOX) panel = wx.Panel(self, -1, style = wx.TAB_TRAVERSAL | wx.CLIP_CHILDREN | wx.FULL_REPAINT_ON_RESIZE) main_sizer = wx.BoxSizer(wx.VERTICAL) testtxt = wx.StaticText(panel, -1, label='This is a test!') main_sizer.Add(testtxt, 0, wx.ALIGN_CENTER) panel.SetSizerAndFit(main_sizer) self.Show(1) return app = wx.PySimpleApp() frame = MainWindow(None, -1, 'Test App') app.MainLoop()
这是我使用的py2exe安装脚本:
#!/usr/bin/python from distutils.core import setup import py2exe manifest = """""" setup( windows = [ { "script": "testme.py", "icon_resources": [(1, "testme.ico")], "other_resources": [(24,1, manifest)] } ], data_files=["testme.ico"] Test Program
)
然后我运行python setup.py py2exe
,它生成EXE文件,警告一些DLL文件(我随后将其复制到dist目录),但是当我尝试运行EXE时,我得到上面引用的错误.
请注意,Visual C++ 2008 Redistributable软件包的更高版本:SP1.但是,SP1和早期版本都不会将DLL安装到路径中.正如下载页面所说(我的重点):
该软件包安装C Runtime(CRT),标准C++,ATL,MFC,OpenMP和MSDIA库的运行时组件.对于支持并排侧部署模型库(CRT,SCL,ATL,MFC,OpenMP的)它们安装到本机程序集缓存,也称为WinSxS文件夹,在支持并排侧组件的Windows操作系统版本.
您可能会在%WINDIR%\WinSxS
文件夹中找到这些文件,而不是在路径中.我认为您需要做的是将相关DLL(找到%WINDIR%\WinSxS\Manifests
)的清单信息合并到您的文件夹中setup.py
.我添加了以下部分:
紧接在现有
部分之后,重建exe:它运行没有问题.注意:根据您安装的Visual C++文件的确切版本,上述信息可能不完全正确.看看你的系统上的清单和使用正确的version
,publicKeyToken
等等.
或者,看看这个答案,了解如何在应用程序中部署DLL(而不是假设它们已经存在于目标系统中).哦......我看到你问那个原始问题;-)