PyInstaller运行原理及常用操作详解
作者:_夕颜 发布时间:2022-09-15 03:57:26
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来执行打包任务。
来源:https://www.cnblogs.com/caijunchao/p/12845620.html
猜你喜欢
- 前言可能很多人会觉得这是一个奇葩的需求,爬虫去好好的爬数据不就行了,解析js干嘛?吃饱了撑的?搜索一下互联网上关于这个问题还真不少,但是大多
- Python 是一门优雅的语言,简洁的语法,强大的功能。当然丰富的第三方库,更能加速开发。那么问题来了,如何安装这些第三方库(包)呢?安装第
- 佛爷去了公司的年夜饭,我有点无聊就在公司 Coding 点东西玩玩,于是就有了这玩意。请允许我很猥·琐得将这个游戏称之为“是男人坚持 100
- 光线追迹得益于计算机的计算的能力,通过追踪具有代表性的光线的传播轨迹,可以更加精确地描述光学系统的性能,光线追迹方法也因此大展其能,诸如Ze
- 一、 模块1、模块的概念模块是 Python 程序架构的一个核心概念每一个以扩展名 py 结尾的 Python 源代码文件都是一个 模块模块
- 本文实例讲述了python网络编程:socketserver的基本使用方法。分享给大家供大家参考,具体如下:本文内容:socketserve
- 问题问题1Python是一种动态语言,不支持类型检查。当需要对一个对象执行类型检查时,可能会采用下面的方式:class Foo(object
- 简单的Tensorflow验证码识别应用,供大家参考,具体内容如下1.Tensorflow的安装方式简单,在此就不赘述了.2.训练集训练集以
- 本篇博客介绍利用python脚本实现视频分帧,并将每一帧保存到本地。主要基于opencv包来实现,在运行代码前确保opencv包已正确安装。
- 方法1:import requestsurl = "http://www.xxxx.net/login"#参数拼凑,附件
- 从4年之前什么都不知道,到现在对代码的一网情深,感谢无忧的兄弟姐妹的帮助,感谢无忧给我们提供了这么好的交流平台。现将最近几天捣鼓的asp封装
- 今天继续学习Django,今天主要掌握两个小点一、如果为Django项目中引入静态文件1、先要在project目录下创建static的目录,
- 网站域名一般都会选简短易记的,因为这对于网站宣传来说也可以省不少力。而被很多网站忽视的站内Url结构则在一定程度上反映出网站的整体架构。当设
- 有些时候,程序需要进行反向遍历,此时可通过 reversed() 函数,该函数可接收各种序列(元组、列表、区间等)参数,然后返回一个“反序排
- 触发器的概念:“在数据库中为响应一个特殊表格中的某些事件而自动执行的程序代码。”(Wikipedia)说得简单一些,它是在一个特殊的数据库事
- Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展。Numpy是python中众多
- 导语《我的世界》是一款自由度极高的游戏,每个新存档的开启,就像是作为造物主的玩家在虚拟空间开辟了一个全新的宇宙。方块连接世界,云游大好河山。
- 我们知道为了提高代码的运行速度,我们需要对书写的python代码进行性能测试,而代码性能的高低的直接反馈是电脑运行代码所需要的时间。这里将介
- 1,filesize()函数返回错误的值。 使用curl将某个页面下载到本地时,需要将下载到的临时文件tmpHtml.txt的内容读取到一个
- 作者:HelloGitHub-追梦人物文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库搜索是一个复杂的功能,但对于