以下是在使用cx_freeze過程中遇到的問題及解決辦法(Win7)
1.問題描述:運行exe,啟動無數個主程序,導致系統無法使用
原因:在程序中使用了multiprocessing的包
解決辦法:在主文件if __name__ == "__main__":后,添加multiprocessing.freeze_support(),一定要在添加在最開始處
2. 問題描述:運行后,提示在freeze_support中sys.stdout.flush處異常
原因:使用的PyQT作為界面,沒有控制臺
解決辦法:在調用multiprocessing.freeze_support()前,重定向stdout和stderr,添加:sys.stdout = io.StringIO()和 sys.stderr = io.StringIO()
3.使用shelve模塊,IDE下調試可以正常使用,打包后無法使用
原因:shelve 的 open 函數在運行中還會裝入其它的數據庫管理模塊,無從了解還需要哪些額外的包,故在打包時就漏掉了一些必要的模塊
解決辦法:修改打包腳本,添加如下內容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
packages = [] for dbmodule in [ 'dbhash' , 'gdbm' , 'dbm' , 'dumbdbm' ]: try : __import__ (dbmodule) except ImportError: pass else : # If we found the module, ensure it's copied to the build directory. packages.append(dbmodule) options = { 'build_exe' : { 'includes' : 'atexit' , "packages" : packages } } |
4.使用inspect.getsourcelines異常OSError: could not get source code
原因:打包后,都是pyc文件,沒有源代碼,導致動態獲取代碼失敗
解決辦法:將包含所需源碼的py文件打包到library.zip文件中,在‘build_exe'參數中,增加'zip_includes':['path\\source.py']
以上給大家分享了Python cx_freeze打包工具處理問題思路及解決辦法,希望對大家有所幫助。