【问题标题】:py2exe including MSVC DLLs in the .exepy2exe 包括 .exe 中的 MSVC DLL
【发布时间】:2010-09-15 22:39:03
【问题描述】:

当使用 py2exe 通过 wxPython 分发 Python 应用程序时,通常需要一些 MSVC DLL 来使 .exe 在新安装的机器上工作。特别是,两个最常见的 DLL 是 msvcp71.dll 和 msvcr71.dll

前者可以使用this tip 包含在.exe 中。但是,后者只是由 py2exe 放在 dist 目录中,而不是放在可执行文件中,即使我特别要求包含它。

知道如何让 py2exe 将两者都包含在 .exe 中吗?

【问题讨论】:

    标签: python dll py2exe


    【解决方案1】:

    那它不会启动失败吗?您希望msvcr71.dll 与 exe 位于同一目录中,以便库加载器能够找到并将其链接到应用程序的内存映射中。

    它是基本操作所必需的,所以你不能让py2exe将它与其余的DLL一起解包。

    【讨论】:

    • 我认为您不了解 DLL 和 py2exe 的工作原理。 py2exe 将 DLL 捆绑到可执行文件中,然后在运行 Python 部分之前在运行时提取和加载它们。要执行提取,msvcr71.dll 需要已经存在。
    • 你的意思是py2exe创建的.exe文件需要msvcr71.dll从自身解压和加载DLL吗?
    【解决方案2】:

    py2exe 无法做到这一点。您可以包装 py2exe(有 an example on the wiki 显示如何使用 NSIS 执行此操作);如果不能使用 NSIS 或 InnoSetup,您可以构建自己的包装器。

    或者,如果您确定您的用户将安装兼容的 msvcr71.dll 副本(IIRC Vista 或 XP SP2 用户),那么您可以不包含它而侥幸逃脱。也许更有用的是,如果您使用 Python 2.3(或更早版本),那么 Python 会链接到 msvcr.dll 而不是 msvcr71.dll,并且任何 Windows 用户都会安装它,所以您不必担心。

    【讨论】:

    • 问题出在 wxPython,它确实链接到 msvcr71.dll
    • 如果你在 wxPython 版本中向后退得足够远,你会发现一个链接到 msvcr.dll 而不是 msvcr71.dll 的链接,就像 Python 一样。所有这些似乎都不值得去做,但我当然不知道你的情况。
    【解决方案3】:

    是的,py2exe 可以做到这一点。 View this link.如果您使用的是python2.7,请将“msvcr71”替换为“msvcp90”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多