8

我正在尝试使用 Py2Exe 将 python 程序(使用 wxPython)带到 Windows exe,但有一个关于 MSVCP90.dll 的错误。在读取py2exe 无法在 StackOverflow 上生成可执行文件后,它说我需要下载此文件。但是,它还说所有目标用户都必须下载此文件。这对我的用户(主要是不知道如何下载文件的企业客户)来说将是一个巨大的不便,那么有没有办法将其与程序打包?

谢谢!

4

2 回答 2

10

什么是 MSVCP90.dll

MSVCP90.dll 是多线程、动态的 Visual Studio 2008 C 运行时库。通常你的应用程序应该打包 MSVCP90.dll,除非你确定目标机器有匹配的 CRT。您可以使用任何打包软件来打包必要的 DLL 和您的软件并分发它。

MSVCP90.dll 的用途

您可能想知道为什么需要这个奇怪的 dll?好吧,CRT 对 python 来说并不是什么新鲜事。所有基于 C 的应用程序都严重依赖于 C 库函数。标准 C 库函数的所有实现,例如(malloc、strcpy ..)等等,都是在这些库中实现的。有不同的种类,具体的MSDN 网站上有更多详细信息。 在此处输入图像描述

分发 MSVCP90.dll

在分发 CRT 时,您应该了解,根据您使用的 CRT,带有 CRT 名称后缀的版本号会有所不同。例如 MSVCP90.DLL 是 Visual Studio 2008 中的 CRT。一台机器可以包含多个 CRT,或者在应用程序安装路径的系统文件夹中。

如果您计划打包您的应用程序,则需要重新验证您的应用程序使用哪个 CRT 版本。包装错误的 CRT 或使用一个可能会导致不希望的和不确定的效果。一般来说,您的 Python 安装使用的 CRT 应该与您应该打包的 CRT 相同。

确定正确的 MSVCRT

由于不同版本的 CRT 版本不同,因此很难确定应该打包哪个 CRT。如果您有一个正在运行的应用程序(可执行文件),您可以使用dependencywalker来确定正确的版本。右键单击任何 DLL,然后单击属性,它将显示从中选择该 DLL 的位置。 在此处输入图像描述

打包您的应用程序。

您可以尝试使用PyInstaller来打包您的应用程序。这将是一种将 DLL 导入目标机器的便捷方式。

于 2012-04-08T06:24:23.533 回答
0

您必须在与您的 exe 文件相同的文件夹中使用该 dll 交付您的应用程序。

于 2012-04-08T06:16:03.677 回答