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 相关文章推荐
web.py获取上传文件名的正确方法
Aug 26 Python
python实现的守护进程(Daemon)用法实例
Jun 02 Python
Tensorflow简单验证码识别应用
May 25 Python
Python基于动态规划算法解决01背包问题实例
Dec 06 Python
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
Mar 18 Python
Python Process多进程实现过程
Oct 22 Python
通过字符串导入 Python 模块的方法详解
Oct 27 Python
python super用法及原理详解
Jan 20 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
Feb 11 Python
Python3批量创建Crowd用户并分配组
May 20 Python
获取CSDN文章内容并转换为markdown文本的python
Sep 06 Python
Python使用struct处理二进制(pack和unpack用法)
Nov 12 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
用来解析.htpasswd文件的PHP类
2012/09/05 PHP
简单谈谈 php 文件锁
2017/02/19 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
PHP后期静态绑定之self::限制实例分析
2018/12/21 PHP
JavaScript高级程序设计 错误处理与调试学习笔记
2011/09/10 Javascript
当json键为数字时的取值方法解析
2013/11/15 Javascript
JQuery判断HTML元素是否存在的两种解决方法
2013/12/26 Javascript
JQuery弹出层示例可自定义
2014/05/19 Javascript
基于JavaScript获取鼠标位置的各种方法
2015/12/16 Javascript
JavaScript实现经典排序算法之选择排序
2016/12/28 Javascript
vue.js实现价格格式化的方法
2017/05/23 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
JavaScript类型相关的常用操作总结
2019/02/14 Javascript
vue实现将一个数组内的相同数据进行合并
2019/11/07 Javascript
微信小程序学习总结(二)样式、属性、模板操作分析
2020/06/04 Javascript
Jquery使用each函数实现遍历及数组处理
2020/07/14 jQuery
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
python3使用urllib模块制作网络爬虫
2016/04/08 Python
使用Python的Django框架结合jQuery实现AJAX购物车页面
2016/04/11 Python
Python基础教程之利用期物处理并发
2018/03/29 Python
pycharm运行程序时在Python console窗口中运行的方法
2018/12/03 Python
python实现windows倒计时锁屏功能
2019/07/30 Python
韩国三大免税店之一:THE GRAND 中文免税店
2016/07/21 全球购物
英国家庭珠宝商:T. H. Baker
2018/02/08 全球购物
新加坡第一的杂货零售商:NTUC FairPrice
2020/12/05 全球购物
酒店管理自荐信
2013/10/23 职场文书
转党组织关系介绍信
2014/01/08 职场文书
工程管理专业毕业生自荐信
2014/01/24 职场文书
商务日语专业自荐信
2014/04/17 职场文书
关于安全演讲稿
2014/05/09 职场文书
体育比赛口号
2014/06/09 职场文书
欢迎标语大全
2014/06/21 职场文书
个人党性分析总结
2015/03/05 职场文书
大学感恩节活动总结
2015/05/05 职场文书
Java tomcat手动配置servlet详解
2021/11/27 Java/Android
Ubuntu Server 安装Tomcat并配置systemctl
2022/04/28 Servers