跑路和寫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...