PyInstaller运行原理及常用操作详解


Posted in Python onJune 13, 2020

pyinstaller 属于Python第三方库,使用前需先安装

# 首先安装pyinstaller
pip install pyinstaller

PyInstaller生成可执行程序

# PyInstaller 工具的命令语法如下:

# 1、第一种
pyinstaller options ~/myproject/source/myscript.py

# 2、第一种
pyinstaller "C:\Documents and Settings\project\myscript.spec"

PyInstaller 支持的常用选项

-h,--help 查看该模块的帮助信息
-F,-onefile dist中产生单个的可执行文件    eg:pyinstaller -F demo.py
-D,--onedir 产生一个目录(包含多个文件)作为可执行程序  eg:pyinstaller -D demo.py
-a,--ascii 不包含 Unicode 字符集支持
-d,--debug 产生 debug 版本的可执行文件
-w,--windowed,--noconsolc 指定程序运行时不显示命令行窗口(仅对 Windows 有效)    eg:pyinstaller -w demo.py
-c,--nowindowed,--console 指定使用命令行窗口运行程序(仅对 Windows 有效)   eg:pyinstaller -c demo.py
-o DIR,--out=DIR 指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件
-p DIR,--path=DIR 设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径 eg:pyinstaller -p E:\python\Lib\site-packages demo.py
-n NAME,--name=NAME 指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字

1、创建一个 app 目录,在该目录下创建一个 入口app.py 文件

# 进入该app目录内,执行以下语法
pyinstaller -F app.py

当生成完成后,将会在此 app 目录下看到多了一个 dist 目录,并在该目录下看到有一个 app.exe 文件,这就是使用 PyInstaller 工具生成的 exe 程序。

在命令行窗口中进入 dist 目录下,在该目录执行 app.exe ,将会看到该程序执行结果。

注:若程序没有可视化界面,不能双击执行程序

2、创建一个 app 目录,在该目录下创建一个 入口app.py 文件

# 进入该app目录内,执行以下语法
pyinstaller -D app.py

执行上面命令,将看到详细的生成过程。当生成完成后,将会在 app 目录下看到多了一个 dist 目录,并在该目录下看到有一个 app 子目录,在该子目录下包含了大量 .dll 文件和 .pyz 文件,它们都是 app.exe 程序的支撑文件。在命令行窗口中运行该 app.exe 程序,同样可以看到与前一个 app.exe 程序相同的输出结果。

3、高级用法

当有特殊需求,比如打包图片资源文件时,就必须用到它的高级用法。

首先得了解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来执行打包任务。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python运行时间的几种方法
Jun 17 Python
详解如何用OpenCV + Python 实现人脸识别
Oct 20 Python
Python List cmp()知识点总结
Feb 18 Python
python七夕浪漫表白源码
Apr 05 Python
python绘图模块matplotlib示例详解
Jul 26 Python
Python判断字符串是否xx开始或结尾的示例
Aug 08 Python
Tensorflow实现在训练好的模型上进行测试
Jan 20 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
Jun 10 Python
python 调整图片亮度的示例
Dec 03 Python
Python获取指定网段正在使用的IP
Dec 14 Python
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
May 25 Python
python中mongodb包操作数据库
Apr 19 Python
Pandas缺失值2种处理方式代码实例
Jun 13 #Python
Python Django中间件使用原理及流程分析
Jun 13 #Python
Django QuerySet查询集原理及代码实例
Jun 13 #Python
Python celery原理及运行流程解析
Jun 13 #Python
基于Python实现视频的人脸融合功能
Jun 12 #Python
使用Keras实现简单线性回归模型操作
Jun 12 #Python
Python实现Keras搭建神经网络训练分类模型教程
Jun 12 #Python
You might like
php 生成自动创建文件夹并上传文件的示例代码
2014/03/07 PHP
PHP基于工厂模式实现的计算器实例
2015/07/16 PHP
Yii2实现同时搜索多个字段的方法
2016/08/10 PHP
PHP实现的曲线统计图表示例
2016/11/10 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
php+croppic.js实现剪切上传图片功能
2018/08/14 PHP
Yii1.1框架实现PHP极光推送消息通知功能
2018/09/06 PHP
通过MSXML2自动获取QQ个人头像及在线情况(给初学者)
2007/01/22 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
IE下写xml文件的两种方式(fso/saveAs)
2013/08/05 Javascript
D3.js中data(), enter() 和 exit()的问题详解
2015/08/17 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
微信小程序实战之自定义toast(6)
2017/04/18 Javascript
vue 过滤器filter实例详解
2018/03/14 Javascript
js运算符的一些特殊用法
2018/07/29 Javascript
vue自定义指令directive的使用方法
2019/04/07 Javascript
JavaScript 处理树数据结构的方法示例
2019/06/16 Javascript
layui select 禁止点击的实现方法
2019/09/05 Javascript
基于vuex实现购物车功能
2021/01/10 Vue.js
Python CSV模块使用实例
2015/04/09 Python
python实时分析日志的一个小脚本分享
2017/05/07 Python
python3 pandas 读取MySQL数据和插入的实例
2018/04/20 Python
使用python将图片格式转换为ico格式的示例
2018/10/22 Python
django模板加载静态文件的方法步骤
2019/03/01 Python
深入浅析python3中的unicode和bytes问题
2019/07/03 Python
python如何把字符串类型list转换成list
2020/02/18 Python
python基于selenium爬取斗鱼弹幕
2021/02/20 Python
浅析border-radius如何兼容IE
2016/04/19 HTML / CSS
Lyle & Scott苏格兰金鹰官网:英国皇室御用品牌
2018/05/09 全球购物
国际贸易求职信
2014/07/05 职场文书
高中生国庆节演讲稿范文2014
2014/09/21 职场文书
工作岗位职责范本
2015/02/15 职场文书
你会写报告?产品体验报告到底该怎么写?
2019/08/14 职场文书
十大公认最好看的动漫:《咒术回战》在榜,《钢之炼金术师》第一
2022/03/18 日漫
python单向链表实例详解
2022/05/25 Python
virtualenv隔离Python环境的问题解析
2022/06/21 Python