pyinstaller能够将python代码打包为可执行的exe文件,通常应用只须要使用以下命令: python
C:\Python27\python.exe C:\pyinstaller-2.0\pyinstaller.py src\wgClient.py执行该命令后将在当前目录下生成build和dist文件夹,另外还会生成一个wgClient.spec文件,用于描述pyinstall的打包过程,若是对打包有特殊要求时,能够直接编辑spec文件,而后将spec文件做为打包时的输入对象:
C:\Python27\python.exe C:\pyinstaller-2.0\pyinstaller.py wgClient.spec
下面附上一段spec文件的示例代码,结合示例说明一些打包过程当中的一些特殊要求: shell
# -*- mode: python -*- a = Analysis(['src\\wgClient.py'], pathex=['D:\\PycharmProjects\\wgClientPy'], hiddenimports=[], hookspath=None) pyz = PYZ(a.pure) exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [('logging.conf', 'src/logging.conf', 'DATA')], [('clr.pyd', 'C:\\Python27\DLLs\\clr.pyd', 'EXTENSION'), ('Python.Runtime.dll', 'C:\\Python27\DLLs\\Python.Runtime.dll', 'BINARY'), ('Python.Runtime.pdb', 'C:\\Python27\DLLs\\Python.Runtime.pdb', 'BINARY'), ('n3kAdrtB.dll', 'src\\n3kAdrtB.dll', 'BINARY') ], name=os.path.join('build\\pyi.win32\\wgClient', 'wgClient.exe'), debug=False, strip=None, upx=True, console=True ) coll = COLLECT(exe, [('config.ini', 'src/config.ini', 'DATA')], strip=None, upx=True, name='dist')
上面的Analysis、PYZ、EXE、COLLECT都是事先定义的子任务。 字体
用于定义python源文件,包括搜索路径,源文件名称等。Analysis有5个输出项,可供其余子任务引用: ui
将python文件压缩打包,输入通常是Analysis.pure. spa
打包生成exe文件,从上面的例子中能够看出,EXE子任务包含了Analysis的全部5个输出项(pure被PYZ打包了),另外还包含程序运行所需的一些配置文件和动态库,这些不在Analysis输出项中的文件是经过TOC格式来配置的,TOC(Table Of Contents),TPC其实就是一个tuple,格式为(name, path, typecode),其中typecode能够为如下值: debug
用来构建最终的生成目录,能够复制其余子任务生成的结果,并拷贝到指定目录,造成最终的打包结果。 code
示例中的spec文件,会在dist目录下生成一个wgClient.exe的能够执行文件,里面包含全部的依赖项,能够独立运行,同时该目录下还有config.ini配置文件。 对象
上例中,将logging.conf文件直接打包在exe内部了,python在读取时应使用如下方式读取文件路径: 图片
if getattr(sys, 'frozen', None): basedir = sys._MEIPASS else: basedir = os.path.dirname(__file__) logging.config.fileConfig(os.path.join(basedir, 'logging.conf'))