py2exe - 如何减少dll依赖?
我的程序需要用到一些特定的文件,比如USER32.dll、SHELL32.dll、ADVAPI32.dll、WS2_32.dll、GDI32.dll和KERNEL32.dll。这些文件都在系统的system32文件夹里。我想知道有没有办法把这些文件包含到我的程序里,这样它就可以在所有的Windows电脑上运行?或者说,这些文件在所有Windows安装中都是已经存在的?
2 个回答
2
我不太确定py2exe的情况,不过cx_Freeze是一个类似的工具,而且它还在不断更新。你可能需要使用bin-includes
这个选项来列出你的依赖项,但默认情况下,它会生成一个包含所有依赖的单一.exe
文件。
3
当py2exe遇到一个应用程序需要的DLL文件时,它会根据一些标准来决定是否把这个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网站上的一个页面。确保你阅读那个页面,包括免责声明。