• pyinstaller 打包总结


    pyinstaller 打包过程总结

    ① 安装 pyinstaller 打包工具

    pip3 install pyinstaller

    pyinstaller打包命令不熟悉的小伙伴可点击这里查看哟

    备注:以下涉及到的文件名字main.py,请替换成自己的文件名

    ② 执行打包命令生成单独的 .exe 程序

    pyinstaller -F main.py

    上述执行命令后,等待打包完成,将在当前目录下生成 build 目录和 list 目录,找到 dist 目录下生成的 main.exe 程序点击执行,但是页面出现弹窗然后闪退(弹窗会一闪而过), falied to execute script main

    ③ 执行pyinstaller 提供的调试打包命令,查看打包错误日志,通过日志排查问题原因

    pyinstaller -D main.py

    -D 参数表示打调试包,将展示生成的各种依赖文件,等待打包结束,查看 build/main/warn-main.txt 日志警告文件 ,分析日志排查问题,日志首部如下

    ④ 添加用户依赖包 

    分析日志发现缺失模块,现在通过命令行,把用户第三方依赖模块搜索路径添(请使用自己电脑定义的安装目录)加进打包命令,(下面提供示例,site-packages可以不用添加的,即如果你没有使用pip -target 安装第三方模块到自己指定的目录,这一步可以省略。有些IDE工具会创建自己的安装包路径,所以请添加IDE的安装包的路径)

    pyinstaller -D -p D:\Python\Python38\Lib\site-packages main.py

    (yp小可爱记得这个地方添加的得是双斜杠路径前缀)

    如下图,可以看到添加的路径被添加到了main.spec文件( .spec文件为pyinstaller打包配置文件)中去了

    运行依旧报错 。。。

    ⑤ 环境变量 frozen 注入到 sys

    对于windows环境下打包,我们需要添加如下代码到顶层文件头部第一行位置,某些库对系统变量的加载存在bug,因此对系统变量进行手动加载设置(这一步取决于你使用的包)

    import sys
    import os
    if hasattr(sys, 'frozen'):
        os.environ['PATH'] = sys._MEIPASS + ";" + os.environ['PATH']

    这段代码和cx_freeze库相关,在 windows 下,cx_freeze库用于将程序打包成 exe,会将一个变量 frozen 注入到 sys 中。

    现在设置后重新打包,我们发现报错,如下图所示

    ⑥ 解决包兼容问题

     说是maplotlib 库缺少数据文件,matplotlib3.2以后就把mpl-data分离出去了,子目录下的数据文件会被移除,通过命令查看我当前安装的matplotlib版本

    pip3 list

     可以看到我当前使用版本为3.3.1,超过3.2,降低版本

    pip3 uninstall matplotlib
    pip3 install matplotlib==3.2.0

    笔者本来想安装3.1.1版本,结果3.1.1版本对系统要求安装 c++ 运行库, Microsoft Visual C++ 14.0 (其实就是Microsoft Visual c ++ 2015)

     安装运行库太麻烦,笔者偷懒,选择使用3.2.0版本

    至此,笔者打包程序可以运行起来了,运行的时候,你发现会多一个黑色弹窗(windows 的 dos 弹窗),我们通过加 -w 参数影藏它,即最终打包命令为

    pyinstaller -F -w main.py

     ⑦ 使用 pipenv 优化打包体积

      1,安装 pipenv 虚拟环境

    pip install pipenv

      2,激活虚拟环境

    pipenv shell

      3,激活后,本地将创建虚拟环境,然后在新虚拟环境安装 pyinstaller 打包工具

    pipenv install pyinstaller

      4,接着在虚拟环境下安装你自己项目的第三方依赖包文件

      5,然后执行你的打包步骤吧

    打包优化前后体积对比,减少了约27.5M空间

                  

     ⑧ 验证exe程序执行情况

      1,功能验证:验证生成的 .exe 程序功能是否符合预期功能要求

      2,依赖环境验证:将 .exe 程序放置在不同的纯净的(纯净指的是不需要python等代码运行环境依然能够运行)windows电脑上运行,以验证你的exe程序是否对外有依赖项

    @萍2樱释ღ( ´・ᴗ・` )

    打不死的小强
  • 相关阅读:
    win10让屏幕壁纸动态变化某文件夹下的图片
    win10查看桌面壁纸路径
    Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the serv
    将网站发布到阿里云的Linux服务器上(简述)
    图解MySQL 内连接、外连接、左连接、右连接、全连接
    JAVA _____Scanner用法
    JAVA数组翻转
    Lucene 01
    [转载] Relearning to Learn
    二进制包安装Kubernetes集群环境完整版
  • 原文地址:https://www.cnblogs.com/mggahui/p/13545094.html
Copyright © 2020-2023  润新知