py2exe - 生成单个可执行文件
我记得听说过py2exe可以做到这个,但我一直没搞明白。有没有人成功实现过这个?能不能让我看看你们的setup.py文件,还有你们用的命令行选项?
简单来说,我想要的是一个可以生成单个可执行文件的工具,这个文件可以像解压一样,把自己解压到/temp目录,然后运行。
8 个回答
正如其他人提到的,py2exe
可以生成一个可执行文件和一些需要加载的库。你还可以添加一些数据到你的程序中。
接下来的步骤是使用一个安装程序,把这些东西打包成一个简单易用的可安装/可卸载的程序。
我已经使用过 InnoSetup 很多年了,效果很好,尤其是用于商业程序,所以我非常推荐它。
要使用py2exe实现这个功能,你需要在setup.py文件中使用bundle_files选项。如果你想打包成一个单独的文件,就把bundle_files
设置为1,把compressed
设置为True,并且把zipfile选项设置为None。这样就能创建一个压缩文件,方便分发。
下面是关于bundle_file选项的更详细说明,直接引用自py2exe网站*
使用“bundle_files”和“zipfile”
创建单文件可执行程序的一个更简单(也更好的)方法是将bundle_files设置为1或2,并将zipfile设置为None。这样做不需要将文件提取到临时位置,因此程序启动速度会更快。
bundle_files的有效值有:
- 3(默认)不打包
- 2 打包所有内容,但不包括Python解释器
- 1 打包所有内容,包括Python解释器
如果zipfile设置为None,文件将会被打包在可执行文件内部,而不是放在library.zip中。
下面是一个setup.py的示例:
from distutils.core import setup
import py2exe, sys, os
sys.argv.append('py2exe')
setup(
options = {'py2exe': {'bundle_files': 1, 'compressed': True}},
windows = [{'script': "single.py"}],
zipfile = None,
)
PyInstaller 可以创建一个不需要其他文件的单独 .exe 文件;只需使用 --onefile
这个选项。它的工作原理是把所有需要的共享库打包到这个可执行文件里,然后在运行之前再解压出来,就像你所描述的那样(编辑:py2exe 也有这个功能,见 minty 的回答)
我使用的是从 svn 下载的 PyInstaller 版本,因为最新的发布版本(1.3)有点过时了。这个版本在一个依赖于 PyQt、PyQwt、numpy、scipy 等库的应用上运行得非常好。