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在多玩图片上下载妹子图的实现代码
Aug 13 Python
Python的Django框架中if标签的相关使用
Jul 15 Python
Python实现简单的获取图片爬虫功能示例
Jul 12 Python
PyCharm设置SSH远程调试的方法
Jul 17 Python
Django管理员账号和密码忘记的完美解决方法
Dec 06 Python
在PyCharm下使用 ipython 交互式编程的方法
Jan 17 Python
Python简单I/O操作示例
Mar 18 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
May 23 Python
Python 实现取多维数组第n维的前几位
Nov 26 Python
Pytorch之保存读取模型实例
Dec 30 Python
Python 实现将数组/矩阵转换成Image类
Jan 09 Python
Python用input输入列表的实例代码
Feb 07 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
动漫女神老婆无限好,但日本女生可能就不是这么一回事了!
2020/03/04 日漫
PHILIPS AE3805收音机的分析打磨
2021/03/02 无线电
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
2014/05/10 PHP
ThinkPHP中的关联模型注意点
2014/06/16 PHP
php输出含有“#”字符串的方法
2017/01/18 PHP
PHP中的函数声明与使用详解
2017/05/27 PHP
php实现有序数组旋转后寻找最小值方法
2018/09/27 PHP
JS 类型转换常见方法小结
2010/05/31 Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
2011/10/23 Javascript
JS 添加网页桌面快捷方式的代码详细整理
2012/12/27 Javascript
jquery二级导航内容均分的原理及实现
2013/08/13 Javascript
推荐10个2014年最佳的jQuery视频插件
2014/11/12 Javascript
JavaScript获取网页支持表单字符集的方法
2015/04/02 Javascript
浅谈Javascript中Object与Function对象
2015/09/26 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
JavaScript中transform实现数字翻页效果
2017/03/08 Javascript
Vue的事件响应式进度条组件实例详解
2018/02/04 Javascript
vue中设置、获取、删除cookie的方法
2018/09/21 Javascript
详解Python3.6的py文件打包生成exe
2018/07/13 Python
Python虚拟环境venv用法详解
2020/05/25 Python
纯CSS和jQuery实现的在页面顶部显示的进度条效果2例(仿手机浏览器进度条效果)
2014/04/16 HTML / CSS
详解使用HTML5 Canvas创建动态粒子网格动画
2016/12/14 HTML / CSS
室内设计专业毕业生求职信
2014/05/02 职场文书
装饰公司活动策划方案
2014/08/23 职场文书
新课培训心得体会
2014/09/03 职场文书
三方股东合作协议书范本
2014/09/28 职场文书
四风对照检查剖析材料
2014/10/07 职场文书
法人身份证明书
2014/10/08 职场文书
2014年幼儿园工作总结
2014/11/10 职场文书
常务副总经理岗位职责
2015/02/02 职场文书
2015年班干部工作总结
2015/04/29 职场文书
环保建议书范文
2015/09/14 职场文书
关于感恩的歌曲整理(8首)
2019/08/14 职场文书
这样写python注释让代码更加的优雅
2021/06/02 Python
js中Map和Set的用法及区别实例详解
2022/02/15 Javascript
python装饰器代码解析
2022/03/23 Python