Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何调试py2exe';应用程序未能正确初始化';错误?_Python_Wxpython_Py2exe - Fatal编程技术网

Python 如何调试py2exe';应用程序未能正确初始化';错误?

Python 如何调试py2exe';应用程序未能正确初始化';错误?,python,wxpython,py2exe,Python,Wxpython,Py2exe,一般来说,我对Python非常陌生,但我在Python2.6/Wxpython2.8中制作了一个应用程序,当我在Python中运行它时,它可以完美地工作。但我想更进一步,能够将其部署为Windows可执行文件,所以我一直在尝试py2exe。但我一直没能让它工作。它总是编译一个exe,但当我实际尝试运行它时,它会发出一些神秘的错误消息。起初,它们只是简单的消息,说它找不到某些DLL,但即使在提供了它想要的所有DLL之后,它现在仍返回以下内容: The application failed to i

一般来说,我对Python非常陌生,但我在Python2.6/Wxpython2.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 = """
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
    version="0.64.1.0"
    processorArchitecture="x86"
    name="Controls"
    type="win32"
/>
<description>Test Program</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="X86"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>
"""

setup(
    windows = [
        {
            "script": "testme.py",
            "icon_resources": [(1, "testme.ico")],
            "other_resources": [(24,1, manifest)]
        }
    ],
  data_files=["testme.ico"]
#/usr/bin/python
从distutils.core导入设置
导入py2exe
manifest=“”
测试程序
"""
设置(
窗口=[
{
“脚本”:“testme.py”,
“图标资源”:[(1,“testme.ico”)],
“其他资源”:[(24,1,清单)]
}
],
数据文件=[“testme.ico”]
)


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

我以前使用过py2exe,从未遇到过这样的情况

然而,似乎缺少依赖项是您的问题

打包的程序是否在您的机器上工作,但在其他机器上不工作

如果是这样,请在两台机器上运行dependency(dependency walker)中的打包应用程序,并与之进行比较,以确定哪些包没有包括在内


祝你好运

你不应该复制它抱怨的所有.dll!其中一些文件是Windows系统文件,它们位于系统的正确位置。如果将它们复制到dist文件夹中,则无法正常工作

通常,您只希望复制特定于应用程序的.dll。不是系统。在某些情况下,您可能需要在安装程序中附带vcredist_xx.exe,以便在系统上获取MSVC运行时。你不应该试图自己“原始”发送那些.dll文件。使用redist软件包,它将节省您的时间和挫折感


您是否尝试按照此处的说明进行操作:?

您确定提供的DLL与wxPython使用的DLL相同吗


wxpython使用的vc++DLL可以从wxpython下载页面下载。你尝试了这些吗?

< P>注意到Visual C++ 2008可重分发包的后期版本:但是,SP1和早期版本都没有将DLL安装到路径中。正如下载页面所说(我的重点):

此包安装运行时 C运行时(CRT)的组件, 标准C++,ATL,MFC,OpenMP MSDIA图书馆。对于那些 支持并行部署模型 (CRT、SCL、ATL、MFC、OpenMP)它们是 已将安装到本机程序集中 缓存,也称为WinSxS文件夹,位于 Windows操作系统的版本 支撑并排的组件

您可能会在
%WINDIR%\WinSxS
文件夹中找到这些文件,而不是在路径中。我认为您需要做的是将相关DLL的清单信息(在
%WINDIR%\WinSxS\Manifests
中找到)合并到
setup.py
中。我 增加了以下部分:

<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.VC90.CRT"
            version="9.0.30729.4918"
            processorArchitecture="X86"
            publicKeyToken="1fc8b3b9a1e18e3b"
            language="*"
        />
    </dependentAssembly>
</dependency>


了解如何在应用程序中部署DLL(而不是假设目标系统上已经存在DLL)。哦我看到你问了那个原始问题;-)

“打包程序”是指生成的exe吗?或者直接通过Python运行脚本?不管怎样,如果我从命令行运行
python testme.py
,效果很好。但通过py2exe运行它的意义在于,我希望能够将它部署到没有安装Python的计算机上。但现在,当我用py2exe.Packaged Program=Generated Exe编译它时,它在任何计算机上都不起作用,不管是不是Python。exe应该在生成它的计算机上正常运行。使用dependency walker在该计算机上运行它,以查看加载的库的显式列表。然后转过身来,在出现故障的机器上执行此操作。差异会给你一个解决方案。这一直是我的观点。。。打包的程序在生成它的机器上运行不正常。这就是标题。这个问题对我来说并不完全清楚。不过,您可以使用依赖于应用程序的方法查看未成功加载的内容。-1:可怕的问题标题。也许这应该是:“如何调试py2exe‘应用程序未能正确初始化’错误?”对于标题S.Lott,我感到抱歉。它现在已被更改。当我尝试在不复制dll的情况下运行EXE时,我实际收到以下错误:由于未找到MSVCR90.dll,此应用程序无法启动。重新安装应用程序可能会解决此问题。然后我将msvcr90.dll复制到dist文件夹,并得到上面提到的“应用程序未能正确初始化”错误。这个DLL来自VC++包。你也安装了Visual C++可重分配包吗?是的,我特别是在我发布这个问题之前安装了。我试过了这些方向,然后就发生了什么。1.尝试运行
python setup.py py2exe--icon=SmallApp.ico
,出现以下错误:
error:option--icon无法识别
。2.尝试运行
python setup.py py2exe
,出现以下错误:
error:error in setup.cfg:命令“py2exe”没有这样的选项“version\u legalcopyright”
。3.已删除setup.cfg文件并尝试重新运行