py2exe - 如何减少dll依赖?

时间:2011-03-08 01:00:05

标签: python windows dll dependencies py2exe

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

2 个答案:

答案 0 :(得分:3)

  

当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。请务必阅读该页面,包括免责声明。

答案 1 :(得分:2)

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