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之wxPython应用实例
Sep 28 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
Jul 12 Python
详解使用 pyenv 管理多个版本 python 环境
Oct 19 Python
python的unittest测试类代码实例
Dec 07 Python
python中csv文件的若干读写方法小结
Jul 04 Python
python实现大转盘抽奖效果
Jan 22 Python
深入解析python中的实例方法、类方法和静态方法
Mar 11 Python
python爬虫的一个常见简单js反爬详解
Jul 09 Python
Python Multiprocessing多进程 使用tqdm显示进度条的实现
Aug 13 Python
Python 面向对象之封装、继承、多态操作实例分析
Nov 21 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
Mar 30 Python
python使用多线程+socket实现端口扫描
May 28 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下利用curl判断远程文件是否存在的实现代码
2011/10/08 PHP
Yii2下session跨域名共存的解决方案
2017/02/04 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
解决js下referer兼容各大浏览器的方法
2014/11/03 Javascript
jQuery fadeOut 异步实例代码详解
2016/08/18 Javascript
AngularJS全局scope与Isolate scope通信用法示例
2016/11/22 Javascript
实例分析浏览器中“JavaScript解析器”的工作原理
2016/12/12 Javascript
jQuery插件FusionCharts绘制的3D饼状图效果实例【附demo源码下载】
2017/03/03 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
2018/03/27 Javascript
利用Webpack实现小程序多项目管理的方法
2019/02/25 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
Element InputNumber 计数器的实现示例
2020/08/03 Javascript
[06:45]DOTA2卡尔工作室 英雄介绍幻影长矛手篇
2013/07/12 DOTA
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
Python 安装setuptools和pip工具操作方法(必看)
2017/05/22 Python
python字典操作实例详解
2017/11/16 Python
微信跳一跳小游戏python脚本
2018/01/05 Python
python 使用 requests 模块发送http请求 的方法
2018/12/09 Python
Python函数返回不定数量的值方法
2019/01/22 Python
Centos7 下安装最新的python3.8
2019/10/28 Python
Python openpyxl模块原理及用法解析
2020/01/19 Python
python属于跨平台语言码
2020/06/09 Python
一文详述 Python 中的 property 语法
2020/09/01 Python
python中最小二乘法详细讲解
2021/02/19 Python
英国剑桥包官网:The Cambridge Satchel Company
2016/08/01 全球购物
Nike挪威官网:Nike.com (NO)
2018/11/26 全球购物
人力资源专员自我评价怎么写
2013/09/19 职场文书
《孔子拜师》教学反思
2014/02/24 职场文书
2014年学习雷锋活动总结
2014/03/01 职场文书
医生学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
离婚协议书的范本
2015/01/27 职场文书
银行稽核岗位职责
2015/04/13 职场文书
2015年度物业公司工作总结
2015/04/27 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers
mybatis源码解读之executor包语句处理功能
2022/02/15 Java/Android