今天整理了一下py2exe的各种用法,此次仅仅整理出了一小部分,大部分的内容还是没有搜索到。郁闷中……网络上这方面的资料太少了,大部分都是重复的。。。。
console方式编译
setup(console=["consoles.py"])
windows方式编译
setup(windows=["windows.py"])
编译ico图标
setup(windows = [{"script":"ico.py", "icon_resources": [(1, "myico.ico")]} ])
一次编译多个文件
在编译的时候把多个文件以列表方式传递给setup即可:
setup(console=["my)one.py","my_two.py"])
setup(windows=["my)one.py","my_two.py"])
setup(console=["my_one.py", "my_two.py"], windows=["my_three.py"])
指定额外的文件
一些应用程序在运行时需要额外的文件,比如图片,或者其他文件。我们可以通过setup()函数的data_files参数来指定。格式大致如下:
[("目的目录1",["文件目录1","文件名1","文件目录2","文件名2",..."文件目录n","文件名n"]),("目的目录2",["文件目录1","文件名1","文件目录2","文件名2",..."文件目录n","文件名n"])]这种元组的形式包装成列表,传递给data_files就可以.这个列表里的元素都是成对出现的。
示范代码:
setup(windows=["test.py"],data_files=[("img",[r"d:/test/1.gif",r"d:/test/2.gif"]),("xml",[r"d:/test/1.xml",r"d:/test/2.xml"])])
这里将会在dist目录中创建两个目录img和xml,img目录里包含1.gif和2.gif这两个文件,xml目录中包含1.xml和2.xml这两个文件.如果不想创建新的目录img和xml那么只要讲这两个目录写成""空字符串就可以了,此时,py2exe会将指定文件复制到dist目录下。上面data_files是一个有两个元组作为元素的列表。第一个元组里面的img对应[r"d:/test/1.gif",r"d:/test/2.gif"] 这个有两个元素的列表,第二个元组里面的xml对应有两个元素的[r"d:/test/1.xml",r"d:/test/2.xml"]列表。
关于options和includes
includes = ["encodings", "encodings.*"]
#要包含的其它库文件
options = {"py2exe":
{"compressed": 1, #压缩
"optimize": 2,
"ascii": 1,
"includes":includes,
"bundle_files": 1 #所有文件打包成一个exe文件 }
}
bundle_files项,值为1表示pyd和dll文件会被打包到exe文件中,且不能从文件系统中加载python模块;值为2表示pyd和dll文件会被打包到exe文件中,但是可以从文件系统中加载python模块
另外在setup中加入zipfile=None可以不生成library.zip。
一个标准的setup.py的代码如下:
#!/usr/bin/python
#filename:setup.py
#-*-coding:cp936-*-
from distutils.core import setup
import py2exe
includes = ["encodings", "encodings.*"]
#要包含的其它库文件
options = {"py2exe":
{"compressed": 1, #压缩
"optimize": 2,
"ascii": 1,
"includes":includes,
"bundle_files": 1 #所有文件打包成一个exe文件 }
}
setup(
version = "XXX",
description = "XXX",
name = "XXX",
options = options,
zipfile=None, #不生成library.zip文件
console=[{"script": "hello.py", "icon_resources": [(1, "hello.ico")] }]#源文件,程序图标
)