【问题标题】:py2exe - How do I reduce dll dependencies?py2exe - 如何减少 dll 依赖项?
【发布时间】:2011-03-08 14:58:21
【问题描述】:

我的程序依赖于 USER32.dll、SHELL32.dll、ADVAPI32.dll WS2_32.dll、GDI32.dll 和 KERNEL32.dll。所有都在 system32 文件夹中。有什么方法可以将这些包含在我的程序中,以便它可以在所有 Windows 计算机上运行?还是这些 dll 已经可以在所有 Windows 安装中找到?

【问题讨论】:

  • 我无语了。我真的不说话了。
  • 它们都是 Windows 的基础组件。个别功能可能只在某些平台上可用,但我确信 py2exe 尽其所能在所有平台上工作(至少回到 XP)。
  • @IgnacioVazquez-Abrams 你能详细说明你的无语吗?给我们一些知识......

标签: python windows dll dependencies py2exe


【解决方案1】:

当 py2exe 遇到应用程序需要的 DLL 文件时,它会使用各种标准决定是否将 DLL 文件包含在分发目录中。通常,如果它认为它们属于“系统”而不是“应用程序”,则它不包括 DLL。

您需要覆盖 py2exe 选择包含在结果包中的 DLL 的标准。下面展示了如何做到这一点

# setup.py
from distutils.core import setup
import py2exe,sys,os

origIsSystemDLL = py2exe.build_exe.isSystemDLL
def isSystemDLL(pathname):
        if os.path.basename(pathname).lower() in ("msvcp71.dll", "dwmapi.dll"):
                return 0
        return origIsSystemDLL(pathname)
py2exe.build_exe.isSystemDLL = isSystemDLL

这段代码和上面的引用取自 py2exe 网站上的a page。请务必阅读该页面,包括免责声明。

【讨论】:

    【解决方案2】:

    我不确定 py2exe,但 cx_Freeze 是一个类似的实用程序,正在积极更新。您可能需要使用bin-includes 选项来列出您的依赖项,但默认情况下它会创建一个包含依赖项的.exe 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-07
      • 2017-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多