python3之cx_Freeze使用(PyQt5)


1.   cx_Freeze簡介

  Python腳本在裝有Python的系統中可以直接雙擊運行,但絕大多數普通用戶並沒有配置此類環境,而編譯為可執行二進制文件后,用戶無需預先安裝Python及依賴庫即可像運行普通程序一樣運行編寫好的Python代碼。有相當數量的Python庫可以實現此類轉換,此文檔主要對cx_Freeze的使用進行總結分享。

2.   cx_Freeze包更替

  cx_Freeze官方下載網站:https://pypi.org/project/cx-Freeze/#files

2.1   版本升級

  從cx_Freeze官方下載網站根據所使用的Python版本以及PC機系統位數選擇相對應的安裝包進行下載。目前PC機均已經安裝了cx_Freeze包(cx_Freeze_6.1),若要升級到官方最新版本,可直接先在Python路徑下(C:\Python37\Lib\site-packages)將當前版本中“cx_Freeze”和“cx_Freeze-6.1.dist-info”兩個文件夾刪除。刪除后在所下載安裝包路徑下通過cmd指令“pip install cx_Freeze-6.2-cp37-cp37m-win_amd64.whl”進行安裝。安裝后Python路徑下會自動生成新的cx_Freeze包。

 

 

2.2   版本回退

  由於Python版本的不斷迭代更新,不同第三方庫可能並沒有對當前最新Python版本中相應的內容進行適配。即,有些第三方庫需要與相對應的Python版本對應使用才能正常執行所需功能。因此,有時需要將第三方庫回退到之前對應的版本。目前,cx_Freeze官方下載網站只提供最新版本而不提供舊版本的下載。所以要想將版本回退到舊版本,同樣先將當前路徑中已有的cx_Freeze包刪除,再cmd指令“pip install cx-Freeze==6.0”進行想要版本的安裝。

3.   cx_Freeze提供的實例

   cx_Freeze模塊安裝好后,會在site-packages的cx_Freeze模塊包中會提供部分模塊的打包實例。具體路徑為:C:\Python37\Lib\site-packages\cx_Freeze\samples。

 

 

3.1   PyQt5實例

  以cx_Freeze提供的PyQt5實例進行分析。

3.1.1  腳本編寫

  雖然提供的實例是PyQt5,但因其只是一個測試實例,所以內部只進行了一個普通窗體的實現。PyQt5實現過程與PySide2基本相同(大體只在GPLv3協議與LGPL協議的差異)。所以,直接將內部調用的“from PyQt5.QtWidgets import QApplication, QWidget”改為“from PySide2.QtWidgets import QApplication, QWidget”進行測試。

 

 

 

實例中的setup腳本如圖3-4所示。整體由三塊組成,即,

1:導入所需要的模塊。

2:setup各參數的配置。

  • l  Name:所要打包生成.msi的名稱。
  • l  Version:所要打包生成.msi的版本號(版本號需要以純數字形式進行設置)。
  • l  Description:對產品進行描述。
  • l  Options:對生成路徑以及內部具體包含和壓縮的模塊進行設置(所有具體模塊的包含與排除均在options中配置)。
  • l  Executables:工程的入口函數以及打包生成.msi文件的圖標等進行設置。

3:options內部各具體命令的配置。

  • l  Base用來判斷是否為Windows系統。
  • l  Options中為distutils命令,該實例中只用了其中“build_exe”命令。即,將想要包含的模塊進行打包。
  • l  Executables為調用所用到的工程文件“PyQt5app.py”。

3.1.2  程序打包

  通過命令python3 setup.py bdist_msi 打包程序,並創建build子目錄的同時,還會自動創建dist子目錄,里面包含.msi安裝包,包含了應用程序cx_freeze包括的所有文件。其中,\build\lib目錄下包含了所有被打包的模塊文件。Library.zip中壓縮了所有需要被打包壓縮的文件。

 

 

 

 

  從圖中可以看出,還有大部分模塊並沒有被壓縮進library.zip文件中,其中,PySide2占據了較大的體積空間,因此,在2.1.1節中,應對options做具體的壓縮命令配置。

  • zip_include_packages: 壓縮文件中應包含的軟件包。使用“*”將所有要包含的模塊進行壓縮存入zip文件中。
  • zip_exclude_packages: 應被排除在壓縮文件之外的軟件包。使用“*”將所有模塊排除在壓縮的zip文件之外。

 

 

  經過壓縮后,所有之前打包但並沒有被壓縮的模塊均已被壓縮至library.zip中,且.msi安裝包有了明顯的縮小。 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM