Python cx_freeze打包工具处理问题思路及解决办法

yipeiwu_com6年前Python基础

以下是在使用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 函数在运行中还会装入其它的数据库管理模块,无从了解还需要哪些额外的包,故在打包时就漏掉了一些必要的模块

    解决办法:修改打包脚本,添加如下内容:

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简单日志处理类分享

简单的一个python日志处理类 复制代码 代码如下: #/usr/bin/python #coding=utf-8 import time,types class logsys: &n...

对于Python的Django框架部署的一些建议

“Django应用、配置文件以及其他各种相关目录的最佳布局是什么样的?” 总是有朋友问我们这个问题,因此我想花一点时间,写一下我们究竟是如何看待这个问题的,这样我们就可以很容易让其他人参...

django框架自定义用户表操作示例

本文实例讲述了django框架自定义用户表操作。分享给大家供大家参考,具体如下: django中已经给我生成默认的User表,其中的字段已经可以满足我们的日常需求。 但有时候,我们需要更...

Python多线程同步Lock、RLock、Semaphore、Event实例

Python多线程同步Lock、RLock、Semaphore、Event实例

一、多线程同步 由于CPython的python解释器在单线程模式下执行,所以导致python的多线程在很多的时候并不能很好地发挥多核cpu的资源。大部分情况都推荐使用多进程。 pyth...

Python线性方程组求解运算示例

Python线性方程组求解运算示例

本文实例讲述了Python线性方程组求解运算。分享给大家供大家参考,具体如下: 求解线性方程组比较简单,只需要用到一个函数(scipy.linalg.solve)就可以了。比如我们要求以...