pyinstaller工具打包python项目详细教程

使用 Pyinstaller工具 编译打包 Python 项目生成 exe 可执行文件

1.pyinstaller介绍:
介绍:
	PyInstaller 是一个将 Python 程序转换为独立可执行文件的工具。它能够在 Windows、Linux、Mac OS X、AIX 和 Solaris 等多种系统上运行。详细介绍可参考pyinstaller官网:https://www.pyinstaller.org
PyInstaller 主要优点:
	1. PyInstaller 与任何 Python 版本兼容,从 2.3 版本开始支持。
	2. PyInstaller 通过透明压缩功能,使生成的可执行文件更小。
	3. PyInstaller 是完全跨平台的,可以在各种操作系统上运行。
	4. PyInstaller 利用操作系统的支持来加载动态库,从而确保了完全的兼容性。
	5. PyInstaller 较其他工具打包速度较快
		
2.下载安装pyinstaller工具

一 ** 通过 pip 快速安装(PyPI 清华源镜像仓库)**

pip install pyinstaller  # 快速安装
pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple/  # PyPI 清华源镜像仓库
pyinstaller --version   # 查看pyinstaller的版本
pip install -U pyinstaller     # 若本地已经安装了旧版的 pyinstaller 进行更新 pyinstaller 工具

二 ** 通过 git clone 安装**【不建议】

git clone https://github.com/pyinstaller/pyinstaller
cd pyinstaller 
pip install...

pyinstaller cmd 命令

pyinstaller			构建一个捆绑的应用程序的主命令

pyi-makespec		创建一个 spec 配置文件

pyi-archive_viewer	检查捆绑的应用程序

pyi-bindepend		显示可执行文件的依赖关系

pyi-grab_version	从 Windows 可执行文件中提取版本资源

pyi-set_version		将先前提取的版本资源应用到现有的 Windows 可执行文件中

3.完整打包流程

1.安装pyinstaller

2.在当前项目目录下开启 cmd 终端创建一个spec配置文件
在这里插入图片描述
3.编辑配置文件

以下是需要修改添加的配置信息,修改完成保存配置文件
在这里插入图片描述
注意事项[请仔细阅读]:

1.我们在开发的过程中所构建的python环境可能在site-packages下安装了很多的第三方库,我们在配置文件中引入python第三方资源后,导致最后打包成功的exe可执行程序比较打,运行启动慢等问题
解决方案:单独将需要打包的项目分开,本地构建一个新的虚拟环境,只安装本项目所需的第三方库即可。打包前测试新的环境代码运行成功,注意将虚拟环境的site-packages本地路径修改正确
2.在使用 PyInstaller 打包 Python 源文件时,需要注意文件路径不能出现英文空格和英文句号(.),源文件必须是 UTF-8 编码,暂不支持其他编码类型。

4.通过pyinstaller打包exe

pyinstaller main.spec  #打包命令 注意:在main.spec层目录执行命令

在这里插入图片描述
打包成功:

执行成功结果,如果执行成功双击打开报错或者闪退,检查配置文件和第三方库是否引入
在这里插入图片描述
成功后python项目生成两个目录(build 和 dist),build是缓存文件,可以删除掉。dist 中就是打包的结果,在该目录下有生成的 exe 文件(如果非单个 exe 文件还会包含所依赖的库文件)

dist 文件夹是 PyInstaller 生成的打包文件的存放位置,其中包含与源程序同名的文件夹,以及可执行文件的动态链接库等。这个文件夹中的内容可以直接运行,其他人可以使用这个文件夹里的可执行文件。

build 文件夹是 PyInstaller 存储临时文件的目录,类似于 PyInstaller 的工作空间,其中包含相关的文件和日志信息。打包完成后,这个文件夹可以安全删除。

打包成功后将dist里面的exe可执行文件复制到项目的配置文件同级目录:
在这里插入图片描述
双击exe执行程序:执行成功如下图
在这里插入图片描述
至此使用pyinstaller打包python项目完成

扩展知识:

spec 配置选项 和 配置指令

# -*- mode: python ; coding: utf-8 -*-:指定文件的编码格式为UTF-8。

block_cipher = None:设置加密算法的密钥,如果不需要加密,则可以设置为 None。

a = Analysis(['myprogram.py']:指定要打包的Python源文件。

pathex=['/path/to/myprogram']:指定Python源文件的路径。

binaries=[]:指定要包含的二进制文件。

datas=[]:指定要包含的数据文件。

hiddenimports=[]:指定要包含的隐藏导入模块。

hookspath=[]:指定要搜索的钩子路径。

runtime_hooks=[]:指定要运行的运行时钩子。

excludes=[]:指定要排除的模块或包。

win_no_prefer_redirects=False:指定 Windows 下是否禁用重定向。

win_private_assemblies=False:指定 Windows 下是否使用私有程序集。

cipher=block_cipher:指定加密算法和密钥。

noarchive=False):指定是否禁用归档。

在 spec 文件中,还可以使用 Analysis、PyInstaller 等类来定义打包过程的各种操作和选项。例如,可以使用 Analysis 类来指定要打包的 Python 源文件、二进制文件、数据文件等,使用 PyInstaller 类来指定生成的可执行文件的名称、版本、图标等。

通过编辑 spec 文件,可以自定义 PyInstaller 的打包过程,以满足特定的需求和要求

pyinstaller 打包参数
PyInstaller 是一个用于将 Python 源文件(.py)打包成可执行文件的工具。在 PyInstaller 的打包过程中,可以选择相关 options 参数来实现其他预期效果

pyinstaller options… ~/myproject/source/myscript.py

常用命令参数

-F, --onefile:打包一个单个文件,产生一个文件用于部署。

-D, --onedir:打包多个文件,产生一个目录用于部署。

-K, --tk:在部署时包含 TCL / TK。

-a, --ascii:不包含编码,在支持 Unicode 的 python 版本上默认包含所有的编码。

-d, --debug:产生 debug 版本的可执行文件。

-w, --windowed, --noconsole:使用 Windows 子系统执行,当程序启动的时候不会打开命令行(只对 Windows 有效)。

-c, --nowindowed, --console:使用控制台子系统执行(默认),当程序启动的时候会打开命令行(只对 Windows 有效)。

-i, --icon=<file.ico>:将 file.ico 添加为可执行文件的资源,改变程序的图标(只对 Windows 系统有效)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/546051.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

记录--病理切片图像处理

简介 数字病理切片&#xff0c;也称为全幻灯片成像&#xff08;Whole Slide Imaging&#xff0c;WSI&#xff09;或数字切片扫描&#xff0c;是将传统的玻片病理切片通过高分辨率扫描仪转换为数字图像的技术。这种技术对病理学领域具有革命性的意义&#xff0c;因为它允许病理…

Git分布式版本控制系统——在IDEA中使用Git(二)

四、IDEA中本地仓库的操作 1.将文件加入暂存区 2.将暂存区的文件提交到版本库(相当于git commit) 3.查看日志 五、IDEA中远程仓库的操作 1.查看远程仓库 2.添加远程仓库 3.推送至远程仓库 4.从远程仓库拉取

pyqt实现星三角减压启动

这个对于plc上实现是非常容易得。它本来就是逻辑控制器&#xff0c;如果用代码实现它&#xff0c;该怎么做呢&#xff1f;这个实现起来看似简单&#xff0c;实则是有不少坑的&#xff08;大神除外&#xff09;。我一直想用类来封装&#xff0c;让它继承QObject,为啥非要继承QOb…

为什么MySQL数据库超过2000万条数据,查询依然很快:B+树和数据页结构解析

MYSQL数据库单表建议最大2000万条数据&#xff0c;很多人都说如果超过了2000万条数据&#xff0c;性能就会下降的特别厉害。但是你实际上存储后&#xff0c;发现即使超过了2000万但是查询依旧很快&#xff0c;这是为什么&#xff1f; Mysql为了查询速度&#xff0c;内部使用了…

私域流量变现干货:轻松盘活,高效增长!

你知道如何增长私域流量并将这些流量转化为实际收益&#xff0c;让我们的品牌价值最大化吗&#xff1f; 今天&#xff0c;就分享几点干货&#xff0c;帮助大家盘活私域流量&#xff0c;实现高效增长&#xff01; 1、精准定位和用户画像 首先&#xff0c;了解您的私域流量源于…

JavaWeb开发03-Mybatis入门-基础操作-XML映射文件-动态SQL

一、Mybatis-入门 Java程序控制数据库 1.入门 定义实体类&#xff1a;一定要和表中的字段一一对应 配置连接数据库数据 建立Mapper层语句&#xff0c;来获取数据库数据以及将其封装到user的list中去。 2.配置SQL提示 为了进行查询数据库中有哪些表&#xff0c;所以得连接数据…

详解IP证书申请

申请IP证书&#xff0c;也被称为IP SSL证书&#xff0c;是一种特殊的SSL证书&#xff0c;它不同于传统的域名验证&#xff08;DV&#xff09;证书&#xff0c;是通过验证公网IP地址而不是域名来确保安全连接。这种证书用于保护IP地址&#xff0c;并在安装后起到加密作用。以下是…

VTK —— 一、Windows10下编译VTK源码,并用Vs2017代码测试(附编译流程、附编译好的库、vtk测试源码)

效果 编译 1、下载VTK8.2.0源码        2、解压源码后&#xff0c;进入目录创建build目录&#xff0c;同时在build内创建install目录 (下图install目录是在cmake第一次后才手动创建&#xff0c;建议在创建build时创建)        3、打开CMake&#xff0c;如下图填入…

CSS 这就是一个按照我看到的css ,边用边总结的笔记~

margin 和 paddingdisplay外部表现类(display-outside) : block , inline内部表现类(display-inside) : flex,gird,table,flow,flow-root,ruby margin 和 padding 可以设置1~4个属性 属性个数属性值1一起设置 上下左右2分别设置 上下 , 左右3分别设置 上 , 左右 , 下4分别设置…

戏作打油诗《无知》

笔者经营多年的《麻辣崇州论坛》&#xff0c;半月前突被攻击我在“霸屏”&#xff0c;没处讲理&#xff0c;特戏作打油诗《无知》一首&#xff0c;为那个无理取闹、砸我“麻辣崇州论坛”的无知小儿画像如下。 请点击链接&#xff0c;一目了然&#xff1a;崇州论坛-麻辣社区 没…

Gemini国内怎么使用

GPT、Claude、Gemini全系列模型国内使用方法来了&#xff01; 一直以来很多人问我能不能有个稳定&#xff0c;不折腾的全球AI大模型测试网站&#xff0c;既能够保证真实靠谱&#xff0c;又能够保证稳定、快速&#xff0c;不要老动不动就挂了、出错或者漫长的响应。 到目前为止…

Android T多屏多显——应用双屏间拖拽移动功能(更新中)

功能以及显示效果简介 需求&#xff1a;在双屏显示中&#xff0c;把启动的应用从其中一个屏幕中移动到另一个屏幕中。 操作&#xff1a;通过双指按压应用使其移动&#xff0c;如果移动的距离过小&#xff0c;我们就不移动到另一屏幕&#xff0c;否则移动到另一屏。 功能分析…

基于Python的微博舆论分析,微博评论情感分析可视化系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

ARM/X86+FPGA轨道交通/工程车辆行业的解决方案

深圳推出首条无人驾驶地铁—深圳地铁20号线&#xff0c;可以说是深圳地铁的一次开创性的突破。智能交通不断突破的背后&#xff0c;需要很严格的硬件软件等控制系 统&#xff1b;地铁无人驾驶意味着信号系统、通信系统、综合监控系统、站台屏蔽门工程等项目必须严格执行验收。…

上位机图像处理和嵌入式模块部署(用树莓派4b开发固件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 嵌入式开发的领域其实很广&#xff0c;有上位机、驱动和bsp移植。较早之前&#xff0c;由于自己曾经在芯片公司上班&#xff0c;所以对uboot、linu…

ARM汇编指令、指令中s后缀的作用、N、Z、C、V位有什么作用、ARM汇编启动代码

ARM汇编指令 学习arm汇编的主要目的是为了编写arm启动代码,启动代码启动以后,引导程序到c语言环境下允许。换句话说启动代码的目的是为了在处理器复位以后搭建c语言最基本的需求。因此启动代码的主要任务有: 初始化异常向量表; 初始化各工作模式的栈指针寄存器; 开启arm…

如何通过Linux pciehp sysfs接口控制PCIe Slot电源状态?-2

NVME SSD电源状态判断 通过pciehp sysfs接口对NVMe SSD所在的PCIe插槽进行Power On/Off操作时&#xff0c;确实会间接影响到NVMe SSD本身的电源状态。因为NVMe SSD是作为PCIe设备连接到特定插槽上的&#xff0c;插槽电源状态的变化通常会直接影响到与其相连的设备。 当对PCIe…

网络篇12 | 链路层 ARP

网络篇12 | 链路层 ARP 01 简介1&#xff09;工作过程2&#xff09;ARP缓存2.1 动态ARP表项2.2 静态ARP表项2.3 短静态ARP表项2.4 长静态ARP表项 02 ARP报文格式1&#xff09;ARP请求报文格式2&#xff09;ARP响应报文格式3&#xff09;套一层以太网帧&#xff08;ARP帧&#x…