【需求背景】
Tkinter 是 Python 的標準 GUI 庫。Python 使用 Tkinter 可以快速的創(chuàng)建 GUI 應(yīng)用程序。
我用python寫了一個可視化界面,利用算法計算患COVID-19的概率。
現(xiàn)在需要將Python文件編譯成exe文件,這樣可以直接在Windows上運行,不需要再依賴Python環(huán)境,可以復制到其他電腦中直接使用。
? ? →? ? ?
?
?【操作流程】
1. 安裝編譯工具
pyinstaller是Python中將py文件編譯成為exe文件的免費工具,特別好用,在Windows中,pyinstaller依賴pywin32,所在如果打包有問題請先安裝pywin32模塊,安裝命令如下:
pip install pywin32 # 第一行代碼
pip install pyinstaller # 第二行代碼
一般直接運行第二行代碼,安裝pyinstaller即可,如果不行再執(zhí)行第一行代碼。
2. 編譯命令
2.1 運行時出現(xiàn)dos命令窗口
常用編譯命令為:pyinstaller -F 待編譯目標文件
例如:
pyinstaller -F demo.py # demo.py就是你的python代碼文件名,你可以換成自己的
2.2 運行時不出現(xiàn)dos命令窗口
在將帶有tkinter等界面打包成exe時,運行exe文件的時候,會彈出一個dos命令窗口,這個窗口可以看到一些打印信息,如果想只運行tkinter 頁面,去掉dos命令窗口,需要在打包的時候 加上:?-w
例如:
pyinstaller -F demo.py -w
編譯完成后,一般會在當前文件夾中生成一個dist的文件夾,一個build文件夾和一個demo.spec文件,編譯后的exe文件就在dist文件夾中。
3. 編譯后exe文件太大問題
3.1 可能遇到的問題
很多時候,我們的Python腳本文件本身是很小的,才幾十KB,但編譯后達到幾十MB甚至上百MB,主要原因是在編譯時會把Python環(huán)境及庫一起打包到exe文件中,如果我們的Python環(huán)境中安裝了很多包,比如通過Anaconda安裝的Python環(huán)境時,通過會安裝了很多Python庫,如果在此環(huán)境中進行編譯,那么就會把所有的庫帶上,導致編譯后的exe文件很大。
3.2 解決辦法
為該文件單獨創(chuàng)建相應(yīng)的Python虛擬環(huán)境,只安裝要編譯Python文件所依賴的庫(導入到該Python文件中的庫),在該虛擬環(huán)境中安裝pyinstaller編譯工具(這點很重要),然后運行該虛擬環(huán)境,在虛擬環(huán)境下執(zhí)行編譯,這時文件就會小很多。
親測十分有效,單獨創(chuàng)建Python虛擬環(huán)境后編譯,exe文件大小由原來的95MB減少到16MB,運行速度也快了10倍,原來界面加載出來要40~50秒,現(xiàn)在只要不到5秒。
?
3.3 Windows虛擬環(huán)境創(chuàng)建方法
安裝virtualenv(任意一個地方cmd就可以了):
pip install virtualenv
然后創(chuàng)建一個虛擬環(huán)境(建議將這個虛擬環(huán)境放在需要打包的python文件夾中,便于后續(xù)處理):
virtualenv py2exe_env # 命名請自定義,我這里是命名為py2exe_env
創(chuàng)建完成以后,我們就會在創(chuàng)建的文件夾里發(fā)現(xiàn)虛擬環(huán)境命名的文件夾py2exe_env:
?然后cd 到虛擬環(huán)境py2exe_env的Script目錄下,輸入如下命令啟動虛擬環(huán)境:
activate py2exe_env
?就可以在該虛擬環(huán)境中通過pip安裝必要模塊,注意:別忘了重新安裝pyinstaller !,另外,如果程序中還用到了其他包,也記得安裝。
安裝完成后,在該虛擬環(huán)境中(虛擬環(huán)境啟動狀態(tài)下),cd到要編譯文件目錄下,輸入編譯命令:
pyinstaller -F test.py -w # 運行時不出現(xiàn)dos命令窗口
或者
pyinstaller -F test.py # 運行時出現(xiàn)dos命令窗口
4. customtkinter庫的與眾不同
customtkinter類似tkinter,圖形更加美觀一些,但是網(wǎng)上檢索只能看到大量tkinter打包成exe的教程,我按照網(wǎng)上的步驟操作后發(fā)現(xiàn),雙擊生成的exe,出現(xiàn)黑色命令創(chuàng)口,大約10s后閃退,沒有任何反應(yīng)。
查找錯誤,在exe文件夾中cmd,輸入剛生成的exe文件(我的是demo.exe),一般會有具體的報錯信息。
?報錯信息顯示說,缺少一個json文件。
最開始我也是在缺失的文件上下功夫,缺少啥就補啥的中心思想,但是找了很久也沒有找到類似的報錯信息,后來還是在報錯信息中的鏈接找到了答案。
Packaging · TomSchimansky/CustomTkinter Wiki · GitHub
?當使用 pyinstaller 在 Windows 上創(chuàng)建 .exe 時,需要考慮兩件事,
(1)customtkinter庫不僅包含.py文件,還包含.json和.otf等數(shù)據(jù)文件。PyInstaller 無法將它們打包到單個 .exe 文件中,因此您必須使用該--onedir
選項。
(2)您必須使用 pyinstaller 選項手動包含 customtkinter 目錄--add-data
。因為出于某種原因,pyinstaller 不會自動包含庫中的 .json 等數(shù)據(jù)文件。
?找到你電腦上customtkinter 庫的安裝位置
pip show customtkinter
?將顯示很多信息,其中Location顯示的就是customtkinter 庫。
然后像這樣添加庫文件夾:
--add-data "c:\users\33057\anaconda3\lib\site-packages/customtkinter;customtkinter/"
所以,在打包的時候,完整語句就是
pyinstaller --noconfirm --onedir --windowed --add-data "c:/users/33057/anaconda3/lib/site-packages/customtkinter;customtkinter/" "demo.py"
5、原代碼中有導出數(shù)據(jù)到excel的操作
我需要將每次用于在計算器中輸入的數(shù)據(jù)保存到excel中,按照上述流程打包后,如果沒有導出數(shù)據(jù)部分,則可以運行,但是加了以下代碼后,又出現(xiàn)了沒有任何反應(yīng)的情況。
?還是通過cmd,執(zhí)行exe文件排查錯誤,最后發(fā)現(xiàn)是虛擬環(huán)境中缺少openpyxl這個包,于是在激活的虛擬環(huán)境中安裝這個包。
如果你的程序中還用到了其他包,打包成exe文件后,可以嘗試考慮是否是缺少某個包導致的。
至此,完成了基于customtkinter編寫的GUI界面的python程序打包成exe執(zhí)行文件的全部流程,在生成的dist文件中會生成一個新的文件夾,比如我的是demo文件夾,在這個文件夾中找到exe文件,即可使用。
如果在其他電腦使用,需要將整個demo文件打包過去。
?
?
參考文章或鏈接:文章來源:http://www.zghlxwxcb.cn/news/detail-788993.html
https://blog.csdn.net/Artificial_idiots/article/details/109554749文章來源地址http://www.zghlxwxcb.cn/news/detail-788993.html
到了這里,關(guān)于【python】tkinter程序打包成exe可執(zhí)行文件 全流程記錄(windows系統(tǒng))的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!