在節前的最後一天,解決了打包過程中遇到的所有問題,可以成功運行了!真是個好彩頭,希望新的一年一切順利! 以下是在使用cx_freeze過程中遇到的問題及解決辦法(Win7) 問題描述:運行exe,啟動無數個主程式,導致系統無法使用 原因:在程式中使用了multiprocessing的包 解決辦法:在
在節前的最後一天,解決了打包過程中遇到的所有問題,可以成功運行了!真是個好彩頭,希望新的一年一切順利!
以下是在使用cx_freeze過程中遇到的問題及解決辦法(Win7)
- 問題描述:運行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 函數在運行中還會裝入其它的資料庫管理模塊,無從瞭解還需要哪些額外的包,故在打包時就漏掉了一些必要的模塊
解決辦法:修改打包腳本,添加如下內容:
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']