py2exe:编译的Python Windows应用因DLL无法运行
我得承认,我对Python还很陌生,很多事情都不太懂。最近,我用Python 2.6.2和wxPython 2.8创建了一个非常简单的Windows应用程序。它运行得很好,我对它的表现很满意。这里的“正常”是指我直接通过Python解释器来运行它,像这样:
> python myapp.py
不过,我想更进一步,把它编译成一个独立的可执行文件。所以我按照wxPython维基上的这些说明,使用了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目录下,结果还是不行。我该怎么做才能让这个程序正常运行呢?
2 个回答
我觉得安装这个 微软的C++运行库包,可以正确地安装你需要的DLL文件。
你不能直接复制 msvcr*.dll 文件,因为它们需要按照特定的规则进行设置,这些规则叫做“并行程序集”。你可以通过安装 Sam 提到的可再分发包来做到这一点,或者只要遵循规则,就可以把这些文件放在你的可执行文件旁边。
想了解更多细节,可以查看这里的“将 Visual C++ 库 DLL 作为私有程序集部署”部分:如何使用 XCopy 部署,基本上你的应用程序看起来是这样的:
c:\My App\MyApp.exe
c:\My App\Microsoft.VC90.CRT\Microsoft.VC90.CRT.manifest
c:\My App\Microsoft.VC90.CRT\msvcr90.dll
这样做的一个好处是,非管理员用户也可以使用你的应用程序(我相信你需要是管理员才能通过可再分发安装程序安装运行时)。而且不需要任何安装程序——你只需将文件复制到电脑上,就可以正常使用了。