【项目实战】——Python打包正装换底色代码为exe文件(可在其他无Python环境下运行)

目录

1.安装pyinstaller

2.生成.exe文件

方法1:

方法2:

方法3:

(1)使用命令行窗口进入项目的根目录

(2)在改目录下执行pyi-makespec main.py(main.py是你的主入口文件)

(3)修改main.spec文件

(4)执行 pyinstaller -F main.spec命令

(5)在dist/main文件夹里面点击.exe文件

参考:

不同博主关于生成exe文件的文章

bug解决

生成图标



1.安装pyinstaller

我这里是使用清华的镜像下载的,因为直接使用 pip install 速度会慢一点,使用国内的镜像网站那速度可蹭蹭的快啊。

pip install -i http://pypi.douban.com/simple/ pyinstaller



2.生成.exe文件

方法1:

### pyinstaller 所有需要打包的py文件 -p 环境site-packages绝对路径

### 注意:py文件的路径需要以第一个py文件为准
pyinstaller Voc_xml_expander.py dataTransform.py Voc_xml_expander_logic.py
images_transform.py labels_transform.py -p D:\softwares_install\Anaconda3\envs\Train\Lib\site-packages

方法2:

最直接的方法:

pyinstaller -F -w 主py文件的绝对路径
pyinstaller -F -w C:\Users\...\Main.py

方法3:

其他比较全面的方法


(1)使用命令行窗口进入项目的根目录

我这里图反面,直接在
我这里就是 进入到E:\ljl\bank。


(2)在改目录下执行pyi-makespec main.py(main.py是你的主入口文件)

执行完毕之后,会生成一个main.spec文件


(3)修改main.spec文件

刚开始main.spec文件打开后是
在这里插入图片描述
1.要在第一行,也就是a = Analysis([‘main.py’])这里面添加你的所有的.py文件,注意是所有的而且只能是.py文件,第一个是代码你的入口文件。
另外假如.py文件不是与你的主入口文件main.py文件在同一个目录下,那么该文件要写绝对路径。
2.修改datas(放一些图片音频等文件),这里面是放非.py文件,这里是以元组的形式,(“文件夹的绝对路径”,“文件夹名”)注意这里不是写具体的文件名,而是文件夹。

下面是我修改过后的:
在这里插入图片描述
我这里data里面有一个.txt文件,像什么照片啦,音频啦同样的道理。


(4)执行 pyinstaller -F main.spec命令

在界面中输入 pyinstaller -F -w -i tubiao.ico pyexe.spec(-i 后面跟着的是exe程序的图标,最后跟.spec文件)

(-F:产生一个文件;-w:使用Windows子系统执行,不会打开命令行)

pyinstaller -F mycode.py --noconsole

还可以这样pyinstaller -F -w mycode.spec (-w就是取消窗口)

这时候会生成两个文件夹,build和dist。然后.exe文件就在里面,快点开看看吧。
在这里插入图片描述
在这里插入图片描述


(5)在dist/main文件夹里面点击.exe文件

哇塞,好厉害哟,下次就直接把这个文件夹发给比人就好啦。

import cv2
import numpy as np
import os#使用os的path模块来获得桌面的路径
def desktop_path():return os.path.join(os.path.expanduser('~'),"Desktop")
# print(desktop_path())#收集用户需要输入的参数
def inputParams():path = input("输入需要换底色的正装照绝对路径:")orignColor = input("输入当前正装照的底色:蓝色——b,红色——r:")changedColor = input("输入需要换成正装照的底色:蓝色——b,红色——r,白色——w:")return path,orignColor,changedColor#蓝底换成其他的颜色
def Blue2Others(path,changedColor):img = cv2.imread(path)# 图像缩放img = cv2.resize(img, None, fx=0.5, fy=0.5)rows, cols, channels = img.shape# 图片转换为灰度图hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)# 图片的二值化处理,可能会出现噪声(白点),有的图片显示的很明显,这就需要我们进行腐蚀或膨胀。lower_blue = np.array([70, 70, 70])upper_blue = np.array([110, 255, 255])mask = cv2.inRange(hsv, lower_blue, upper_blue)  # 蓝色范围内变白,其余之外全部变黑# 腐蚀膨胀,主要用于去处噪声erode = cv2.erode(mask, None, iterations=1)  # 进行腐蚀操作dilate = cv2.dilate(erode, None, iterations=1)  # 进行膨胀操作# 遍历每个像素点,进行颜色的替换for i in range(rows):for j in range(cols):if dilate[i, j] == 255:  # 像素点为255表示的是白色,此处将白色处的像素点替换为红色(将if dilate[i,j]==255中的dilate换成erode对比试试)if changedColor == 'r':img[i, j] = (50, 50, 255) # 此行将蓝底替换成红底,即(0,0,255)代表红色,由于历史原因,为BGR(蓝绿红)通道,不是RGB(红绿蓝)通道,所以255放第三个位置else:img[i,j] = (255,255,255)  # 此行将蓝底替换成白底,即(255,255,255)代表白色return img# 红底换成其他的颜色
def Red2Others(path, changedColor):img = cv2.imread(path)# 图像缩放img = cv2.resize(img, None, fx=0.5, fy=0.5)rows, cols, channels = img.shape# 图片转换为灰度图hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)# 图片的二值化处理,可能会出现噪声(白点),有的图片显示的很明显,这就需要我们进行腐蚀或膨胀。lower_red = np.array([0, 90, 70])upper_red = np.array([110, 255, 255])mask = cv2.inRange(hsv, lower_red, upper_red)  # 蓝色范围内变白,其余之外全部变黑# 腐蚀膨胀,主要用于去处噪声erode = cv2.erode(mask, None, iterations=1)  # 进行腐蚀操作dilate = cv2.dilate(erode, None, iterations=2)  # 进行膨胀操作# 遍历每个像素点,进行颜色的替换for i in range(rows):for j in range(cols):if dilate[i, j] == 255:  # 像素点为255表示的是白色,此处将白色处的像素点替换为红色(将if dilate[i,j]==255中的dilate换成erode对比试试)if changedColor == 'b':img[i, j] = (255, 0, 0)  # 此行将红底替换成蓝底,即(255,0,0)代表lan色,由于历史原因,为BGR(蓝绿红)通道,不是RGB(红绿蓝)通道,所以255放第三个位置else:img[i, j] = (255, 255, 255)  # 此行将红底替换成白底,即(255,255,255)代表白色return imgdef main():path, orignColor, changedColor = inputParams()if orignColor == 'r':img = Red2Others(path,changedColor)elif orignColor == 'b':img = Blue2Others(path,changedColor)print("选中显示的图片,按下s键保存图片")cv2.imshow('changedImg',img)# 窗口等待的命令,0表示无限等待k = cv2.waitKey(0)  #监听键盘事件if k == ord('s'):   #英文状态下键盘按s键,会将图片保存至桌面# font = cv2.FONT_HERSHEY_DUPLEX#参数依次为:涂鸦的图片、涂鸦的文字、位置、字体、字体大小、字体颜色、字体画笔粗细# img = cv2.putText(img,"girl",(10,30),font,0.5,(0,0,0),2)desktopPath = desktop_path()savePath = desktopPath + "\changedImg.jpg"print("照片已保存至:%s" % savePath)cv2.imwrite(savePath,img, [int(cv2.IMWRITE_JPEG_QUALITY),100])cv2.destroyWindow('changedImg')  #保存完后销毁名称为red的窗口else:cv2.destroyAllWindows()if __name__ == '__main__':try:main()except:print("请输入正确路径、原底色以及需要换的底色代号!!!")

参考:

不同博主关于生成exe文件的文章

Pyinstaller使用 - 知乎

【Python】-如何将自己所写的程序打包然后在别人的电脑上运行(使用pyinstall打包多个.py文件成.exe)_放开这颗白菜让我来-CSDN博客_python打包exe到别的电脑

学习笔记(42):Python实战编程-pyinstaller程序打包_python_AI_fans的博客-CSDN博客

pyinstaller打包时提示UPX is not available._Veiko的博客-CSDN博客

https://blog.csdn.net/qq_27017791/article/details/102748766

https://blog.csdn.net/ZhangHW_/article/details/99697285

bug解决

pyinstaller打包时提示UPX is not available._Veiko的博客-CSDN博客

pyinstaller设置icon图标出现“struct.error: unpack requires a buffer of 16 bytes” - Amy鱼 - 博客园

生成图标

在线生成透明ICO图标——ICO图标制作

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(三)码农网

12. 安装 Apache Tomcat Tomcat 是由 Apache 设计的用来运行 Java HTTP web 服务器的 servlet 容器。按照下面的方法安装 tomcat,但需要指出的是安装 tomcat 之前必须先安装 Java。 # yum install tomcat 安装 Apache Tomcat 安装完 tomcat 之后,启动 to…

QT5.14.2基于PCL1.11.1显示点云(基于Windows VS2019开发环境)

文章目录一、安装1.1 PCL安装1.2 QT安装1.3 VTK编译二、程序配置1. 基于mscv创建QT的程序2. 配置QT工程文件和依赖项3. 编写点云显示的小程序总结一、安装 1.1 PCL安装 PCL1.11.1库的安装网上教程很多,推荐一个很好的教程: Win10 系统下 VisualStudio2…

Spring学习笔记—最小化Spring XML配置

自动装配(autowiring)有助于减少甚至消除配置<property>元素和<constructor-arg>元素&#xff0c;让Spring自动识别如何装配Bean的依赖关系。 自动检测(autodiscovery)比自动装配更进了一步&#xff0c;让Spring能够自动识别哪些类需要被配置成Spring Bean&#xf…

【数据结构】——快速排序

目录 一、代码 二、复杂度&#xff1a;O(nlog(n)) 三、快速排序的劣势 视频参考链接&#xff1a;https://www.bilibili.com/video/BV1mp4y1D7UP?p17 一、代码 思想&#xff1a;假设是对一个list进行排序 1、选取第一个元素作为p元素&#xff1b; 2、将p元素归位&#xff0…

读取数据库信息构建视图字段的备注信息,方便程序代码生成

在很多情况下&#xff0c;我们开发都需要有一个快速的代码生成工具用来提高开发效率&#xff0c;代码生成工具很多信息都是读取数据库的表、视图等元数据进行对象表信息的完善&#xff0c;有了这些信息&#xff0c;我们就可以在普通的实体类代码里面添加属性字段的中文注释&…

微博分享错误

昨天再做这块的时候&#xff0c;不知怎么的点击之后什么反应都没有&#xff0c;程序也没有崩&#xff0c;日志倒是输出了这个错误 解决办法&#xff1a;打开你写分享的代码跟API文档对比一下创建文本、图片或者网页的时候是不是少写了那个属性&#xff0c;我这里是在创建网页的…

代码生成工具之界面快速生成

界面开发&#xff0c;无论对于Web开发&#xff0c;还是Winform开发&#xff0c;都需要耗费一定的时间&#xff0c;特别对于一个数据库字段比较多的界面&#xff0c;一般就需要在编辑界面上摆的更多的控件来做数据显示&#xff0c;每次碰到这个&#xff0c;都有点头痛&#xff0…

javascript - 封装原生js实现ajax

1 /*2 * ajax方法3 */4 var Ajax function() {5 var that this;6 //创建异步请求对象方法7 that.createXHR function() {8 if(window.XMLHttpRequ…

QT对象树、信号和槽机制

文章目录一 、对象树是什么&#xff1f;二、信号和槽的基本概念2.1 信号2.2 槽2.3 松散耦合2.4 特点三、示例总结一 、对象树是什么&#xff1f; 对象树是由父类和若干子类对象组成&#xff0c;而子类也可以由若干孙类。 QT中的对象树是以QObject为起始父类来完成树的构建的&a…

【数据结构】——归并排序

目录 一、代码 二、随笔 一、代码 归并排序的主要思路&#xff1a;将两个有序的子列表归并为一个有序的大列表 #归并函数&#xff0c;假设li是由左右两个有序的子列表组成,假设两个子列表都是从小到大排好序的列表 def merge(li,low,mid,high)::param li: 由左右两个有序的子列…

开发发布npm module包

开发发布npm module包 问题 在项目开发过程中&#xff0c;每当进入一个新的业务项目&#xff0c;从零开始搭建一套前端项目结构是一件让人头疼的事情&#xff0c;就要重新复制一个上一个项目的前端框架和组件代码库。其中很多功能的模块组件都要重复拷贝&#xff0c;可以统一将…

如何使用ATS提高应用的安全性

App Transport Security&#xff0c;简短的说就是ATS&#xff0c;是iOS9和OS X El Capitan的一个新特性。App Transport Security 的目标是提高Apple 操作系统的安全性以及在此操作系统上运行的任何应用的安全性。 基于HTTP传输数据的网络请求都是明文。开启App Transport Secu…

手机客户端测试考虑的点

手机客户端测试考虑点总结 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 此文未本人工作中的总结&#xff0c;特此总结。 异常场景&#xff1a; 网络异常&#xff0c;服务器异常&#xff0c;接口异常或参考参数篡改&#xff0c;断电&#xff0c;…

NMS(非极大值抑制)算法详解与示例

一、NMS是什么&#xff1f; NMS&#xff08;non maximum suppression&#xff09;即非极大值抑制&#xff0c;广泛应用于传统的特征提取和深度学习的目标检测算法中。 NMS原理是通过筛选出局部极大值得到最优解。 在2维边缘提取中体现在提取边缘轮廓后将一些梯度方向变化率较小…

【转载】ASP.NET应用程序与页面生命周期

在本文中&#xff0c;我们将了解不同的事件&#xff0c;ASP.NET 应用程序的生命周期以浏览器向 Web 服务器&#xff08;对于 ASP.NET 应用程序&#xff0c;通常为 IIS&#xff09;发送请求为起点&#xff0c;直至将请求结果返回至浏览器结束。在这个过程中&#xff0c;首先我们…

基于PCL的ICP及其变种算法实现

文章目录前言一、ICP算法基础1.1 提取待匹配点对1.2 计算旋转平移矩阵1.3 计算变换后的点和目标点之间的偏差二、ICP算法变种2.1 PLICP2.2 PointToPlane ICP2.3 NICP2.4 LM_ICP三、程序示例1. 传统方法2. PointToPlane ICP总结前言 ICP&#xff08;Iterative Closest Point&am…

【数据结构】——排序算法系列总结

目录 1、空间复杂度 2、稳定性 3、运行时间 4、目前默认的sort内置函数排序函数 5、六种常用排序方法 1、空间复杂度 空间复杂度产生的原因有两个&#xff1a;①重新定义了一块空间用于存储数据&#xff1b;②递归产生了栈空间 冒泡排序、选择排序、堆排序和插入排序属于…

Spring Boot实践教程(二):SpringApplication分析

2019独角兽企业重金招聘Python工程师标准>>> 本文会通过分析上一篇中跑起来的示例程序来分析一下Spring Boot程序运行的基本原理。 概要 在上一篇的介绍中&#xff0c;程序是通过SpringBoot1HelloworldApplication.main()方法运行起来的&#xff1a; public static …

基于PCL的MLS(移动最小二乘)算法简介与示例

一、MLS基础 mls算法本质上和最小二乘一样&#xff0c;是一种拟合数据的算法。区别在于mls是局部的&#xff0c;即通过系数向量和基函数分别对数据中不同位置的节点区域进行拟合&#xff0c;需要计算出全部节点域的拟合函数的参数。而传统的最小二乘是全局的&#xff0c;采用所…

基于PCL的RANSAC(随机采样一致)算法简介与示例

前言 RANSAC&#xff08;Random sample consensus&#xff0c;随机采样一致&#xff09;是3D点云拟合的一种重要的手段&#xff0c;可以对直线、圆、平面&#xff0c;圆球、圆柱等形状的点云进行拟合&#xff0c;其优点在于可以最大程度上减少噪声点对拟合效果的影响。 一、RA…