用Python开发Windows应用程序,发布的时候就要打包成可执行程序。Python下提供了pyinstaller的库可以帮助我们完成Python程序的打包。当然还有其他的工具比如py2exe等也是可以的,但是打包后好像比较大,而且有些依赖需要自己处理,而pyinstaller就可以很好的解决这些问题。
pyinstaller如何打包windows下的Python程序
1. 下载安装pyinstaller
1 | pip install pyinstaller |
2. pyinstaller命令
1 | usage: pyinstaller [-h] [-v] [-D] [-F] [--specpath DIR] [-n NAME] |
[注意:] 使用-F参数生成一个文件的话,执行过程中程序是会被解压到用户temp随机目录。这样如果有用到需要修改的配置文件则无法保存修改1
pyinstaller -D -w -i xx.ico -n xxx xxxx.py
执行上述命令之后,执行文件和依赖文件就会被生成到dist下xxx目录
3. 包含资源文件
当程序用到一些外部资源,比如一张图片或者配置文件,pyinstaller是不会检测到这些的。那么这些文件是需要我们指定打包进去的,当然你也可以在打包之后拷贝到目录里(-F参数生成单个文件就不行了)。
上述命令执行完之后,会有对应名字的spec文件生成。如xxx.spec。通过文本编辑器打开xxx.spec,内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32# -*- mode: python -*-
block_cipher = None
a = Analysis(['app.py'],
pathex=['.\\workspace'],//项目目录
binaries=[],
datas=[],//资源文件
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='xprint',
debug=False,
strip=False,
upx=True,
console=False , icon='xprint.ico')
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='xprint')
里面的datas=[]就是需要包含的资源文件
资源文件语法结构如下
(‘’,’’)
第一个引号问要引用资源文件的路径(可以是相对目录)
第二个引号是资源文件相对执行文件所在的目录
比如引用E:\test.png到执行文件目录的img目录下(‘E:\test.png’,’img’)。
修改完spec文件之后执行如下命令,依赖的资源文件就会被拷贝到dist/xxx目录下或者打包在一起生成一个文件1
pyinstaller xxx.spec