py2exe-生成单个可执行文件
我以为我听说py2exe可以做到这一点,但我从来没有想过。有人成功做到了吗?我可以看到setup.py文件以及使用的哪些命令行选项吗?
基本上,我在考虑它给我一个可执行文件,该文件执行诸如将自身解压缩到/ temp并运行的操作。
解决方案
不,就我们之后只有一个文件而言,它没有给我们一个可执行文件,但是我们有一个目录,其中包含运行程序所需的所有文件,包括exe文件。
我今天刚刚写了这个setup.py。我们只需要调用python setup.py py2exe
。
PyInstaller将创建一个没有依赖关系的.exe文件。使用--onefile
选项。它通过将所有需要的共享库打包到可执行文件中,然后在运行之前解压缩它们来完成此操作,正如我们所描述的那样(编辑:py2exe也具有此功能,请参见minty的答案)
我使用的是svn的PyInstaller版本,因为最新版本(1.3)有点过时了。对于依赖于PyQt,PyQwt,numpy,scipy等应用程序的应用来说,它的运行情况非常好。
我最近使用py2exe创建了一个用于后期审阅的可执行文件,用于将审阅发送到ReviewBoard。
这是我使用的setup.py
from distutils.core import setup import py2exe setup(console=['post-review'])
它创建了一个目录,其中包含exe文件和所需的库。我认为不可能使用py2exe来获取单个.exe文件。如果需要,首先需要使用py2exe,然后使用某种形式的安装程序来制作最终的可执行文件。
需要注意的一件事是,我们在应用程序中使用的任何egg文件都需要解压缩,否则py2exe不能包含它们。 py2exe文档中对此进行了介绍。
使用py2exe进行此操作的方法是在setup.py文件中使用bundle_files选项。对于单个文件,我们需要将bundle_files
设置为1,将'compressed`设置为True,并将zipfile选项设置为None。这样,它会创建一个压缩文件以便于分发。
这是直接从py2exe网站引用的bundle_file选项的更完整说明*
Using "bundle_files" and "zipfile" An easier (and better) way to create single-file executables is to set bundle_files to 1 or 2, and to set zipfile to None. This approach does not require extracting files to a temporary location, which provides much faster program startup. Valid values for bundle_files are: 3 (default) don't bundle 2 bundle everything but the Python interpreter 1 bundle everything, including the Python interpreter If zipfile is set to None, the files will be bundle within the executable instead of 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, )
就像其他海报提到的那样,py2exe将生成一个可执行文件和一些要加载的库。我们还可以将一些数据添加到程序中。
下一步是使用安装程序,将所有这些程序打包到一个易于使用的可安装/不可安装程序中。
我使用InnoSetup(http://www.jrsoftware.org/isinfo.php)已经有好几年了,并且用于商业程序,所以我衷心推荐它。
我被告知bbfreeze将创建一个文件.EXE,并且比py2exe更新。
如前所述,我们应该创建一个安装程序。即使也可以通过将bundle_files选项设置为1并将zipfile关键字参数设置为None来让py2exe将所有内容捆绑到一个可执行文件中,但我不建议PyGTK应用程序这样做。
这是因为GTK +试图从其加载目录中加载其数据文件(本地,主题等)。因此,我们必须确保可执行文件的目录还包含GTK +使用的库以及GTK +安装中的目录lib,share等。否则,在未在系统范围内安装GTK +的计算机上运行应用程序时会遇到问题。
有关更多详细信息,请阅读我的PyGTK应用程序py2exe指南。它还说明了如何捆绑除GTK +之外的所有内容。