有没有办法从 python 脚本创建一个独立的 .exe。使用 py2exe 生成的可执行文件只能使用 pythonXX.dll 运行。我想获得一个完全独立的 .exe,它不需要安装 python 运行时库。它看起来像一个链接问题,但使用静态库而不是动态库,并且应用条带以删除未使用的符号也很有用。
任何的想法 ?
谢谢。
亚历山德罗
您可以在最新版本的 py2exe 中执行此操作...
只需在文件中添加类似于以下代码的setup.py
内容(关键部分是 'bundle_files': 1)。
要在安装中包含您的 TkInter 包,请使用“包含”键。
distutils.core.setup(
windows=[
{'script': 'yourmodule.py',
'icon_resources': [(1, 'moduleicon.ico')]
}
],
zipfile=None,
options={'py2exe':{
'includes': ['tkinter'],
'bundle_files': 1
}
}
)
由于 Windows 的动态链接器的工作方式,如果您使用 .pyd 或 .dll Python 模块,您将无法使用静态库;Windows 中加载的 DLL 不会自动与可执行文件共享其符号空间,因此需要一个包含 Python 符号的单独 DLL。
如果您拥有单个可执行文件的目的是简化下载/发送电子邮件等,我已经通过使用Inno Setup捆绑 py2exe 输出解决了这个问题。这实际上比拥有单个可执行文件要好,因为与其提供可以拖放到某个目录中的可执行文件,一个表现良好的 Windows 应用程序将提供一个卸载程序,显示在“添加/删除程序”小程序等中。Inno 处理所有这是给你的。
另一种解决方案是使用 python 创建一个 exe,并在其中安装所有依赖项,包括 python.dll。包装器中有一点魔力,但它确实有效。详情在这里:
http://code.google.com/p/pylunch/downloads/detail?name=PyLunch-0.2.pdf
这不是最好的方法,但您可以考虑使用包含 .exe 和 .dll 文件的可执行 SFX 存档,并将其设置为在双击时执行您的 .exe 文件。