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 相关文章推荐
有关wxpython pyqt内存占用问题分析
Jun 09 Python
python使用wxpython开发简单记事本的方法
May 20 Python
菜鸟使用python实现正则检测密码合法性
Jan 05 Python
说一说Python logging
Apr 15 Python
Python实现的FTP通信客户端与服务器端功能示例
Mar 28 Python
Python之读取TXT文件的方法小结
Apr 27 Python
PyTorch上实现卷积神经网络CNN的方法
Apr 28 Python
Tensorflow Summary用法学习笔记
Jan 10 Python
Pytorch 实现数据集自定义读取
Jan 18 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
Jan 21 Python
python中Tkinter 窗口之输入框和文本框的实现
Apr 12 Python
Python Pandas模块实现数据的统计分析的方法
Jun 24 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强大的时间转换函数strtotime
2016/02/18 PHP
php实现表单提交上传文件功能
2018/05/28 PHP
PHP给前端返回一个JSON对象的实例讲解
2018/05/31 PHP
js DOM模型操作
2009/12/28 Javascript
前淘宝前端开发工程师阿当的PPT中有JS技术理念问题
2010/01/15 Javascript
JS操作Cookies的小例子
2013/10/15 Javascript
javascript制作的cookie封装及使用指南
2015/01/02 Javascript
详解微信小程序开发之城市选择器 城市切换
2017/01/17 Javascript
AngularJS页面传参的5种方式
2017/04/01 Javascript
JavaScript实现多重继承的方法分析
2018/01/09 Javascript
利用Node.js批量抓取高清妹子图片实例教程
2018/08/02 Javascript
解决axios会发送两次请求,有个OPTIONS请求的问题
2018/10/25 Javascript
React.js组件实现拖拽排序组件功能过程解析
2020/04/27 Javascript
完美解决vue 中多个echarts图表自适应的问题
2020/07/19 Javascript
vue+flask实现视频合成功能(拖拽上传)
2021/03/04 Vue.js
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
python正则表达式之对号入座篇
2018/07/24 Python
selenium+python 对输入框的输入处理方法
2018/10/11 Python
Django渲染Markdown文章目录的方法示例
2019/01/02 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
python退出循环的方法
2020/06/18 Python
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
2013/10/10 HTML / CSS
字中字效果的实现【html5实例】
2016/05/03 HTML / CSS
HTML5调用手机发短信和打电话功能
2020/04/29 HTML / CSS
Omio美国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/08 全球购物
全球烹饪课程的领先预订平台:Cookly
2020/01/28 全球购物
英国银首饰公司:e&e Jewellery
2021/02/11 全球购物
Windows和Linux动态库应用异同
2016/04/17 面试题
java程序员面试交流
2012/11/29 面试题
高校学生干部的自我评价分享
2013/11/04 职场文书
《再别康桥》教学反思
2014/02/12 职场文书
美丽家庭事迹材料
2014/05/03 职场文书
项目合作意向书
2015/05/08 职场文书
感恩的心主题班会
2015/08/12 职场文书
Nginx的反向代理实例详解
2021/03/31 Servers
springmvc直接不经过controller访问WEB-INF中的页面问题
2022/02/24 Java/Android