利用eric5的cx_freeze插件生成windows可执行程序

Posted By: agon,  Published:February 20th, 2013   【Updated:October 15th, 2013】

这里介绍了用eric5集成qt写qui程序,如果想在没有装pyqt的windows系统内运行,则需要把源代码打包为exe文件,python下打包exe的程序有py2exe,pyinstaller和cx_freeze,前两款一个停止更新,一个更新缓慢,只剩下cx_freeze支持最新版的python 3.3,而eric5正好有一个cx_freeze插件,可以很方便的打包源程序,本文就是介绍使用方法。

准备工作:

  • 本文环境:eric5、python3.3 64位、windows8、qt5.01
  • 下载源码,源码下载地址代码浏览,源文件结构如下图:
  • 运行代码:新建一个工程,把源码添加到工程内,设置project和run project对话框,运行看是否正常

安装插件:

点击菜单栏Plugins > plugin Repository,蹦出对话框,点击下部的update,找到cx_freeze插件,点击download&install,下载完毕后蹦出安装对话框,点击next,next,点击install,点击关闭。


点击project > Pacages > Use cx_freeze,就可以看到cx_freeze的设置对话框了。

设置软件:

按照下图设置参数:




点击确定,蹦出一个对话框,生成以下代码。

--target-dir=F:\2 --target-name=welcome.exe --base-name=Win32GUI --compress -OO --include-modules=re welcome.pyw
copying E:\Python33\lib\site-packages\cx_Freeze\bases\Win32GUI.exe -> F:\2\welcome.exe
copying C:\WINDOWS\system32\python33.dll -> F:\2\python33.dll
writing zip file F:\2\welcome.exe

  Name                      File
  ----                      ----
P PyQt4                     E:\Python33\lib\site-packages\PyQt4\__init__.py
m PyQt4.QtCore              E:\Python33\lib\site-packages\PyQt4\QtCore.pyd
m PyQt4.QtGui               E:\Python33\lib\site-packages\PyQt4\QtGui.pyd
m __main__                  welcome.pyw
m _bisect                   
m _bz2                      E:\Python33\DLLs\_bz2.pyd
...
中间省略
...                   
m re                        E:\Python33\lib\re.py
m reprlib                   
m sip                       E:\Python33\lib\site-packages\sip.pyd
m sre_compile               E:\Python33\lib\sre_compile.py
m sre_constants             E:\Python33\lib\sre_constants.py
m sre_parse                 E:\Python33\lib\sre_parse.py
...
中间省略
...                 
m types                     
P ui                        ui\__init__.py
m ui.Dialog                 ui\Dialog.py
m ui.Ui_Dialog              ui\Ui_Dialog.py
m unicodedata               E:\Python33\DLLs\unicodedata.pyd
...
中间省略
...                       
copying E:\Python33\lib\site-packages\PyQt4\QtCore.pyd -> F:\2\PyQt4.QtCore.pyd
copying E:\Python33\lib\site-packages\PyQt4\QtCore4.dll -> F:\2\QtCore4.dll
copying E:\Python33\lib\site-packages\PyQt4\QtGui.pyd -> F:\2\PyQt4.QtGui.pyd
copying E:\Python33\lib\site-packages\PyQt4\QtGui4.dll -> F:\2\QtGui4.dll
copying E:\Python33\DLLs\_bz2.pyd -> F:\2\_bz2.pyd
copying E:\Python33\lib\site-packages\sip.pyd -> F:\2\sip.pyd
copying E:\Python33\DLLs\unicodedata.pyd -> F:\2\unicodedata.pyd

cxfreeze finished.

	

主要是拷贝一些程序运行所需要的库和生成一个主程序。
到目标文件位置,双击welcome.exe,就可以运行程序了。

出现的问题:

  • Missing modules:? ui.Dialog imported from __main__,运行exe提示no module named ‘PyQt4.QtCore4’

    按理说cx_freeze只需要调用入口脚本(welcome.py),自定义的module(ui文件夹里面的文件),以及自定义module里import的module都会自动加载,但是这里除了入口脚本里import的包被加载外,其他的都提示no module named ‘module名’。
    这里给了一个说法,被import的文件所在的文件夹下必须要有一个__init__文件,里面什么都不用写。本例中在ui文件夹下添加一个__init__文件。

  • no module named ‘re’

    运行exe文件时提示没有re,在cx_freeze插件的advanced选项的include modules里添加re。其实就是cx_freeze的–include-modules参数。

  • 打开exe文件时蹦出cmd窗口

    basename设为win32gui才可以。

录一个视频,没声音,供参考。

参考链接:http://cx_freeze.readthedocs.org/en/latest/script.html

12 条回复

添加你的回复

  1. Thanks the contents about cx_FREEZE

  2. 我给你发了一个邮件,发到GMAIL里了,请看一下,有问题请教。

  3. 我的没有成功,我现在用cxfree插件版本5.2.1。用最新到eric5.3.7,下载插件,然后就看到插件安装上了,但是active显示到是NO,提示The cxfreeze executable could not be found.不知道哪里出了问题。请教下

    • 点开plugin infos,找到cxfree,字体颜色是否为红色,如果黑色右键就可以active,或者卸载重装cxfree,或者升级到最新版eric,python3.3看看

    • 前提是你系统上已经装过cxfreeze。This plug-in is just a frontend to cxfreeze. You have to install cxfreeze an your
      system in order to use it (it is not included).

      • 你好,还是没有解决这个问题,能否仔细交流一下?

        • 这个,eric论坛里提问后的解释是插件只是前端,确保本机已经装过cx-freeze。我上个回答用的是win8.1系统并且之前没有装过eric,装了最新的eric可以active。后来在xp上,之前装过eric,更新为最新版,cx_freeze不能active。
          可能是系统原因也可能是版本原因,最新的3.4出来了,你可以试试python3.4和对应版本的cx-freeze,看行不行,或者在命令行下能不能使用cx-freeze

          • 我也碰到了Eric5安装cxfreeze插件不成功的情况。active 显示到是 NO,提示 The cxfreeze executable could not be found.请教下是如何解决的?谢谢!
            环境如下:
            Python:3.4.1 Qt:4.8.6 PyQt:4.11.2 Eric:5.4.6
            cxfreeze也提前安装过了,cxfreeze –version显示版本为cxfreeze 4.3.3,要安装的cxfreeze插件版本为5.3.3。

        • 我也碰到了Eric5安装cxfreeze插件不成功的情况。active 显示到是 NO,提示 The cxfreeze executable could not be found.请教下是如何解决的?谢谢!
          环境如下:
          Python:3.4.1 Qt:4.8.6 PyQt:4.11.2 Eric:5.4.6
          cxfreeze也提前安装过了,cxfreeze –version显示版本为cxfreeze 4.3.3,要安装的cxfreeze插件版本为5.3.3。

  4. 版主你好,请教一个问题:打包完成后,启动程序,在主窗口的工具栏上点击按钮,没有反应,无法启动对话框,而在Eric调试中是好的,不知是啥原因?

  5. 我也碰到了Eric5安装cxfreeze插件不成功的情况。active 显示到是 NO,提示 The cxfreeze executable could not be found.请教下是如何解决的?谢谢!
    环境如下:
    Python:3.4.1 Qt:4.8.6 PyQt:4.11.2 Eric:5.4.6
    cxfreeze也提前安装过了,cxfreeze –version显示版本为cxfreeze 4.3.3,要安装的cxfreeze插件版本为5.3.3。

你的回复