• python项目如何打包成exe、踩坑总结!


    一.安装环境

    1.1安装python环境

    python官网地址:https://www.python.org/downloads/windows/

    高能总结:
    1.python环境安装务必安装python3+版本,强烈建议去官网下载安装包(window、mac),以避免环境变量的配置、运行中各种奇怪异常;
    2.安装包需要安装3.8.X的版本;如果安装的是3.10.X版本,经测试发现在安装打包环境时提示包版本问题,导致报错、、、,未减少麻烦,所以直接安装3.8.X版本;

    python的安装过程,一路下一步即可(安装过程中注意勾选添加的环境变量复选框)。

    1.2检查python环境是否安装成功;

    python -V #会打印python的版本号信息说明安装成功
    
    • 1

    1.3安装虚拟环境

    pip install pipenv
    
    • 1

    1.4建立虚拟环境

    pipenv install
    
    • 1

    1.5进入虚拟环境(上一步可省略,因为没有虚拟环境的话会自动建立一个)

    pipenv shell
    
    • 1

    1.6安装项目中依赖的模块

    pipenv install moviepy requests opencv-python Pillow np

    1.7打包的模块也要安装

    pipenv install pyinstaller

    ::: block-1

    高能总结:

    为什么需要安装虚拟环境?

    1.避免依赖冲突:虚拟环境允许您在不同的项目之间隔离依赖关系。这可以防止不同项目所需的依赖项之间的冲突,确保每个项目都可以在其自己的环境中正常工作。在将应用程序打包为可执行文件时,确保它只包含了项目所需的依赖项,而不是系统范围的依赖项。

    2.版本控制:虚拟环境使您能够控制项目所使用的 Python 版本。这对于确保应用程序在不同的 Python 版本下都能正常工作非常重要。当您打包应用程序为可执行文件时,可以明确指定要使用的 Python 版本,以确保兼容性。

    3.减小可执行文件大小:如果您在虚拟环境中只安装了项目所需的依赖项,那么打包生成的可执行文件通常会更小,因为它只包含了必要的文件和库。这可以减小可执行文件的大小,使其更容易传输和部署。

    4.清晰的项目结构:使用虚拟环境可以保持项目结构的清晰和整洁。您可以将所有项目相关的依赖项隔离在一个目录中,使项目更容易维护和管理。

    5.更好的可移植性:通过将虚拟环境与打包工具一起使用,您可以创建一个独立于系统的可执行文件,这意味着您可以在不同的操作系统上运行它,而不必担心依赖项问题。
    :::

    二.打包

    pyinstaller -F -c main.py
    或者
    pyinstaller main.spec
    
    • 1
    • 2
    • 3

    ::: block-1

    解释:

    main.py 是你的代码入口文件;

    -c 表示exe运行时需要打开一个黑窗口;

    首次运行时可以使用pyinstaller -F -c main.py 命令,每次运行该命令都会重新生成一个xxx.spec配置文件。

    如果已经存在xxx.spec配置文件,就用pyinstaller xxx.spec命令,原因是xxx.spec文件中可能已经添加了已经配置好的东西,无需在命令行中添加各种打包配置了;

    常用参数 含义

    -i 或 -icon 生成icon

    -F 创建一个绑定的可执行文件

    -w 使用窗口,无控制台

    -C 使用控制台,无窗口

    -D 创建一个包含可执行文件的单文件夹包(默认情况下)

    -n 文件名
    :::

    资源目录的配置

    pyinstaller 工具打包时默认只会打包项目中的py文件,但实际项目中可能存在其它文件例如,images文件夹、audios文件夹、其它资源文件夹,这类文件夹不配置的话,在运行exe时会提示找不到目录;

    修改xxx.spec文件的datas,举例,在源码中的main.py文件同级目录下存在两个资源文件夹images、audios,里面分别存放图片、音频,配置如下配置:

    a = Analysis(
        ['main.py'],
        pathex=[],
        binaries=[],
        datas=[(".\\images\\*.*",'.\\images'), ('.\\audios\\*.*', '.\\audios')],
        hiddenimports=[],
        hookspath=[],
        hooksconfig={},
        runtime_hooks=[],
        excludes=[],
        noarchive=False,
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    datas是一个列表,可以配置多个目录,每一个目录都要用小括号包裹起来,注意windows中使用的是反斜杠;

    如果打包后的dist文件夹中没有images、audios(与xxx.exe可执行文件同级)文件夹,此时手动新建这两个文件夹即可。

    高能总结:以上打包过程中遇到两个坑,第一个是必须用3.8.X版本的python否则安装pyenv时提示找不到python3.8环境;第二个是资源包无法自动新建,此时需要手动新建资源包;

    本次分享到此结束!


    更多精彩案例、实战完整源码,已上传微信公众号“一个努力奔跑的snail”,后期分享更精彩!

  • 相关阅读:
    多卡GPU训练时的问题
    第十四届蓝桥杯省赛C++B组题解
    mqant启动流程
    C++ Reference: Standard C++ Library reference: C Library: cwchar: wcspbrk
    QOS技术
    2023-09-04 mysql-代号m-并发控制-整体方向-设计
    MySQL表关联
    nacos-1-注册中心
    短视频矩阵系统源码开发分享
    前端知识学习案例8-开发企业网站8-实现关于我们的部分1
  • 原文地址:https://blog.csdn.net/li11_/article/details/133635958