最近在工作中使用python对已经实现的功能模块打包,支持python3.4打包的第三方库最后选择cx_freeze,通过学习源代码提提供的例子是最佳的学习方式之一。
测试环境
python3.4(32bit版本)
cx_Freeze-4.3.3.win32-py3.4.msi
windows7 x64
问题描述
cx_Freeze打包测试工程下的示例程序(cx_Freeze-4.3.3\cx_Freeze\samples\Tkinter),打包成功成功,生成执行程序exe,运行生成的exe异常,最后一行提示信息异常: AttributeError: 'module' object has no attribute '_fix_up_module'。
通过在网络中筛选有效信息,最终确定这个问题出现的原因是由于cx_freeze3.4.3 在python3.4 下的bug导致这个问题,并非打包脚本问题。
解决方案
下载最新版本的cx_freeze4.3.4版本(已修正bug),下载链接地址: https://pypi.python.org/pypi/cx_Freeze,下载目前最新版本cx_Freeze-4.3.4.win32-py3.4.exe (md5),安装。重新打包.\cx_Freeze\samples\Tkinter,生成EXE,调用成功。
备注:如果在打包过程中出现错误提示“拒绝访问 C:\Program Files (x86)\xxx”。使用管理员权限重新运行cmd,跳转至当前目录,重新执行打包命令。
遇到的坑
大部分的博客提供的解决方案是下载最新版本的.whl文件,使用pip命令(pip install xxx.whl)执行安装,但在我的机器上执行pip命令提示当前平台不支持该指令。转变思路,下载在windows平台最简单便捷的.msi和.exe安装包更靠谱。
执行pip安装.whl提示信息如下:
D:\python>pip install cx_Freeze-4.3.4-cp35-none-win32.whl
cx_Freeze-4.3.4-cp35-none-win32.whl is not a supported wheel on this platform.
资源链接
cx_Freeze开源地址(提供各平台安装包和源代码):http://sourceforge.net/projects/cx-freeze/files/4.3.3/
python第三方库地址:https://pypi.python.org/pypi/cx_Freeze