gpt4 book ai didi

python - 如何调试 py2exe 'application failed to initialize properly' 错误?

转载 作者:太空狗 更新时间:2023-10-29 21:33:04 26 4
gpt4 key购买 nike

总的来说,我对 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 = """
<?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"]

)

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

最佳答案

请注意,有更高版本的 Visual C++ 2008 Redistributable 软件包:SP1。但是,SP1 和更早的版本都没有将 DLL 安装到路径中。正如下载页面所说(我强调的):

This package installs runtime components of C Runtime (CRT), Standard C++, ATL, MFC, OpenMP and MSDIA libraries. For libraries that support side-by-side deployment model (CRT, SCL, ATL, MFC, OpenMP) they are installed into the native assembly cache, also called WinSxS folder, on versions of Windows operating system that support side-by-side assemblies.

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

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

紧接着现有的 <dependency> 部分,并重建了 exe:它运行没有问题。 注意:根据您安装的 Visual C++ 文件的确切版本,上述信息可能不完全正确。查看您系统上的 list 并使用正确的 versionpublicKeyToken 等。

或者,查看 this answer 以了解如何使用您的应用程序部署 DLL(而不是假设它们已经存在于目标系统上)。哦...我看到你问了原来的问题 ;-)

关于python - 如何调试 py2exe 'application failed to initialize properly' 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1153643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com