zoukankan      html  css  js  c++  java
  • python3之cx_Freeze使用(PyQt5)

    1.   cx_Freeze简介

      Python脚本在装有Python的系统中可以直接双击运行,但绝大多数普通用户并没有配置此类环境,而编译为可执行二进制文件后,用户无需预先安装Python及依赖库即可像运行普通程序一样运行编写好的Python代码。有相当数量的Python库可以实现此类转换,此文档主要对cx_Freeze的使用进行总结分享。

    2.   cx_Freeze包更替

      cx_Freeze官方下载网站:https://pypi.org/project/cx-Freeze/#files

    2.1   版本升级

      从cx_Freeze官方下载网站根据所使用的Python版本以及PC机系统位数选择相对应的安装包进行下载。目前PC机均已经安装了cx_Freeze包(cx_Freeze_6.1),若要升级到官方最新版本,可直接先在Python路径下(C:Python37Libsite-packages)将当前版本中“cx_Freeze”和“cx_Freeze-6.1.dist-info”两个文件夹删除。删除后在所下载安装包路径下通过cmd指令“pip install cx_Freeze-6.2-cp37-cp37m-win_amd64.whl”进行安装。安装后Python路径下会自动生成新的cx_Freeze包。

     

     

    2.2   版本回退

      由于Python版本的不断迭代更新,不同第三方库可能并没有对当前最新Python版本中相应的内容进行适配。即,有些第三方库需要与相对应的Python版本对应使用才能正常执行所需功能。因此,有时需要将第三方库回退到之前对应的版本。目前,cx_Freeze官方下载网站只提供最新版本而不提供旧版本的下载。所以要想将版本回退到旧版本,同样先将当前路径中已有的cx_Freeze包删除,再cmd指令“pip install cx-Freeze==6.0”进行想要版本的安装。

    3.   cx_Freeze提供的实例

       cx_Freeze模块安装好后,会在site-packages的cx_Freeze模块包中会提供部分模块的打包实例。具体路径为:C:Python37Libsite-packagescx_Freezesamples。

    3.1   PyQt5实例

      以cx_Freeze提供的PyQt5实例进行分析。

    3.1.1  脚本编写

      虽然提供的实例是PyQt5,但因其只是一个测试实例,所以内部只进行了一个普通窗体的实现。PyQt5实现过程与PySide2基本相同(大体只在GPLv3协议与LGPL协议的差异)。所以,直接将内部调用的“from PyQt5.QtWidgets import QApplication, QWidget”改为“from PySide2.QtWidgets import QApplication, QWidget”进行测试。

     

     

    实例中的setup脚本如图3-4所示。整体由三块组成,即,

    1:导入所需要的模块。

    2:setup各参数的配置。

    • l  Name:所要打包生成.msi的名称。
    • l  Version:所要打包生成.msi的版本号(版本号需要以纯数字形式进行设置)。
    • l  Description:对产品进行描述。
    • l  Options:对生成路径以及内部具体包含和压缩的模块进行设置(所有具体模块的包含与排除均在options中配置)。
    • l  Executables:工程的入口函数以及打包生成.msi文件的图标等进行设置。

    3:options内部各具体命令的配置。

    • l  Base用来判断是否为Windows系统。
    • l  Options中为distutils命令,该实例中只用了其中“build_exe”命令。即,将想要包含的模块进行打包。
    • l  Executables为调用所用到的工程文件“PyQt5app.py”。

    3.1.2  程序打包

      通过命令python3 setup.py bdist_msi 打包程序,并创建build子目录的同时,还会自动创建dist子目录,里面包含.msi安装包,包含了应用程序cx_freeze包括的所有文件。其中,uildlib目录下包含了所有被打包的模块文件。Library.zip中压缩了所有需要被打包压缩的文件。

     

      从图中可以看出,还有大部分模块并没有被压缩进library.zip文件中,其中,PySide2占据了较大的体积空间,因此,在2.1.1节中,应对options做具体的压缩命令配置。

    • zip_include_packages: 压缩文件中应包含的软件包。使用“*”将所有要包含的模块进行压缩存入zip文件中。
    • zip_exclude_packages: 应被排除在压缩文件之外的软件包。使用“*”将所有模块排除在压缩的zip文件之外。

      经过压缩后,所有之前打包但并没有被压缩的模块均已被压缩至library.zip中,且.msi安装包有了明显的缩小。 

     

     

     

  • 相关阅读:
    sqlserver 数据查询效率优化
    上海亲戚朋友游套餐
    C# List集合去重操作注意点
    一个高级开发的基本工作职责和能力要求
    对于程序员的经验能力和薪资待遇基本概括
    一个项目团队的最低配置
    【算法学习笔记】51. 贪心法 区间排序问题 SJTU OJ 1360 偶像丁姐的烦恼
    【算法学习笔记】50.字符串处理 SJTU OJ 1361 丁姐的周末
    【算法学习笔记】49.暴力穷举 BFS 剪枝 SJTU OJ 1357 相邻方案
    【算法学习笔记】48.递归/显式栈 SJTU OJ 1358 分割树
  • 原文地址:https://www.cnblogs.com/Johnny-z6951/p/14748808.html
Copyright © 2011-2022 走看看