当前位置:  开发笔记 > 编程语言 > 正文

如何调试py2exe'应用程序无法正确初始化'错误?

如何解决《如何调试py2exe'应用程序无法正确初始化'错误?》经验,为你挑选了1个好方法。

我对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 = """



Test Program

    
        
    


"""

setup(
    windows = [
        {
            "script": "testme.py",
            "icon_resources": [(1, "testme.ico")],
            "other_resources": [(24,1, manifest)]
        }
    ],
  data_files=["testme.ico"]

)

然后我运行python setup.py py2exe,它生成EXE文件,警告一些DLL文件(我随后将其复制到dist目录),但是当我尝试运行EXE时,我得到上面引用的错误.



1> Vinay Sajip..:

请注意,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(而不是假设它们已经存在于目标系统中).哦......我看到你问那个原始问题;-)


查看我之前提到的Manifests目录,了解您需要的特定清单.
推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有