因为很多程序除了执行文件之外,还需要一些配置文件,数据文件,图片文件等等,所以需要把这些文件也自动地拷贝到指定有目录里,才可以在别人的电脑里运行起来,那么就需要在安装脚本里添加这些内容,并进行打包,如下:
#python 3.4
from distutils.core import setup
import glob
import py2exe
setup(console=['hello.py'],
data_files=[('icons', ['CloseScreen.ico']),
]
)
在这个安装脚本里,使用了关键字data_files,这个关键字使用一个元组表示一个目标目录和需要拷贝的文件,像上面的例子:
('icons', ['CloseScreen.ico'])
这个元组第一个元素icons是目标目录的名称,也就是在dist目录里建立的子目录,第二个元素是一个字典['CloseScreen.ico'],表示所有需要拷贝的文件路径,在字典里可以是多个文件。
如果想建立多个目录,可以在data_files的字典里包括多元组即可,每一个元组是一个目录。如果想自动从一个目录里拷贝很多文件,一个一个地添加到脚本里,就比较麻烦,可以使用下面的脚本的方式,可以把一个目录里所有文件添加进去:
1 import os
2 from distutils.core import setup
3 import py2exe
4
5 Mydata_files = []
6 for files in os.listdir('C:/path/to/image/directory/'):
7 f1 = 'C:/path/to/image/directory/' + files
8 if os.path.isfile(f1): # skip directories
9 f2 = 'images', [f1]
10 Mydata_files.append(f2)
11
12 setup(
13 console=['trypyglet.py.py'],
14 data_files = Mydata_files,
15 options={
16 "py2exe":{
17 "unbuffered": True,
18 "optimize": 2,
19 "excludes": ["email"]
20 }
21 }
22 )
py2exe扩展原来一些参数,下面定义了一些参数告诉py2exe怎么样创建应用程序的类型,如下:
关键字 |
描述 |
console |
把脚本转换为console应用程序。 |
windows |
把脚本转换为GUI应用程序。 |
service |
把脚本转换为Win32服务类型。 |
con_server |
把脚本转换为COM服务类型。 |
ctypes_com_server |
把脚本转换为COM服务类型。 |
zipfile |
指定共享库的名称,默认是library.zip。 |
options |
配置字典{‘py2exe’: {‘opt1’: val1, ‘opt2’: val2, ...}} |
在最后一项的py2exe选项参数如下列表:
键 |
可选的值 |
unbuffered |
如果设置为true,不要缓存stdout和stderr输出,因为有时需要立即查看到输出的内容。 |
optimize |
优化的级别,0表示不优化仅生成.pyc文件;1表示一般优化,相当于python -O;2表示极限优化,相当于python -OO。 |
includes |
列表包括的模块名称。 |
packages |
列表包括在subpackages目录的包模块。 |
ignores |
那些模块如果没有发现,就可以忽略。 |
excludes |
那些模块不需要包括的。 |
dll_excludes |
所有需要执行的dll的名称。 |
dist_dir |
目标的目录名称。 |
typelibs |
列表需要包括编译生成的类型库。 |
compressed |
是否创建一个zipfile压缩文件。 |
xref |
是否创建一个模块的交叉引用。 |
bundle_files |
绑定dlls到zip文件或者exe文件里,3表示不绑定,2绑定所有文件除了Python解释器,1绑定所有文件,包括Python解释器。 |
skip_archive |
是否不要把Python字节码文件放到压缩包里,直接放到文件系统下。 |
ascii |
是否自动包括编码模块。 |
custom-boot-script |
设置建立运行环境之前运行的脚本文件。 |
下面是一个使用参数的例子:
setup(
windows=['trypyglet.py'],
options={
"py2exe":{
"unbuffered": True,
"optimize": 2,
"excludes": ["email"]
}
}
)
你可以通过传递一个service关键字参数给setup函数来建造Windows NT services
,这个service参数的值必须是一个Python模块名(包含一service类)的列表。
示例如下:
# mysetup.py
from distutils.core import setup
import py2exe
setup(service=["MyService"])
所建造的可执行的service是可以通过在其后跟一定的命令行参数标记来自行安装和卸载的。你可以通过在这个可执行的service(exe)后跟一-help参数来得到更多的帮助。
蔡军生 QQ: 9073204 深圳