码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 使用pyinstaller打包Python程序


    文章目录

    • 背景
    • 操作步骤
      • 使用anaconda创建虚拟环境
      • 使用`pyinstaller`打包
        • 代码路径问题
    • 程序相对路径
    • 参考文献

    背景

    当写好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

  • 相关阅读:
    二叉树的顺序结构以及堆的实现——【数据结构】
    Android .kl按键布局文件
    【数据结构与算法】八大排序(中)快速排序 快排居然还能这么优化?快排的非递归该如何写?
    【实验十二】决策树判断你是否可学python
    嵌入式学习笔记(42)SD卡的编程接口
    深入理解Linux虚拟内存管理(六)
    单词记忆系统二:音标字符输入(re从字符串中提取音标字符;依序打印音标字符;输入对应序号;替换序号。-> 完成“音标输入”)
    计算时间复杂度
    纠删码创新点整理
    一天一个javascript小技巧【可选链操作符】
  • 原文地址:https://blog.csdn.net/qq_43705697/article/details/133795909
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号