從打包到跑路 記PYQT的打包之路

2021-09-13 20:22:26 字數 1739 閱讀 2113

跑路和寫c++比起來,寫python是一件很爽的事情,為了一直寫python一直爽,就算在寫帶介面的桌面應用時,我們也可以選擇pyqt(雖然文件比起qt來亂了不少,但為了一直爽,這點小折磨還是可以忍受的,遇到問題搜一搜總是能解決的)。

但俗話說出來混總是要還的,當**寫完,有需求需要打包發布的時候,問題來了:該怎麼打包呢?

在經過一番搜尋調研之後,我們可以發現,py一般主流用以下兩個工具模組進行打包:

1、py2exe

2、pyinstaller

那麼下面就是選擇題了,由於我打包專案的時候py2exe還不支援python3.4以上的版本,而我當時恰恰用的是python3.5,為了打包而將專案再整體遷移到另乙個版本這種事情,不到萬不得已我們是做不出來的,所以對當時的我來說只有一條路,pyinstaller。(現在py2exe貌似已經全面支援了python3,如果有興趣的童鞋可以嘗試)

py2exe和pyinstaller這兩個工具的基本用法和文件說明在官網中都有介紹,我們在愉快的安裝完工具模組後,本以為幾行命令就可以搞定收工,不料這才是漫漫旅途的第一步。。。

我們按葫蘆畫瓢,假設這裡的打包的目標檔案為main.py:

pyinstaller main.py
我們按下回車執行命令,會驚喜的發現執行過程中會出現一堆warnning,雖然最終也可以生成exe,當雙擊開啟後會提示缺少依賴的***dll檔案,然後喜聞樂見的失敗。

也許是姿勢不對?不甘心失敗的我們也許會嘗試按例子,換乙個簡單的py程式(比如沒有介面的helloworld)來進行打包,結果時so easy的一次成功,那麼很顯然了,pyqt有什麼特殊的地方。

於是再經過一番緊張的搜尋,我們找到了答案,pyqt執行所依賴的dll檔案沒有被打包進去,那麼加進去再來:

pyinstaller  -

-path 「d:\program files\py3.

5\lib\site-packages\pyqt5\qt\bin」 main.py

這裡d:\program files\py3.5\lib\site-packages\pyqt5\qt是我本機pyqt的安裝路徑(相關的dll在bin資料夾下),大家可以根據自己的實際情況進行調整,再次回車執行,謝天謝地,總算能夠看到介面了。

已經被使用很久的工具顯然不會連這點功能都不具備,這裡有兩個解決辦法:

1、將需要使用的資源檔案拷貝到打包好的exe檔案目錄下,注意**中使用這些資源的時候的路徑;

2、修改pyinstaller的spec檔案,將需要打包的配置檔案填進去,比如:

a = analysis(..

. datas=[(

'src/readme.txt'

,'.')]

,...

)

pyinstaller  -

-path 「d:\program files\py3.

5\lib\site-packages\pyqt5\qt\bin」 -

-path "d:\program files\python3\lib\site-packages\pyqt5\qt\plugins" main.py

'./plugins'

)這樣再折騰一番,就算是gif格式的,也應該能看到了。

經歷了以上種種磨難之後,我們可以得出這樣的結論:pyqt可以用,但如果最終需要打包的話,我們就需要好好考慮一下了,這時候也許回歸qt才是正路。

面試 AssetBundle從打包到使用

選擇要打ab包的 prefab 檢視其 inspector 檢視,在下方有乙個 asset labels 小視窗,修改裡面的名字為想要打包成後的檔名,完成標記。unityeditor.buildpipeline.buildassetbundles outputpath,option,targetpl...

Angular 10 x從打包到部署IIS上

angular10.x 從打包到部署iis上 通過cmd命令列或者vscode執行 ng build prod會產生乙個dist目錄,然後講這個目錄複製到iis伺服器,發現可以正常訪問,但是一重新整理鏈結到其他頁面時會立馬報錯,這個時候就需要安裝 microsoft url 重寫模組 2.0 在該 ...

最簡單的pyqt打包流程

前置條件 python2.6 pyqt4 py2exe 用qt設計師建立乙個對話方塊 將 ui檔案轉換成 py檔案 pyuic4 o hellopyqt4.py hellopyqt4.ui 編寫簡單的測試程式 from pyqt4.qtgui import from pyqt4.qtcore imp...