【pyinstaller打包pyqt5编写的项目为exe(脱离环境可运行)】
目錄
下載pyinstaller庫(kù)
0、pyinstaller語(yǔ)句介紹
1、單個(gè)py文件打包成exe
1)只有py文件
假設(shè)只有一個(gè)py文件:pyinstaller -F xxx.py
加上圖標(biāo):pyinstaller -F xxx.py -i xxx.ico
取消命令行窗口:pyinstaller -F -w xxx.py -i xxx.ico
2) 不但有py文件,還有其他格式的文件
?進(jìn)入項(xiàng)目所在根目錄
運(yùn)行得到spec文件:pyi-makespec main.py
修改 spec文件
執(zhí)行 pyinstaller -F main.spec命令
2、多個(gè)py文件打包成exe
1)方法一:pyinstaller直接運(yùn)行得到
2)方法二:多步驟進(jìn)行
(1)使用命令行窗口進(jìn)入項(xiàng)目的根目錄
(2)在改目錄下執(zhí)行pyi-makespec main.py(main.py是你的主入口文件)
(3)修改main.spec文件
(4)執(zhí)行 pyinstaller -F main.spec命令
(5)在dist/main文件夾里面點(diǎn)擊.exe文件
3、攜帶非py文件打包exe
1)同上述方法二所述
2)方法一+移動(dòng)data文件夾
4、一些經(jīng)驗(yàn)和技巧
5、參考鏈接
下載pyinstaller庫(kù)
pip install pyinstaller
我這里是使用清華的鏡像下載的,因?yàn)橹苯邮褂?pip install 速度會(huì)慢一點(diǎn),使用國(guó)內(nèi)的鏡像網(wǎng)站那速度可蹭蹭的快啊。
pip install -i http://pypi.douban.com/simple/ pyinstaller0、pyinstaller語(yǔ)句介紹
pyinstaller -F -w -i xxx.ico xxx.py -p x:\...\site_packages
- -F:將xxx.py文件打包成一個(gè)獨(dú)立的可執(zhí)行文件exe,exe文件名為xxx
- -w:運(yùn)行exe時(shí)不會(huì)彈出命令行窗口,不加則在執(zhí)行exe時(shí)會(huì)彈出命令行窗口
- -i:添加xxx.ico圖標(biāo)
- -p:添加環(huán)境site-packages文件夾絕對(duì)路徑
1、單個(gè)py文件打包成exe
1)只有py文件
假設(shè)只有一個(gè)py文件:pyinstaller -F xxx.py
pyinstaller -F xxx.py
運(yùn)行后會(huì)生成一個(gè)dist文件夾,文件夾內(nèi)就是需要的exe文件
?
加上圖標(biāo):pyinstaller -F xxx.py -i xxx.ico
在線生成透明ICO圖標(biāo)——ICO圖標(biāo)制作http://www.ico51.cn/
pyinstaller -F xxx.py -i xxx.ico
取消命令行窗口:pyinstaller -F -w xxx.py -i xxx.ico
在運(yùn)行上述命令生成的exe會(huì)出現(xiàn)命令行,取消則運(yùn)行:
pyinstaller -F -w xxx.py -i xxx.ico
或者:
pyinstaller -F mycode.py --noconsole
2) 不但有py文件,還有其他格式的文件
有時(shí)候可能需要和一些配套的文件進(jìn)行打包,比如圖像,TXT等,這時(shí)候按照下述進(jìn)行
-
?進(jìn)入項(xiàng)目所在根目錄
比如需要打包的文件為xxx.py,項(xiàng)目名為project,即project\xxx.py的結(jié)構(gòu)
則在命令行通過(guò)cd ...\project 進(jìn)入根目錄
如下圖假設(shè)就打包main,py文件為可執(zhí)行文件exe,則是進(jìn)入:bank中
-
運(yùn)行得到spec文件:pyi-makespec main.py
假設(shè)文件為main.py,則運(yùn)行:
pyi-makespec main.py
運(yùn)行后會(huì)得到main.spec文件
-
修改 spec文件
剛開(kāi)始main.spec文件打開(kāi)后:data為空
1.要在第一行,也就是a = Analysis([‘main.py’])這里面添加你的所有的.py文件,注意是所有的而且只能是.py文件,第一個(gè)是代碼你的入口文件。
另外假如.py文件不是與你的主入口文件main.py文件在同一個(gè)目錄下,那么該文件要寫(xiě)絕對(duì)路徑。
2.修改datas(放一些圖片音頻等文件),這里面是放非.py文件,這里是以元組的形式,(“文件夾的絕對(duì)路徑”,“文件夾名”)注意這里不是寫(xiě)具體的文件名,而是文件夾。
下面是我修改過(guò)后的:
我這里data里面有一個(gè).txt文件,像什么照片啦,音頻啦同樣的道理。
-
執(zhí)行 pyinstaller -F main.spec命令
?pyinstaller -F -w -i tubiao.ico main.spec
運(yùn)行后會(huì)得到一個(gè)dist文件夾,文件夾里面又一個(gè)以main命名的文件夾,在mian文件夾里面找到exe即可
2、多個(gè)py文件打包成exe
1)方法一:pyinstaller直接運(yùn)行得到
### pyinstaller 所有需要打包的py文件 -p 環(huán)境site-packages絕對(duì)路徑
### 注意:py文件的路徑需要以第一個(gè)py文件為準(zhǔn)
pyinstaller -w -i data\\fa.ico firstUI_logic.py firstUI.py getFeathers.py nms.py operateUI.py operateUI_logic.py? -p D:\softwares_install\Anaconda3\envs\Train\Lib\site-packages
運(yùn)行后會(huì)得到dist,在dist里面的firstUI_logic文件夾中找到exe文件即可
2)方法二:多步驟進(jìn)行
(1)使用命令行窗口進(jìn)入項(xiàng)目的根目錄
我這里就是 進(jìn)入到E:\ljl\bank。
(2)在改目錄下執(zhí)行pyi-makespec main.py(main.py是你的主入口文件)
執(zhí)行完畢之后,會(huì)生成一個(gè)main.spec文件
(3)修改main.spec文件
剛開(kāi)始main.spec文件打開(kāi)后是
1.要在第一行,也就是a = Analysis([‘main.py’])這里面添加你的所有的.py文件,注意是所有的而且只能是.py文件,第一個(gè)是代碼你的入口文件。
另外假如.py文件不是與你的主入口文件main.py文件在同一個(gè)目錄下,那么該文件要寫(xiě)絕對(duì)路徑。
2.修改datas(放一些圖片音頻等文件),這里面是放非.py文件,這里是以元組的形式,(“文件夾的絕對(duì)路徑”,“文件夾名”)注意這里不是寫(xiě)具體的文件名,而是文件夾。
下面是我修改過(guò)后的:
我這里data里面有一個(gè).txt文件,像什么照片啦,音頻啦同樣的道理?
(4)執(zhí)行 pyinstaller -F main.spec命令
在界面中輸入 pyinstaller -F -w -i tubiao.ico pyexe.spec(-i 后面跟著的是exe程序的圖標(biāo),最后跟.spec文件)
(-F:產(chǎn)生一個(gè)文件;-w:使用Windows子系統(tǒng)執(zhí)行,不會(huì)打開(kāi)命令行)
pyinstaller -F mycode.py --noconsole
還可以這樣pyinstaller -F -w mycode.spec (-w就是取消窗口)
這時(shí)候會(huì)生成兩個(gè)文件夾,build和dist。然后.exe文件就在里面,快點(diǎn)開(kāi)看看吧。
(5)在dist/main文件夾里面點(diǎn)擊.exe文件
運(yùn)行后會(huì)得到dist,在dist里面的firstUI_logic文件夾中找到exe文件即可?
3、攜帶非py文件打包exe
1)同上述方法二所述
2)方法一+移動(dòng)data文件夾
- 運(yùn)行方法一會(huì)得到dist文件夾,dist文件夾中會(huì)有一個(gè)firstUI_logic文件夾
- 將存放了非py文件的data文件移動(dòng)到firstUI_logic文件夾下即可
注意:因?yàn)樯婕暗椒莗y文件,所以在py文件編寫(xiě)的時(shí)候,涉及到引用這些非py文件時(shí),需要對(duì)文件的根目錄進(jìn)行獲取:
一般是先自動(dòng)獲取得到當(dāng)前exe的根目錄dirfile;
然后通過(guò)字符串拼接來(lái)得到非py文件的具體文件夾:dirfile + "\data\非py文件名"
4、一些經(jīng)驗(yàn)和技巧
1)在編寫(xiě)時(shí),盡量使用from xxx import xxx,而不是直接import xxx,然后通過(guò)xxx.xxx來(lái)使用。比如from cv2 import imread,和import cv2,前者只是導(dǎo)入了imread,而后者直接復(fù)制了cv2,導(dǎo)致后續(xù)打包的exe過(guò)大
2)根據(jù)以往的經(jīng)驗(yàn)一般是使用【方法一+移動(dòng)data文件夾+保留命令行窗口】方法來(lái)進(jìn)行打包,成功率高,且通過(guò)命令行來(lái)進(jìn)行exe運(yùn)行,可以看到有什么異常進(jìn)而進(jìn)行修改
pyinstaller? -i data\\fa.ico firstUI_logic.py firstUI.py getFeathers.py nms.py operateUI.py operateUI_logic.py? -p D:\softwares_install\Anaconda3\envs\Train\Lib\site-packages
注意沒(méi)有-w,保留了命令行窗口
3)有時(shí)候可能會(huì)出現(xiàn)導(dǎo)入包錯(cuò)誤,可能在打包好的文件夾中對(duì)應(yīng)的包位置缺少了相應(yīng)的pyd文件,比如pyinstaller打包執(zhí)行exe出現(xiàn)“ModuleNotFoundError: No module named ‘scipy.spatial.transform._rotation_group”
?
上述其實(shí)就是說(shuō)明在打包完成的dist文件夾中的文件夾中對(duì)應(yīng)的庫(kù)中缺少pyd文件,需要補(bǔ)充上,具體見(jiàn):
pyinstaller打包執(zhí)行exe出現(xiàn)“ModuleNotFoundError: No module named ‘scipy.spatial.transform._rotation_group”_python_AI_fans的博客-CSDN博客https://blog.csdn.net/qq_45769063/article/details/112713682
.py文件轉(zhuǎn)為.pyd文件_李鑫玉的博客-CSDN博客_python py轉(zhuǎn)pydhttps://blog.csdn.net/qq_41007606/article/details/109565069
5、參考鏈接
【項(xiàng)目實(shí)戰(zhàn)】——Python打包正裝換底色代碼為exe文件(可在其他無(wú)Python環(huán)境下運(yùn)行)_python_AI_fans的博客-CSDN博客https://blog.csdn.net/qq_45769063/article/details/109128507
總結(jié)
以上是生活随笔為你收集整理的【pyinstaller打包pyqt5编写的项目为exe(脱离环境可运行)】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 11 Python之初识函数
- 下一篇: centos踩坑指南之安装compose