日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

手把手教你将pyqt程序打包成exe(2)

發布時間:2024/9/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 手把手教你将pyqt程序打包成exe(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

手把手教你pyqt程序打包成exe


如果是打包萌新,建議您先看:

上一篇提到打包的環境和打包示例一(沒有外部資源依賴的打包):
手把手教你pyqt打包成exe(1)

文章目錄

  • 手把手教你pyqt程序打包成exe
    • 0x00 示例二
      • 項目文件結構
      • 資源文件說明
    • 預處理
    • 單文件夾打包
    • 單文件打包
        • pyqt打包exe的icon“沒有顯示”的原因:
    • .spec文件
    • 總結
    • 說明

這篇將講解示例二(帶有多個外部資源依賴程序的打包),同時進一步講解.spec文件。

0x00 示例二

項目文件結構


需要打包的項目復制出一份,然后適當調整項目文件結構。

為什么我一直強調項目文件結構?

我個人覺得,項目文件結構調整好,才不容易出現因為在某個py文件引用了其他py的內容,由于自己import操作不當而出現打包后找不到某個引用的模塊等問題。。

再說,如果只是自己
為了打包一個比較實用的exe(可以發exe文件別人,然后在其他電腦上正常運行),那么我完全可以將項目文件結構調整的更利于打包的形式。比如:將多個py文件合并到一個py文件,這樣就可以避免因為自己import不當而出現的打包后運行出錯的問題。

ps:用pyinstaller打包exe,我研究了將近兩天時間,不斷找資料,不斷嘗試。最后作個總結,也希望能夠幫到某些人。如果有不太對的地方,希望大家積極指出~

資源文件說明

示例二項目文件:
引用了多個外部資源文件,如圖中紅色矩形所示。

MainDemo.py集成了其他的py里的類。

我們的目標是把外部資源文件一起打包”進“exe文件,并且要正常運行。

本來這些外部資源文件不是在src下的,我是為了避免各種出錯才把它放在了src文件夾下。

這次我們先來單個文件夾打包~

預處理

我們引用的文件資源,路徑全部用的是我們本機上的(相對)路徑。如果移動到其他計算機上,那么很可能因為依賴的外部資源文件路徑不同而無法運行。
直接上解決措施吧。
需要新建一個py文件來”凍結”資源文件路徑:
frozen_dir.py

import sys import os def app_path():"""Returns the base application path."""if hasattr(sys, 'frozen'):# Handles PyInstallerreturn os.path.dirname(sys.executable)return os.path.dirname(__file__)if __name__=='__main__':print(app_path())

這個py文件是為了獲得’凍結了’的基路徑
其他文件路徑,可由基路徑+字符串 拼接獲得。
要注意這個py文件放的位置,要在src下。

要引用外部資源文件的地方,那個py文件要import frozen_dir,
資源路徑 = app_path() + xxx/xx
比如要引用imgs里面的圖片,

base = frozen_dir.app_path() 圖片路徑 = '{}\imgs\分析.png'.format(base)

引用其他資源文件同理,因為凍結路徑的py文件和它們一樣都在src下。
這樣不管,在哪臺計算機中運行,都會相對’凍結路徑‘的基路徑來精確獲得資源路徑。

基于凍結的基路徑將引用的外部資源文件的路徑設置好后,我們開始來打包。

單文件夾打包

pyinstaller -D -w -i .\halo.ico .\MainDemo.py


此時去dist中的文件夾下找到exe雙擊運行:

cmd運行:

發現并沒有提示錯誤。
為什么?
因為我能程序里引用的外部資源并沒有打包進去
我們來修改.spec:

add_files是一個列表,列表里元素是元組,
元組第一項是要引用的外部資源的路徑(可以是文件/文件夾),第二項是打包進exe,在exe中的路徑(所在文件夾)

然后輸入:

pyinstaller .\MainDemo.spec

重新構建exe

再去dist里面找exe并運行:

完美~

PS:
細心的崽崽一定會發現,其實只是把外部資源文件拷貝了一份在exe所在的文件夾下,并不是壓縮到exe里面去~
(圖片資源可以壓縮進exe,通過
編寫qrc文件轉換為py文件,導入py文件,修改引用----》
手把手教你pyqt中.qrc圖片文件的編寫和使用)

所以,剛才也可以不修改.spec文件,可以直接把外部資源文件拷貝進exe所在文件夾,這樣也可以運行exe。

再次Tip:只要dist文件夾里的有用,發給別人的時候只需要發這里面的東西即可(本來pyqt打包的exe就比較龐大,更沒必要發一下沒用的文件給別人)

下面來演示單文件打包。

單文件打包

pyinstaller -F -w -i .\halo.ico .\MainDemo.py

一開始我以為exe圖標沒有成功加上去。
害的我還不斷嘗試,嘗試的要崩潰的感覺。挺扎心的,不過還好沒放棄~

pyqt打包exe的icon“沒有顯示”的原因:

這里icon沒顯示的原因:
其實是因為icon不夠大,而圖標又放的太大顯示不出來。

真的顯示不了的原因可能是圖標不符合icon標準

只需要按住ctrl+鼠標滾輪縮小即可看的icon…

此時雙擊能運行嗎?
我為啥要先做單文件夾的演示?哈哈~


解決方案和上面一樣。
簡單的肯定不是改.spec文件在重構。
而是把依賴的資源文件/文件夾拷貝到exe所在目錄下。
也正好驗證一下上面提到的!


示例演示就暫時到這里了,希望能帶給你點啟發,給你點幫助~
如果有幫助或者啟發,關注我,或者給我點個贊,留個言,就是對我最大的鼓勵了!!
------》現在是2020/04/26/ 0:30

.spec文件

篇幅原因 + 太晚了!!
這里也簡單介紹一點.spec里面的配置吧。
研究深入點+有時間 再單獨寫一篇吧。

總結

pyqt程序打包成exe需要自己多折騰~
還要想辦法壓縮打包exe的體積。
有時間也可以多去了解一下pyqt生成的exe的編譯和反編譯…

說明

如果有幫助或者啟發,關注我,或者給我點個贊,留個言,就是對我最大的鼓勵了!!** ------》現在是2020/04/26/ 0:59

參考:文獻1

總結

以上是生活随笔為你收集整理的手把手教你将pyqt程序打包成exe(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。