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实现的用于搜索文件并进行内容替换的类实例
Jun 28 Python
Python字符串转换成浮点数函数分享
Jul 24 Python
Python开发的十个小贴士和技巧及长常犯错误
Sep 27 Python
python 分离文件名和路径以及分离文件名和后缀的方法
Oct 21 Python
在unittest中使用 logging 模块记录测试数据的方法
Nov 30 Python
python仿evething的文件搜索器实例代码
May 13 Python
Pycharm运行加载文本出现错误的解决方法
Jun 27 Python
python获取txt文件词向量过程详解
Jul 05 Python
python实现修改固定模式的字符串内容操作示例
Dec 30 Python
python3中使用__slots__限定实例属性操作分析
Feb 14 Python
Python中zip()函数的解释和可视化(实例详解)
Feb 16 Python
Python如何省略括号方法详解
Mar 21 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语法(3)
2006/10/09 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
2014/06/19 PHP
php实现俄罗斯乘法实例
2015/03/07 PHP
PHP实现动态执行代码的方法
2016/03/25 PHP
JSON+HTML实现国家省市联动选择效果
2014/05/18 Javascript
AngularJS基础学习笔记之指令
2015/05/10 Javascript
详解Node.Js如何处理post数据
2016/09/19 Javascript
JavaScript获取服务器时间的方法详解
2016/12/11 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
微信小程序之选项卡的实现方法
2017/09/29 Javascript
react+redux的升级版todoList的实现
2017/12/18 Javascript
vue获取dom元素注意事项
2017/12/28 Javascript
Node.js笔记之process模块解读
2018/05/31 Javascript
微信小程序后端实现授权登录
2020/02/24 Javascript
JavaScript中Object、map、weakmap的区别分析
2020/12/15 Javascript
[01:52]深扒TI7聊天轮盘语音出处7
2017/05/11 DOTA
用Python编程实现语音控制电脑
2014/04/01 Python
win10系统中安装scrapy-1.1
2016/07/03 Python
Python搭建HTTP服务器和FTP服务器
2017/03/09 Python
Python 判断是否为质数或素数的实例
2017/10/30 Python
Sanic框架蓝图用法实例分析
2018/07/17 Python
python运用sklearn实现KNN分类算法
2019/10/16 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
2020/05/17 Python
OpenCV读取与写入图片的实现
2020/10/13 Python
安装pyinstaller遇到的各种问题(小结)
2020/11/20 Python
菲律宾旅游网站:Expedia菲律宾
2017/10/11 全球购物
《狼和小羊》教学反思
2014/04/20 职场文书
护士工作失误检讨书
2014/09/14 职场文书
教师群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
高校自主招生自荐信2015
2015/03/04 职场文书
家庭暴力离婚起诉书
2015/05/18 职场文书
欠条样本
2015/07/03 职场文书
小学英语新课改心得体会
2016/01/22 职场文书
2019年入党思想汇报格式与要求
2019/06/25 职场文书
Promise面试题详解之控制并发
2021/05/14 面试题
html中相对位置与绝对位置的具体使用
2022/05/15 HTML / CSS