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