py2exe打包遇到的問題


py2exe打包python成.exe文件

打包過程和結果

1、創建setup腳本打包文件,其中設置打包的屬性和方法。注意:盡量將被打包文件和此打包腳本放在同目錄下(因為在嘗試非同目錄下時,出現了非可再現性的尋找被打包文件失敗)

2、在cmd命令行,進入setup打包腳本所在命令行,執行此腳本文件(python setup.py py2exe)

3、默認出現built和dist兩個文件。dist文件中的內容即為打包程序的內容,也即可發布的內容。

 

打包過程遇到的問題:

1、Win10系統文件缺失,值后發現這些文件可以在dll_exclude[]屬性中設置不包含進來。在使用Win7系統時,並沒有出現文件缺失。參考以下文件,其中包括:

 "api-ms-win-core-string-l1-1-0",         

 "api-ms-win-core-libraryloader-l1-2-1.dll",            

 "api-ms-win-core-profile-l1-1-0.dll",            

 "api-ms-win-core-processthreads-l1-1-2.dll",             

 "api-ms-win-core-handle-l1-1-0.dll",

 "api-ms-win-core-registry-l1-1-0.dll",

 "api-ms-win-core-file-l1-2-1.dll",

 "api-ms-win-core-heap-l1-2-0.dll",

"api-ms-win-core-version-l1-1-1.dll",

"api-ms-win-core-heap-l2-1-0.dll",

"api-ms-win-core-io-l1-1-1.dll",          

 "api-ms-win-core-localization-l1-2-1.dll",

"api-ms-win-core-sysinfo-l1-2-1.dll",

"api-ms-win-core-synch-l1-2-0.dll",

"api-ms-win-core-errorhandling-l1-1-1.dll",

"api-ms-win-core-version-l1-1-0.dll",

"api-ms-win-core-string-l2-1-0.dll",                    

"api-ms-win-security-base-l1-2-0.dll",

"api-ms-win-eventing-provider-l1-1-0.dll",

"api-ms-win-core-com-l1-1-1.dll",

"api-ms-win-core-memory-l1-1-2.dll"

2、MemoryLoadLibrary failed loading cv2.pyd 此錯誤通過修改zipfile = None,使其生成打包文件后解壓縮。再打開程序時,程序打包成功,可正常運行。

 

Py2exe打包腳本屬性設置問題:

1、Version ,Description,Name不是必須的。

2、Windows 創建一個圖形用戶界面程序

3、Console 創建一個控制台程序

4、dist_dir 打包生成的文件放在dist下,可設置存放目錄(一般沒有特殊要求,可以不需修改。可使用相對路徑)

5、Compressed 默認為0,1為指定壓縮文件(library.zip)的行為;0為不壓縮。

6、Zipfiles 來配置共享壓縮文件的生成目錄和文件名,默認是在目錄 dist 下生成一個 “library.zip”文件,打包了 .exe文件運行需要的 .pyd 和 .dll 文件(不包含配置文件等)。

7、Optimize 打包優化,合法值是字符串('','O','OO')或者整型數字 (0, 1, or 2)。0時,不進行優化,壓縮包大小較大,打包的編譯文件為 .pyc;1時,進行少量優化,壓縮包大小略小,打包的編譯文件為 .pyo;2時,優化級別最高,壓縮包大小也明顯變小,打包的編譯文件為 .pyo。

8、Bundle_files 打包綁定,64位不支持此屬性。 0:pyd和dll文件不會被打包到exe文件中; 1:pyd和dll文件會被打包到exe文件中,且不能從文件系統中加載python模塊; 2:pyd和dll文件會被打包到exe文件中,但是可以從文件系統中加載python模塊。

注:.py: 這是編寫的源文件。

    .pyc: 這是編譯過的二進制代碼文件. 如果導入一個模塊, python 將創建一個 *.pyc 文件,文件中內為二進制碼,這樣可以在再次導入時更容易(更快)。

.pyo: 這是一個當優化等級 (-O) 開啟時生成的 *.pyc 文件。

.pyd: 這個相當於一個 windows dll 文件.實際上.pyd文件就是dll文件,只是略有不同。

9、Date_files文件可執行文件所需數據。在python27中,需要的MSVCP90.dll不能單獨發布,必須確保 py2exe 復制所有的三個 dll 文件和 manifest 文件到工程目錄 dist 下,並且放在一個名為 'Microsoft.VC90.CRT' 的子目錄下。

 參考做法為:from glob import glob  data_files = [("Microsoft.VC90.CRT", glob(r'C:\Program Files\Microsoft Visual Studio freeze_support9.0\VC\redist\x86\Microsoft.VC90.CRT\*.*'))]

10、ascii  0:不包含編碼和解碼器;1則反之。

11、出現的QPixmap::scaled: Pixmap is a null pixmap問題,這是由於pyqt和qt都是默認的png格式的圖片,打包后,會找不到jpg格式的圖片,所以在打包過程中需要把pyqt4文件中的imageformats文件夾下的dll文件導入。這是jpg格式的圖片需要的插件。

12、類標識符無屬性,產生的CLSID無屬性。

typelibs

列表:需要包含的gen_py產生的typelibs

13、多進程打包遇到的程序不正常執行問題,需要在多進程之前調用freeze_support()函數。經試驗,最好在函數開始執行的時候,首先調用此函數。

 


免責聲明!

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



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