python利用pyinstaller打包简明教程

阅读本文大概需要花费6分钟。

写在前面

几个月前我分享过一篇基于opencv人脸识别的员工考勤系统,由于我发布在多平台,总共的阅读量快5000+了,这让我备受鼓舞,同时陆陆续续有许多小伙伴联系到我,讨论具体的配置过程,其实过程还蛮复杂的,特别是在pycharm下,所以我打算把这个工程打包成exe。

pyinstaller简明教程

安装pyinstaller

pip install pyinstaller是最简单的安装方式,但也常常由于各种原因报错,这就需要我们通过whl文件来下载,但是whl文件安装也有考究,具体参考我之前的教程:Python安装whl文件那些坑,下载whl一般可以在whl文件仓库中找到,如果找不到就去第三方库的官网下载,我个人比较倾向于第二种。

这是我最后一次阐述pip install的问题,后续的教程都不再赘述

pyinstaller基本用法

假如我们要打包一个demo.py文件,基本过程是:

打开cmd,并切换到demo.py文件所在的目录,注意路径中不要有中文
执行命令:pyinstaller demo.py
在当前的目录下,将会生成两个文件夹:build和dist。dist里面就是所有可执行文件,点击demo.exe就能运行了。

pyinstaller指令的常见可选参数:

可选参数 格式举例 功能说明
-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高阶功法

一般而言,pyinstaller的基本用法已经够用了,但是有特殊需求,比如打包图片资源文件时,就必须用到它的高阶功法了。

首先得了解spec文件,简而言之,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')

对于上面这个文件,需要注意两点:

除了resources配置是我添加修改之外,其余全是自动生成,这个配置是用来添加资源文件的。
pathex是工程的根目录。

生成并配置好spec文件后,我们可以通过pyinstaller demo.spec来执行打包任务。

员工考勤系统的exe文件下载

百度云:链接:https://pan.baidu.com/s/1S69QSyIU-cy8sTq-8arlag
提取码:1ub7

代码最新更新版始终在github,exe可执行文件只传到百度云。
如果github速度太慢,可以参考:github很慢的解决办法
吐槽一下百度云上传的渣网速,github秒速5个M,百度云500K

一点经验

pyinstaller打包的exe体积往往都非常巨大,而且打包过程非常耗时,和C/C++编译的exe目测差了几个数量级,所以一般没有这个必要去把一个大的python工程打包成exe可执行文件。我想这也是未来python如果想要成为大型软件开发工程的热门语言所要克服的一个重大缺点吧。

写在后面

预告

即将推出tensorflow系列,手把手教你训练自己的物体识别模型。
下面是一个利用tensorflow识图的小例子:

Ashampoo_Snap_2018.12.02_16h20m09s_008_.png

Ashampoo_Snap_2018.12.02_16h21m29s_009_.png

后记

学tensorflow和pyinstaller到下午19:11,我中饭都还没吃。
如果你觉得本文写得不错,欢迎打赏,这将是对我莫大的鼓励,感谢支持。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容