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的Twisted框架上手前所必须了解的异步编程思想
May 25 Python
Python优化技巧之利用ctypes提高执行速度
Sep 11 Python
python如何查看系统网络流量的信息
Sep 12 Python
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
Feb 13 Python
Python中音频处理库pydub的使用教程
Jun 07 Python
基于Python的关键字监控及告警
Jul 06 Python
django上传图片并生成缩略图方法示例
Dec 11 Python
Python代码缩进和测试模块示例详解
May 07 Python
Django模板标签{% for %}循环,获取制定条数据实例
May 14 Python
五分钟学会怎么用python做一个简单的贪吃蛇
Jan 12 Python
django inspectdb 操作已有数据库数据的使用步骤
Feb 07 Python
Python实现我的世界小游戏源代码
Mar 02 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
三国漫画《火凤燎原》宣布动画化PV放出 预计2020年播出
2020/03/08 国漫
php实现搜索类封装示例
2016/03/31 PHP
PHP计算近1年的所有月份
2017/03/13 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
2017/08/04 PHP
驱动事件的addEvent.js代码
2007/03/27 Javascript
JavaScript中使用数组方法汇总
2016/02/16 Javascript
Javascript类型系统之String字符串类型详解
2016/06/21 Javascript
vue.js学习笔记之绑定style样式和class列表
2016/10/31 Javascript
微信小程序 选择器(时间,日期,地区)实例详解
2016/11/16 Javascript
Angularjs 实现移动端在线测评效果(推荐)
2017/04/05 Javascript
vue+axios实现登录拦截的实例代码
2017/05/22 Javascript
vue 组件使用中的一些细节点
2018/04/25 Javascript
使用JS判断移动端手机横竖屏状态
2018/07/30 Javascript
vue-lazyload使用总结(推荐)
2018/11/01 Javascript
JavaScript原型对象原理与应用分析
2018/12/27 Javascript
用Python实现协同过滤的教程
2015/04/08 Python
Python时间模块datetime、time、calendar的使用方法
2016/01/13 Python
Python实现读写INI配置文件的方法示例
2018/06/09 Python
python多个模块py文件的数据共享实例
2019/01/11 Python
Python中的十大图像处理工具(小结)
2019/06/10 Python
基于python实现文件加密功能
2020/01/06 Python
解决Python在导入文件时的FileNotFoundError问题
2020/04/10 Python
使用keras实现densenet和Xception的模型融合
2020/05/23 Python
Python在字符串中处理html和xml的方法
2020/07/31 Python
python跨文件使用全局变量的实现
2020/11/17 Python
CSS3 按钮边框动画的实现
2020/11/12 HTML / CSS
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
CAT鞋英国官网:坚固耐用的靴子和鞋
2016/10/21 全球购物
德国最大的拼图在线商店:Puzzle.de
2016/12/17 全球购物
idealfit英国:世界领先的女性健身用品和运动衣物品牌
2017/11/25 全球购物
Prototype如何更新局部页面
2013/03/03 面试题
青年文明号复核材料
2014/02/11 职场文书
学生检讨书怎么写
2014/10/09 职场文书
大学生简历自我评价2015
2015/03/03 职场文书
Python 如何将integer转化为罗马数(3999以内)
2021/06/05 Python