【項目實戰】——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.pswp.cn/news/256101.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256101.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256101.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++STL總結筆記(三)—— 常見算法

文章目錄一、基本概念二、程序示例1.遍歷2. 查找3. 排序、拷貝、替換4. numeric相關算法總結一、基本概念 算法是STL中很重要的一部分,其功能包括比較,查找,排序,交換,遍歷,復制等等。 最大的算法頭文件是…

Java zip解壓,并遍歷zip中的配置文件 .cfg或.properties

1.解析cfg或properties配置文件 講配置文件&#xff0c;讀取&#xff0c;并封裝成為map類型數據 /*** 解析cfg文件** param cfgFile* return*/public static Map<String, Object> readCfg(FileInputStream cfgFile) {Properties prop new Properties();Map<String, O…

db2 常用配置

db2set配置&#xff1a; db2set DB2_ENABLE_LDAPNO db2set DB2_ALTERNATE_GROUP_LOOKUPGETGROUPLIST db2set DB2_RESTORE_GRANT_ADMIN_AUTHORITIESON db2set DB2_SKIPINSERTEDON db2set DB2_LOAD_COPY_NO_OVERRIDENONRECOVERABLE db2set DB2_EVALUNCOMMITTEDON db2set DB2_SKIP…

安裝完最小化 RHEL/CentOS 7 后需要做的 30 件事情(三)碼農網

12. 安裝 Apache Tomcat Tomcat 是由 Apache 設計的用來運行 Java HTTP web 服務器的 servlet 容器。按照下面的方法安裝 tomcat&#xff0c;但需要指出的是安裝 tomcat 之前必須先安裝 Java。 # yum install tomcat 安裝 Apache Tomcat 安裝完 tomcat 之后&#xff0c;啟動 to…

【圖像處理】——圖像特效處理(馬賽克、圖像融合、毛玻璃等)

參考:https://blog.csdn.net/qq_43328040/article/details/109081414 import cv2 import numpy as np import random#馬賽克:將一定大小窗口的RGB設置成一個顏色 def horseBox(img):row,col,chal = img.shapeboxRow = int(0.3*row)boxcol = int(0.3*col)for m in range(50,b…

JDK5.0新特性之:泛型

文/陳剛 2005-11-09 一、前言 泛型這個詞在現在的JAVA挺時髦&#xff0c;光從字面上你是無法知道它代表些什么東東的&#xff0c;所以我們還是不要從字面去理解&#xff0c;而是從一些實例去了解它吧。 二、泛型之前的日子 &#xff2a;&#xff24;&#xff2b;&#xff11;.…

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庫的安裝網上教程很多&#xff0c;推薦一個很好的教程&#xff1a; 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;我們就可以在普通的實體類代碼里面添加屬性字段的中文注釋&…

Ubuntu DNS bind9 配置

下面的配置就是實現解析test.zp.com到不同的IP地址 安裝dns server軟件包$ apt-get install bind9 配置dns配置文件的路徑在/etc/bind路徑下面添加一個zone$ /etc/bind# vim /etc/bind/named.conf.local 添加下面&#xff0c;語法可以參照/etc/bind/zones.rfc1918中的語法添加&…

微博分享錯誤

昨天再做這塊的時候&#xff0c;不知怎么的點擊之后什么反應都沒有&#xff0c;程序也沒有崩&#xff0c;日志倒是輸出了這個錯誤 解決辦法&#xff1a;打開你寫分享的代碼跟API文檔對比一下創建文本、圖片或者網頁的時候是不是少寫了那個屬性&#xff0c;我這里是在創建網頁的…

C++總結筆記(十二)—— 智能指針

文章目錄前言一、智能指針是什么&#xff1f;二、示例總結前言 C對于內存管理的要求很高&#xff0c;如果不及時釋放對象內存&#xff0c;就可能會發生內存泄露或野指針等情況&#xff0c;鑒于這種情況&#xff0c;C11提出了智能指針的概念。 一、智能指針是什么&#xff1f;…

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

界面開發&#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;…