py2exe:编译的Python Windows应用程序赢得';由于DLL的原因,无法运行

py2exe:编译的Python Windows应用程序赢得';由于DLL的原因,无法运行,python,wxpython,py2exe,Python,Wxpython,Py2exe,我承认我对Python非常陌生,我还不知道自己在做什么。最近,我使用Python2.6.2和Wxpython2.8创建了一个非常小的Windows应用程序。而且效果很好;我很高兴它能正常工作。通常我的意思是,当我通过Python解释器直接调用它时,如下所示: > python myapp.py c:\My App\MyApp.exe c:\My App\Microsoft.VC90.CRT\Microsoft.VC90.CRT.manifest c:\My App\Microsoft.V

我承认我对Python非常陌生,我还不知道自己在做什么。最近,我使用Python2.6.2和Wxpython2.8创建了一个非常小的Windows应用程序。而且效果很好;我很高兴它能正常工作。通常我的意思是,当我通过Python解释器直接调用它时,如下所示:

> python myapp.py
c:\My App\MyApp.exe
c:\My App\Microsoft.VC90.CRT\Microsoft.VC90.CRT.manifest
c:\My App\Microsoft.VC90.CRT\msvcr90.dll
然而,我想更进一步,把它编译成一个独立的可执行文件。因此,我遵循了wxPython wiki,它利用py2exe。起初,它在命令行中给了我错误,说MSVCR90.dll丢失了。然后我将MSVCR90.dll复制到我的Python\DLLs文件夹中。这看起来像是它修复了它,因为它成功地完成了它需要做的事情。它确实以一个快速警告结束了,程序依赖于一些DLL文件,我可能需要也可能不需要分发它们

因此,我导航到py2exe创建的dist文件夹,并尝试运行我的可执行文件。但试图打开它只会弹出一个错误对话框,上面写着:

This application failed to start because MSVCR90.dll was not found.
Re-installing the application may fix this problem.

所以我继续把MSVCR90.dll复制到这个dist文件夹中。但这并没有奏效。然后我将其复制到WINDOWS\system32目录中。那也没用。我需要做些什么才能让它正常工作?

我相信安装将正确安装您需要的DLL。

您不能只复制msvcr*.DLL-它们需要使用并行程序集的规则进行设置。正如Sam所指出的,您可以通过安装可再发行包来实现这一点,或者只要遵守规则,您也可以将它们与可执行文件放在一起

见“部署VisualC++库DLL作为私有程序集”一节:详细说明,但基本上您的应用程序看起来如下:

> python myapp.py
c:\My App\MyApp.exe
c:\My App\Microsoft.VC90.CRT\Microsoft.VC90.CRT.manifest
c:\My App\Microsoft.VC90.CRT\msvcr90.dll

这样做的一个好处是,非管理员用户可以使用您的应用程序(我相信您需要是管理员才能通过可再发行的安装程序安装运行时)。而且不需要任何安装程序-您只需将文件复制到PC上,一切正常。

这是Vista的功能吗?我遇到了一个类似的问题(MSVCP71.DLL在启动py2exe应用程序时报告丢失),只是将它放在与.exe相同的目录中修复了它(至少在XP上)@卢珀:我相信msvcr80附带了新规则。这是另一个问题的重复,有一个更完整的讨论:
有一天StackOverflow可能会足够信任我,足以将其标记为重复。