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自动化测试之setUp与tearDown实例
Sep 28 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
Aug 08 Python
Python实现的堆排序算法原理与用法实例分析
Nov 22 Python
python实现梯度下降算法
Mar 24 Python
Python+Pyqt实现简单GUI电子时钟
Feb 22 Python
Python 获取指定文件夹下的目录和文件的实现
Aug 30 Python
Pytorch 实现focal_loss 多类别和二分类示例
Jan 14 Python
详解django使用include无法跳转的解决方法
Mar 19 Python
Keras使用ImageNet上预训练的模型方式
May 23 Python
pycharm 代码自动补全的实现方法(图文)
Sep 18 Python
python 实现socket服务端并发的四种方式
Dec 14 Python
Python 循环读取数据内存不足的解决方案
May 25 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数据库操作面向对象的优点
2006/10/09 PHP
php DOS攻击实现代码(附如何防范)
2012/05/29 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
2015/03/12 PHP
wamp服务器访问php非常缓慢的解决过程
2015/07/01 PHP
javascript void(0)的妙用
2009/10/21 Javascript
原生Js实现按的数据源均分时间点幻灯片效果(已封装)
2010/12/28 Javascript
javascript 随机展示头像实现代码
2011/12/06 Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
2013/06/24 Javascript
JSON格式的键盘编码对照表
2015/01/29 Javascript
JQuery悬停控制图片轮播——代码简单
2015/08/05 Javascript
JavaScript实现点击按钮就复制当前网址
2015/12/14 Javascript
jQuery短信验证倒计时功能实现方法详解
2016/05/25 Javascript
js实现楼层效果的简单实例
2016/07/15 Javascript
原生js实现验证码功能
2017/03/16 Javascript
vue实现todolist单页面应用
2017/04/11 Javascript
webpack2.0配置postcss-loader的方法
2017/08/17 Javascript
vue-infinite-loading2.0 中文文档详解
2018/04/08 Javascript
jQuery实现列表的增加和删除功能
2018/06/14 jQuery
详解vue为什么要求组件模板只能有一个根元素
2019/07/22 Javascript
JavaScript canvas实现跟随鼠标移动小球
2021/02/09 Javascript
使用Python判断IP地址合法性的方法实例
2014/03/13 Python
python中global与nonlocal比较
2014/11/21 Python
使用PyQt4 设置TextEdit背景的方法
2019/06/14 Python
Python实现Singleton模式的方式详解
2019/08/08 Python
python3 requests库文件上传与下载实现详解
2019/08/22 Python
Django 实现 Websocket 广播、点对点发送消息的代码
2020/06/03 Python
keras-siamese用自己的数据集实现详解
2020/06/10 Python
世界各地的旅游、观光和活动:Isango!
2019/10/29 全球购物
团支部推优材料
2014/05/21 职场文书
思想作风纪律整顿心得体会
2014/09/04 职场文书
会议接待欢迎标语
2014/10/08 职场文书
房地产销售助理岗位职责
2015/04/14 职场文书
逃出克隆岛观后感
2015/06/09 职场文书
同意报考公务员证明
2015/06/17 职场文书
深入浅出讲解Java8函数式编程
2022/01/18 Java/Android
JS中forEach()、map()、every()、some()和filter()的用法
2022/05/11 Javascript