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'))