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 BeautifulSoup中文乱码问题的2种解决方法
Apr 22 Python
Python中pygame安装方法图文详解
Nov 11 Python
django文档学习之applications使用详解
Jan 29 Python
python开启摄像头以及深度学习实现目标检测方法
Aug 03 Python
python 3.6.5 安装配置方法图文教程
Sep 18 Python
Django中使用haystack+whoosh实现搜索功能
Oct 08 Python
对python中assert、isinstance的用法详解
Nov 27 Python
Django表单提交后实现获取相同name的不同value值
May 14 Python
Python 如何查找特定类型文件
Aug 17 Python
python 调用API接口 获取和解析 Json数据
Sep 28 Python
Python之字典添加元素的几种方法
Sep 30 Python
python中append函数用法讲解
Dec 11 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实现利用phpexcel导出数据
2013/08/24 PHP
thinkPHP导出csv文件及用表格输出excel的方法
2015/12/30 PHP
Laravel最佳分割路由文件(routes.php)的方式
2016/08/04 PHP
javascript Discuz代码中的msn聊天小功能
2008/05/25 Javascript
js实现权限树的更新权限时的全选全消功能
2009/02/17 Javascript
offsetParent 算法分析
2010/04/05 Javascript
IE与Firefox在JavaScript上的7个不同句法分享
2011/10/30 Javascript
通过一段代码简单说js中的this的使用
2013/07/23 Javascript
Jquery实现控件的隐藏和显示实例
2014/02/08 Javascript
jQuery使用addClass()方法给元素添加多个class样式
2015/03/26 Javascript
浅析JavaScript函数的调用模式
2016/08/10 Javascript
Vue-router结合transition实现app前进后退动画切换效果的实例
2017/10/11 Javascript
vue源码解析之事件机制原理
2018/04/21 Javascript
微信小程序框架wepy之动态控制类名
2018/09/14 Javascript
[55:18]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python安装与使用redis的方法
2016/04/19 Python
深入理解python中的atexit模块
2017/03/07 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
2018/11/14 Python
python PIL模块的基本使用
2020/09/29 Python
Python实现异步IO的示例
2020/11/05 Python
Python爬虫中Selenium实现文件上传
2020/12/04 Python
Ray-Ban雷朋美国官网:全球领先的太阳眼镜品牌
2016/07/20 全球购物
世界上最大的各式箱包网络零售店:eBag
2016/07/21 全球购物
瑞士设计师家具和家居饰品网上商店:Bruno Wickart
2019/03/18 全球购物
金融专业个人求职信
2013/09/22 职场文书
教师自我鉴定
2013/12/13 职场文书
教师求职信
2014/06/17 职场文书
基层党员对照检查材料
2014/08/25 职场文书
离退休人员聘用协议书
2014/11/24 职场文书
党员观看《筑梦中国》心得体会
2016/01/18 职场文书
高中生物教学反思
2016/02/20 职场文书
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
2021/04/01 PHP
深入浅出的讲解:信号调制到底是如何实现的
2022/02/18 无线电
mysql的单列多值存储实例详解
2022/04/05 MySQL
vue+elementUI实现表格列的显示与隐藏
2022/04/13 Vue.js
python井字棋游戏实现人机对战
2022/04/28 Python