• 使用pyinstaller打包Python程序


    背景

    当写好python文件后,会希望可以打包成可执行文件,这样对方不需要下载python,双击就可以执行,简单方便。

    为了满足这种需求,python提供了pyinstaller包。该包可以将python代码和所依赖的环境打包为二进制可执行文件。

    下面我们一起来看下如何使用pyinstaller打包~

    操作步骤

    使用anaconda创建虚拟环境

    为什么要创建虚拟环境呢?

    一般python中会import第三方依赖包执行程序,所以打包的时候也需要将依赖的第三方包一起打包,这样用户才可以简单地双击运行程序。

    pyinstaller进行打包时会打包当前python环境下所有包,所以为了缩减打包后的安装包体积,我们新建虚拟环境,在该虚拟环境中只安装用到的依赖包,避免无用的安装包增大体积。

    明白了原理后,我们来进行环境的创建。

    # 创建3.8 版本的python环境
    conda create -n 你的虚拟环境名称 python=3.8
    
    • 1
    • 2

    安装所需依赖包(必须安装pyinstaller包,其他自己需要的包自行安装即可)

    pip install pyinstaller
    
    • 1

    激活虚拟环境

    conda activate 刚刚创建的虚拟环境名称
    
    • 1

    使用pyinstaller打包

    cd到要打包的文件夹下,执行如下命令进行打包:

    # -F 表示统一打包成一个可执行文件,必须; -c 表示创建执行窗口,显示日志等,可选; 
    # --clean 表示删除上次打包的缓存,可选;bot.py 是程序的入口文件
    pyinstaller -F -c --clean bot.py
    
    • 1
    • 2
    • 3

    打包好后,会在dist文件夹下出现一个可执行打包文件。
    在这里插入图片描述

    代码路径问题

    如果在程序中读取了某文件,假设代码中文件路径是./config.txt,表明程序会读取当前文件路径下config.txt文件,在双击运行时,一定要确认可执行文件的同级目录下存在config.txt文件。

    否则程序会闪退,看不到报错,其实是因为找不到文件而异常退出了。

    程序相对路径

    这里再补充一下路径问题:

    程序中经常会使用相对路径,那么这个路径是相对谁来说呢?

    运行时会有一个当前路径变量,如果使用命令行运行,那么这么当前路径变量就等于命令行所在路径。而双击时,当前路径变量就等于可执行文件所在的路径。

    举例,现在有文件夹a文件夹b文件夹a中,可执行文件demo.exe文件夹b中,文件夹a下还有配置文件config.txt。假设可执行文件在代码中读取了./config.txt文件。

    如果终端当前路径在文件夹b下,执行命令demo.exe运行文件夹b下的可执行文件demo.exe,最终程序会报错找不到配置文件,这是因为当前路径变量是文件夹b文件夹b并不存在配置文件config.txt

    参考文献

    参考文献1
    参考文献2

  • 相关阅读:
    【Unity】U3D TD游戏制作实例(四)建造防御塔:防御塔生成器、一个int代表多选框,圆上任意点位的坐标计算、制作防御塔预制件
    .NET跨平台框架选择之一 - Avalonia UI
    React 中的延迟加载Lazy loading
    简析CloudCompare文件夹之间的关系
    网络爬虫requests库使用指南
    React HOOK 自定义拍照画面,自动截取指定画面
    C++深拷贝和浅拷贝
    瑞吉外卖实战项目全攻略——第三天
    从实例学Kettle(一):获取股票行情数据
    Windows应急响应排查
  • 原文地址:https://blog.csdn.net/qq_43705697/article/details/133795909