本文首发于我的简书
几个月前我分享过一篇基于opencv人脸识别的员工考勤系统,由于我发布在多平台,总共的阅读量快5000+了,这让我备受鼓舞,同时陆陆续续有许多小伙伴联系到我,讨论具体的配置过程,其实过程还蛮复杂的,特别是在pycharm下,所以我打算把这个工程打包成exe。
pip install pyinstaller
是最简单的安装方式,但也常常由于各种原因报错,这就需要我们通过whl文件来下载,但是whl文件安装也有考究,具体参考我之前的教程:Python安装whl文件那些坑,下载whl一般可以在whl文件仓库中找到,如果找不到就去第三方库的官网下载,我个人比较倾向于第二种。
这是我最后一次阐述pip install的问题,后续的教程都不再赘述
可选参数 | 格式举例 | 功能说明 |
---|---|---|
-F |
pyinstaller -F demo.py |
只在dist中生产一个demo.exe文件。 |
-D |
pyinstaller -D demo.py |
默认选项,除了demo.exe外,还会在在dist中生成很多依赖文件,推荐使用。 |
-c |
pyinstaller -c demo.py |
默认选项,只对windows有效,使用控制台,就像编译运行C程序后的黑色弹窗。 |
-w |
pyinstaller -w demo.py |
只对windows有效,不使用控制台。 |
-p |
pyinstaller -p E:\python\Lib\site-packages demo.py |
设置导入路径,一般用不到。 |
-i |
pyinstaller -i D:\file.icon demo.py |
将file.icon设置为exe文件的图标,推荐一个icon网站:icon |
上面的可选参数可以组合使用,比如
pyinstaller -F -i D:\file.icon demo.py
。
能够from xxx import yyy
就尽量不要import xxx
,这样可以减少打包后的体积。
一般而言,pyinstaller的基本用法已经够用了,但是有特殊需求,比如打包图片资源文件时,就必须用到它的高阶功法了。
首先得了解spec文件:告诉pyinstaller如何打包的配置文件。
可以通过pyi-makespec demo.py
来生成demo.spec文件。其内容如下:
# -*- mode: python -*-
block_cipher = None
resources = (("inspurer.db", "."), ("dlib_face_recognition_resnet_model_v1.dat", "."),
("shape_predictor_68_face_landmarks.dat", "."), ("close_logcat.png", ".")
, ("open_logcat.png", "."), ("finish_register.png", "."), ("new_register.png", ".")
, ("start_punchcard.png", "."), ("end_puncard.png", "."), ("index.png", "."))
a = Analysis(['workAttendanceSystem.py'],
pathex=['C:\\Users\\lenovo\\Desktop\\test\\python'],
binaries=[],
datas=resources,
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
[],
exclude_binaries=True,
name='workAttendanceSystem',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='workAttendanceSystem')
对于上面这个文件,需要注意两点:
生成并配置好spec文件后,我们可以通过pyinstaller demo.spec
来执行打包任务。
最新更新版始终在github,百度云只是次选。
如果github速度太慢,可以参考:github很慢的解决办法
吐槽一下百度云上传的渣网速,github秒速5个M,百度云500K
pyinstaller打包的exe体积往往都非常巨大,而且过程非常耗时,和C编译的exe估计差了几个数量级,没有这个必要去把一个大的python工程打包成exe可执行文件。我想这也是未来python如果想要成为大型软件开发工程的热门所要克服的一个缺点吧。
即将推出tensorflow系列,手把手教你训练自己的物体识别模型。
欢迎关注个人公众号: inspurer
IT技术交流群:861016679
如果你觉得本文不错,欢迎打赏,这将是对我莫大的鼓励,感谢支持。
ps: 学tensorflow和pyinstaller到下午19:11,我中饭都还没吃。溜了溜了。