共计 1998 个字符,预计需要花费 5 分钟才能阅读完成。
一、简介
py2exe 是一个将 python 脚本转换成 windows 上的可独立执行的可执行程序 (*.exe) 的工具,这样,你就可以不用装 python 而在 windows 系统上运行这个可执行程序。py2exe 已经被用于创建 wxPython,Tkinter,Pmw,PyGTK,pygame,win32com client 和 server, 和其它的独立程序。py2exe 是发布在开源许可证下的。
二、安装 py2exe
从 http://prdownloads.sourceforge.net/py2exe 下载并运行与你所安装的 Python 对应的 py2exe 版本的 installer,这将安装 py2exe 和相应的例子;这些例子被安装在 lib/site-packages/py2exe/samples 目录下。
三、py2exe 的用法
如 果你有一个名为 helloworld.py 的 python 脚本,你想把它转换为运行在 windows 上的可执行程序,并运行在没有安装 python 的 windows 系统上,那么首先你应写一个用于发布程序的设置脚本例如 mysetup.py,在其中的 setup 函数前插入语句 import py2exe 。
setup.py 示例如下:
from distutils.core import setup
import py2exe
import sys
#this allows to run it with a simple double click.
sys.argv.append('py2exe')
py2exe_options = {"includes": [],
#"includes": ["encodings", "encodings.*"],
"dll_excludes": ["MSVCP90.dll",],
"compressed": 1,
"optimize": 2,
"ascii": 0,
#"bundle_files": 1,
}
setup(
name = 'First',
version = '1.0',
windows = ['LoadScript.py',],
zipfile = None,
options = {'py2exe': py2exe_options}
)
然后在 cmd 中按下面的方法运行 setup.py:
python setup.py py2exe
上面的命令执行后将产生一个名为 dist 的子目录,其中包含了 helloworld.exe,python24.dll,library.zip 这些文件。如果你的 helloworld.py 脚本中用了已编译的 C 扩展模块,那么这些模块也会被拷贝在个子目录中,同样,所有的 dll 文件在运行时都是需要的,除了系统的 dll 文件。
dist 子目录中的文件包含了你的程序所必须的东西,你应将这个子目录中的所有内容一起发布。默认情况下,py2exe 在目录 dist 下创建以下这些必须的文件:
1、一个或多个 exe 文件。
2、python##.dll。
3、几个.pyd 文件,它们是已编译的扩展名,它们是 exe 文件所需要的;加上其它的.dll 文件,这些.dll 是.pyd 所需要的。
4、一个 library.zip 文件,它包含了已编译的纯的 python 模块如.pyc 或.pyo
上面的 mysetup.py 创建了一个控制台的 helloword.exe 程序,如果你要创建一个图形用户界的程序,那么你只需要将 mysetup.py 中的 console=["helloworld.py"]替换为 windows=["myscript.py"]既可。
py2exe 一次能够创建多个 exe 文件,你需要将这些脚本文件的列表传递给 console 或 windows 的关键字参数。如果你有几个相关联的脚本,那么这是很有用的。运行下面个命令,将显示 py2exe 命令的所有命令行标记。
python setup.py --help
四、指定额外的文件
一些应用程序在运行时需要额外的文件,诸如配置文件、字体、位图。
如果在安装脚本中用 data_files 可选项指定了那些额外的文件,那么 py2exe 能将这些文件拷贝到 dist 子目录中。data_files 应包含一个元组 (target-dir, files) 列表,其中的 files 是这些额外的文件的列表。
示例如下:
# setup.py
from distutils.core import setup
import glob
import py2exe
setup(console=["helloworld.py"],
data_files=[("bitmaps",
["bm/large.gif", "bm/small.gif"]),
("fonts",
glob.glob("fonts//*.fnt"))],
)
说明:data_files 选项将创建一个子目录 dist/bitmaps,其中包含两个.gif 文件;一个子目录 dist/fonts,其中包含了所有的.fnt 文件。
