• 基于cx_freeze编译PyQt4程序(numpy & scipy)


    当开发完成PyQt4程序后,需要提供给他人使用,这时最好的办法是将Python程序编译成exe文件。

    通常我采用cx_freeze完成这个工作,即编写setup.py文件,执行python setup.py build即可。

    (1) 对于一般的PyQt4程序,setup.py内容如下:

     1 import sys
     2 
     3 from cx_Freeze import setup, Executable
     4 
     5 base = None
     6 if sys.platform == 'win32':
     7     base = 'Win32GUI'
     8     
     9 options = {
    10     'build_exe': {
    11             'includes': ['atexit'],
    12             'excludes': ['Tkinter',
    13                          'collections.sys',
    14                          'collections._weakref']
    15     }
    16 }
    17 
    18 setup(
    19         name="程序名",
    20         version="版本号",
    21         description="",
    22         options=options,
    23         executables=[Executable("主程序绝对路径", base=base,
    24                                 icon="图标绝对路径")])

    (2) 当使用numpy后,则setup.py修改为:

     1 import sys
     2 
     3 from cx_Freeze import setup, Executable
     4 
     5 base = None
     6 if sys.platform == 'win32':
     7     base = 'Win32GUI'
     8     
     9 options = {
    10     'build_exe': {
    11             'includes': ['atexit',
    12                          'numpy'],
    13             'excludes': ['Tkinter',
    14                          'collections.sys',
    15                          'collections._weakref']
    16     }
    17 }
    18 
    19 setup(
    20         name="程序名",
    21         version="版本号",
    22         description="",
    23         options=options,
    24         executables=[Executable("主程序绝对路径", base=base,
    25                                 icon="图标绝对路径")])

    (3) 当使用scipy后,利用cx_freeze编译时会出现Import Error: No module named 'scipy'。

    这时需要将cx_Freeze文件夹下的hooks.py的第548行代码"finder.IncludePackage("scipy.lib")"改为"finder.IncludePackage("scipy._lib")"。

    相应的setup.py修改如下:

     1 import sys
     2 import numpy # 一定要有,否则会出现_ufuncs错误
     3 
     4 from cx_Freeze import setup, Executable
     5 
     6 base = None
     7 if sys.platform == 'win32':
     8     base = 'Win32GUI'
     9     
    10 options = {
    11     'build_exe': {
    12             'packages': ['scipy'], # 重要
    13             'includes': ['atexit',
    14                          'numpy',
    15                          'scipy'],
    16             'excludes': ['Tkinter',
    17                          'collections.sys',
    18                          'collections._weakref']
    19     }
    20 }
    21 
    22 setup(
    23         name="程序名",
    24         version="版本号",
    25         description="",
    26         options=options,
    27         executables=[Executable("主程序绝对路径", base=base,
    28                                 icon="图标绝对路径")])
  • 相关阅读:
    如何在Grid中做出快捷菜单效果?
    ExtJs FormPanel布局
    wpf 中获取ComboBox中选定的文本值
    delphi中的dbgrid使用
    Delphi修改Access密码,压缩与修复,建立Access数据库文件
    关于OS X系统root账号的激活及密码更改
    Delphi过程函数传递参数的几种方式
    Eclipse里的快捷键
    Delphi封装类到DLL
    Delphi Project 之工程选项(Project Options)
  • 原文地址:https://www.cnblogs.com/wangzhehong1981/p/5699338.html
Copyright © 2020-2023  润新知