【问题标题】:Create Python EXE without MSVCP90.dll创建没有 MSVCP90.dll 的 Python EXE
【发布时间】:2012-04-21 02:11:49
【问题描述】:

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

谢谢!

【问题讨论】:

  • 你能把你的 exe dll 打包到 installer 中(比如 .msi 安装程序)吗?
  • 我对此很陌生,所以我不确定,可以吗?
  • 这个问题在py2exe官方文档中有详细介绍:py2exe.org/index.cgi/FrontPage

标签: python py2exe


【解决方案1】:

什么是 MSVCP90.dll

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

MSVCP90.dll 的用途

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

分发 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 导入目标机器的便捷方式。

【讨论】:

  • 对不起,我是新手,但我不知道该怎么做。你能提供一些帮助吗?
  • 我认为 VC 2008 运行时需要作为并行程序集分发。因此,您需要使用 VC 2008 可再发行包。
  • 本教程可能也很方便。它显示了如何从 VC9 中提取,如果你有的话...py2exe.org/index.cgi/Tutorial#Step5
【解决方案2】:

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

【讨论】:

  • 在哪里可以找到这个 DLL 的副本?
猜你喜欢
  • 2010-11-12
  • 1970-01-01
  • 2010-12-08
  • 2013-01-26
  • 1970-01-01
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多