Python 打包工具cx_freeze 问题记录及解决办法

本文总结了使用cx_Freeze进行程序打包时遇到的几个典型问题及其解决方案,包括多进程支持、控制台重定向、shelve模块兼容性和inspect模块源码获取等。

  在节前的最后一天,解决了打包过程中遇到的所有问题,可以成功运行了!真是个好彩头,希望新的一年一切顺利!

  以下是在使用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']

  

转载于:https://www.cnblogs.com/xiaoyu-10201/p/5184110.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值