使用pyinstaller打包Python程序

news2024/12/23 22:58:16

文章目录

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

背景

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

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

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

操作步骤

使用anaconda创建虚拟环境

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

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

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

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

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

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

pip install pyinstaller

激活虚拟环境

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

使用pyinstaller打包

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

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

打包好后,会在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1085264.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 L293D 电机驱动器 IC 和 Arduino 控制直流电机

如果您打算组装新的机器人朋友,您最终会想要学习如何控制直流电机。控制直流电机最简单且经济的方法是将 L293D 电机驱动器 IC 与 Arduino 连接。它可以控制两个直流电机的速度和旋转方向。 此外,它还可以控制单极步进电机(如 28BYJ-48&#…

【SQL】MySQL中的索引,索引优化

索引是存储引擎用来快速查询记录的一种数据结构,按实现方式主要分为Hash索引和B树索引。 按功能划分,主要有以下几类 单列索引指的是对某一列单独建立索引,一张表中可以有多个单列索引 1. 单列索引 - 普通索引:

ubuntu 安装jdk21开发环境

下载 wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz 第二步:解压 tar -zxvf jdk-21_linux-x64_bin.tar.gz 第三步:移动 jdk-21 目录到 /usr/local/jdk21 第四步:配置环境变量 sudovim/etc/profile vim/etc/…

手部关键点检测2:YOLOv5实现手部检测(含训练代码和数据集)

手部关键点检测2:YOLOv5实现手部检测(含训练代码和数据集) 目录 手部关键点检测2:YOLOv5实现手部检测(含训练代码和数据集) 1. 前言 2. 手部检测数据集说明 (1)手部检测数据集 (2)自定义数据集 3. 基…

python入门篇08- 函数进阶-参数传递

全文目录,一步到位 1.前言简介1.1 专栏传送门1.1.1 上文小总结1.1.2 上文传送门 2. python基础使用2.1 函数进阶 - 参数传递2.1.1 设置多个返回值 2.2 传参方式(多种)2.1.0 代码准备2.1.1 方式一: 参数位置传递2.1.2 方式二: 关键字参数传递2.1.3 方式三: 缺省参数传递2.1.4 方…

口袋参谋:淘宝卖家必备的市场调查分析工具!

​在淘宝天猫上开店,首先想到的第一个问题就是——卖什么? 想要解决这个疑问,我们就需要对一些你选的品类做市场调查,根据市场调查分析得出了结论,哪个市场竞争力小,那就卖哪个! 卖家做市场调查…

Linux内存管理 (2):memblock 子系统的建立

前一篇:Linux内存管理 (1):内核镜像映射临时页表的建立 文章目录 1. 前言2. 分析背景3. memblock 简介3.1 memblock 数据结构3.2 memblock 接口 4. memblock 的构建过程 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者…

【动态规划】121. 买卖股票的最佳时机、122. 买卖股票的最佳时机 II

提示:努力生活,开心、快乐的一天 文章目录 121. 买卖股票的最佳时机💡解题思路🤔遇到的问题💻代码实现🎯题目总结 122. 买卖股票的最佳时机 II💡解题思路🤔遇到的问题💻代…

DC电源模块工作效率的特点

BOSHIDA DC电源模块工作效率的特点 DC电源模块是一种常见的电源供应装置,它在广泛应用于各种电子设备中。它是一种直流电源,通常用于提供低压、高电流的电源,如电子器件、LED灯、无线路由器、计算机硬件等。DC电源模块的工作效率是其中一个非…

关于如何进行ChatGPT模型微调的新手指南

微调是指在预训练的模型基础上,通过进一步的训练来调整模型以适应特定任务或领域。预训练的模型在大规模的文本数据上进行了广泛的学习,从中获得了一定的知识和语言理解能力。然而,由于预训练并不针对具体任务,因此需要微调来使模…

启山智软/微信小程序商城

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 启山智软一、微信小程序商城二、微信小程序商城的定义微信小程序商城特点总结 启山智软 想要了解代码规范,学习商城解决方案,点击下方官网链…

11.1.0- iDesktopX新特性之统计面内对象数

作者:Mei 文章目录 一、属性更新二、面内统计对象数 当我们在做数据处理时,可能会遇到需要统计面内包含其他对象数的需求,在以往的iDesktopX 11i版本中,一般是用属性更新功能。今年发布的iDesktopX 11.1.0版本,有一个新…

创新学习方式,电大搜题助您迈向成功之路

近年来,随着信息技术的发展,互联网在教育领域发挥的作用越来越显著。贵州开放大学作为国内首家电视大学,一直致力于创新教学模式,帮助学生更好地获取知识。在学习过程中,学生常常遇到疑难问题,而解决这些问…

Python作业【简单算法题】

总结: 这次题目当中考点是基础知识,还有一些简单的算法,比如说动态规划,插入排序这些,以及切片的知识 筛选法: 这里说一下我对他的理解,之前一直不能理解为什么开个根号就可以减少算法的复杂…

【数据结构复习之路】栈和队列(本站最全最详细讲解) 严蔚敏版

复习完上面一章【线性表】&#xff0c;我们接着复习栈和队列&#xff0c;这篇文章我写的非常详细且通俗易懂&#xff0c;看完保证会带给你不一样的收获。如果对你有帮助&#xff0c;看在我这么辛苦整理的份上&#xff0c;三连一下啦ε٩(๑> ₃ <)۶з 目录: ☆ 栈 &am…

SpringBoot篇之集成Jedis、Lettuce、Redisson

目录 前言一、详解Jedis、Lettuce 和 Redisson的区别二、SpringBoot集成2.1 集成Jedis2.2 集成Lettuce2.3 集成Redisson 总结 前言 大家好&#xff0c;我是AK&#xff0c;最近在做新项目&#xff0c;基于旧项目框架修改&#xff0c;正好最近也在整理springboot相关知识&#x…

C语言系统化精讲(四): 条件判断语句

文章目录 一、if语句二、if…else语句三、else if语句四、if语句的嵌套五、条件运算符六、switch语句的基本形式七、多路开关模式的switch语句八、if…else语句和switch语句的区别 当我们是儿童时&#xff0c;父母就告诉我们记住这句 红灯停&#xff0c;绿灯行&#xff0c;黄灯…

JTS:11 Overlaps 部分重叠

这里写目录标题 版本代码1 多点与多点2 线与线3 面与面 版本 org.locationtech.jts:jts-core:1.19.0 链接: github 代码 /*** 部分重叠*/ public class GeometryOverlaps {private final GeometryFactory geometryFactory new GeometryFactory();private static final Logg…

提升自动化测试效率的秘密武器——Allure Report

一.使用 Allure2 运行方式-Python # --alluredir 参数生成测试报告。 # 在测试执行期间收集结果 pytest [测试用例/模块/包] --alluredir./result/ (—alluredir这个选项 用于指定存储测试结果的路径)# 生成在线的测试报告 allure serve ./result二.使用 Allure2 运行方式-Ja…

TCP/IP(十四)流量控制

一 流量控制 说明&#xff1a; 本文只是原理铺垫,没有用tcpdumpwiresahrk鲜活的案例讲解,后续补充 ① 基本概念 流量控制: TCP 通过接受方实际能接收的数据量来控制发送方的窗口大小 ② 正常传输过程 背景:1、客户端是接收方,服务端是发送方 --> 下载2、假设接收窗…