Python 打包工具cx_freeze 问题记录及解决办法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 打包工具cx_freeze 问题记录及解决办法相关的知识,希望对你有一定的参考价值。
在节前的最后一天,解决了打包过程中遇到的所有问题,可以成功运行了!真是个好彩头,希望新的一年一切顺利!
以下是在使用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‘]
以上是关于Python 打包工具cx_freeze 问题记录及解决办法的主要内容,如果未能解决你的问题,请参考以下文章
[Python]使用cx_Freeze打包FastApi项目的方法以及遇到的问题
为啥 Python 3 的 cx_freeze 将一个项目打包成 8000+ 个文件,而 Python 2 的 cx_freeze 将同一个项目打包成 25 个文件?