详解Python文件pyinstaller打包

news2024/11/17 15:55:01

本文python文件打包用到的是pyinstaller库并且以如下格式的文件为例
在这里插入图片描述其中bird.py用到了images文件夹当中的png


pyinstaller有两种打包方式:

方法1:文件夹模式 onedir

在终端用命令

pyinstaller -D flappybird.py

执行完后文件格式如下在这里插入图片描述

可以看到多了.idea,pycache,build,dist,还有bird.spec四个文件

  • .idea 文件夹, 当使用pycharm作为IDE时,会自动生成.idea/文件夹来存放项目的配置信息。其中包括版本控制信息、历史记录等等

  • _pycache_ 文件夹, 任何python工程运行时python解释器会将 *.py 脚本文件进行编译,并将编译结果保存到__pycache__目录中,下次再执行工程时,若解释器发现这个 *.py 脚本没有修改过,就会跳过编译这一步,直接运行以前生成的保存在 __pycache__文件夹里的 *.pyc 文件。

  • build 文件夹,一个临时文件,相当于pyinstaller的工作空间,pypnstaller运行相关的文件和日志都在这个文件夹中,打包完成后可以直接删除。

  • dist文件夹:运行完成后会在同路径下生成一个dist文件夹,这个文件夹下有一个跟程序同名的文件夹,打包好的exe程序就在这个文件夹下,在使用-F这种文件夹方式打包时需要把整个dist文件发给别人别人才能使用,

  • spec 文件,打包的配置文件,可以配置依赖资源。spec文件中主要包含4部分:Analysis、PYZ、EXE、COLLECT
    analysis:主要是分析py文件的依赖信息
    PYZ:是一个.pyz的压缩包,包含程序运行需要的依赖
    EXE:是根据上述两项内容而生成的
    COLLECT:主要是输出信息

这时候我们试一下打开dist文件中的exe文件,发现提示找不到images文件,可见在需要实现资源依赖的时候直接打包并不能实现需求,这时候需要我们修改spec文件,在里面的Analysis中的datas中添加资源依赖,datas中的数据以元组的形式储存,例如我们要添加这个文件目录下的images文件夹,则把datas=[]替换为datas=[(‘images’,‘images’)],第一个images表示要放入的文件的路径(这里我们用的是相对路径),第二个images代表引用的名字
在这里插入图片描述

这时候再试一下打开exe文件发现还是不行,因为dist文件中没有images文件夹,所以我们把images文件夹放入dist文件中,然后就成功了
在这里插入图片描述

方法2: 单文件模式 onefile

加上-F参数,全部的依赖文件都会被打包到exe文件中,在dist文件夹中只有一个可执行文件,这种情况与但文件夹模式不同的是如果没有要求的资源文件,那么直接把exe文件发给别人即可,但是-D不管怎么样都需要把dist文件发给别人

pyinstaller -F bird.py

这种情况下同样是需要把资源文件images放入dist当中的

spec配置文件方式打包

生成spec文件:pyi-makespec [options] xxx.py [other scripts…],生成spec文件时可以什么都不指定,然后在生成的spec文件中单独配置,默认为-D模式下的spec文件,也可以指定生成-F模式的spec文件。当然也可以在第一次就将参数选项指定好,以后就只维护spec文件。
参数选项:生成spec文件的参数选项和命令行模式下执行PyInstaller打包是完全一样的。
spec文件类型:spec文件其实就是一个py文件,在编辑时可以直接将它当成一个py文件来使用。
spec文件优势:一般情况而言,直接使用PyInstaller命令行直接打包即可,但是以下情况使用spec文件的话会方便一些:
1.程序需要绑定一些数据文件,可以在spec文件中单独用一个列表变量来指定,可读性和可维护性会高很多。
2.需要include一些PyInstaller不知道的动态链接库,如:.dll/.so文件,同样可以在spec文件中单独用一个列表变量来指定。
3.需要往可执行文件中添加一些运行时选项,如hook文件。

pyinstaller打包多个python文件

如果在A中import B,那么A是入口文件,要把这个程序打包,则可以在后面直接加入相关联的B,C,D …

pyinstaller的一些别的options

  • -i

用于设置图标。被选为图标的图像文件后缀名应为ico(其实只要下载一张图片,更改其后缀就好,这个方法对大多数格式都适用)。图标文件的相对路径要基于打包时所处的目录来写,我一般把图标文件和要被打包的py文件放在一个目录下,因此直接写图标文件的名称即可。

  • -c 和 -w:

-c对应cmd,带控制台窗口。-w对应windows,一般用在自带图形界面GUI的程序上,或者不想太初控制台窗口时。

如果代码中有print语句但exe程序不带控制台窗口,可能会报错。

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

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

相关文章

Linux系列 备份与分享文档

作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.备份与分享文档 1.使用压缩和解压缩工具 (1&…

Java零基础教程——数据类型

目录数据类型数据类型的分类运算符算术运算符符号做连接符的识别自增、自减运算符赋值运算符关系运算符逻辑运算符短路逻辑运算符三元运算符运算符优先级数据类型 数据类型的分类 引用数据类型(除基本数据类型之外的,如String ) 基本数据类…

【STM32】【HAL库】遥控关灯2 分机

相关连接 【STM32】【HAL库】遥控关灯0 概述 【STM32】【HAL库】遥控关灯1主机 【STM32】【HAL库】遥控关灯2 分机 【STM32】【HAL库】遥控关灯3 遥控器 需求 接收RF433和红外信号,根据信号内容控制舵机 硬件设计 主控采用stm32F103c6 STM32 433接收 其他接口 软件设计 接…

[SSD固态硬盘技术 14] GC垃圾回收太重要了

今天介绍臭名昭著的垃圾收集 过程(或“GC”),maybe 这是对JAVA 工程师而言。当遇到GC导致速度降低时候, 他们真的想跳脚。 我想到我的小孩打疫苗,哭的哇哇叫, 在他的眼里疫苗应该也是讨厌的吧, 但事实真的如此吗? 但首先,让我们考虑一下如果根本没有 GC,闪存系统会发…

【Shell1】shell语法,ssh/build/scp/upgrade,环境变量,自动升级bmc,bmc_wtd,

文章目录1.shell语法:Shell是用C语言编写的程序,它是用户使用Linux的桥梁,硬件>内核(os)>shell>文件系统1.1 变量:readonly定义只读变量,unset删除变量1.2 函数:shell脚本传递的参数中包含空格&am…

微信小程序 学生选课系统--nodejs+vue

系统分为学生和管理员,教师三个角色 学生小程序端的主要功能有: 1.用户注册和登陆系统 2.查看选课介绍信息 3.查看查看课程分类 4.查看课程详情,在线选课,提交选课信息 5.在线搜索课程信息 6.用户个人中心修改个人资料 7.用户查看…

数据中心的 TCP-Delay ACK 与 RTO, RACK

TCP 对 RTO 有个最小值限制,一般限制为 MIN_RTO 200ms。之所以有这个限制,在于要适应 Delay ACK,而 Delay ACK 的意义,不多说,摘自 RFC1122: MIN_RTO 应该足够大,以覆盖 Delay ACK 的影响&…

【Day6】合并两个排序链表与合并k个已排序的链表,java代码实现

前言: 大家好,我是良辰丫🚀🚀🚀,今天与大家一起做两道牛客网的链表题,好久写关于链表题的博客了,这两道题可以帮大家巩固一下链表知识,我把两道题的链接放到下面&#xf…

【C++之容器篇】造轮子:模拟实现vector类

目录前言一、项目结构1. vector的简介2. 项目结构二、vector的底层结构三、默认成员函数1. 构造函数(1)无参构造函数2. 拷贝构造函数3. 析构函数4. 赋值运算符重载函数四、迭代器1. 普通对象的正向迭代器2. const 对象的正向迭代器五、容量接口1. size()2. capacity()3. reserv…

分布式-分布式理论笔记

分布式系统的特点 分布式系统技术就是用来解决集中式架构的性能瓶颈问题,来适应快速发展的业务规模,是建立在网络之上的硬件或者软件系统,彼此之间通过消息等方式进行通信和协调。 特点 具有可扩展性,不出现单点故障、服务或者…

Hadoop之——WordCount案例与执行本地jar包

目录 一、WordCount代码 (一)WordCount简介 1.wordcount.txt (二)WordCount的java代码 1.WordCountMapper 2.WordCountReduce 3.WordCountDriver (三)IDEA运行结果 (四)Hadoop运行wordcount 1.在HDFS上新建一个文件目录 2.新建一个文件,并上传至该目录下…

商品秒杀接口压测及优化

目录一、生成测试用户二、jmeter压测三、秒杀接口优化1、优化第一步:解决超卖2、优化第二步:Redis重复抢购3、优化第三步:Redis预减库存①商品初始化②预减库存一、生成测试用户 将UserUtils工具类导入到zmall-user模块中,运行生…

【STM32】【HAL库】遥控关灯1主机

相关连接 【STM32】【HAL库】遥控关灯0 概述 【STM32】【HAL库】遥控关灯1主机 【STM32】【HAL库】遥控关灯2 分机 【STM32】【HAL库】遥控关灯3 遥控器 需求 主机需要以下功能: 接收来自物联网平台的命令发送RF433信号给从机接收RF433信号和红外信号驱动舵机动作 方案设计…

【计算机网络期末复习】第二章 物理层

✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📣专栏定位:为想复习学校计算机网络课程的同学提供重点大纲,帮助大家渡过期末考~ 📚专栏地址: ❤️如果有收获的话,欢迎点…

Verilog语法之数学函数

Verilog-2005支持一些简单的数学函数,其参数的数据类型只能是integer和real型。 Integer型数学函数 $clog2是一个以2为底的对数函数,其结果向上取整,返回值典型的格式: integer result; result $clog2(n); 最典型的应用就是通过…

数据库(三):行锁和表锁,共享锁和排他锁,数据库引擎MyISAM和InnoDB,乐观锁和悲观锁

文章目录前言零、数据库引擎一、封锁粒度二、行锁三、表锁四、数据库中的属性锁4.2. 意向锁五、乐观锁和悲观锁总结前言 之前我们提到了数据库的隔离性可能会出现的若干问题,以及数据库为了解决这些问题而提出来的若干种隔离级别。实际上,数据库底层实现…

代码随想录算法训练营第二十七天|● 39. 组合总和 ● 40.组合总和II ● 131.分割回文串

39. 组合总和 看完题后的思路 本题本质上还是一个传统排列题,不同之处在于每个元素可以重复选取。void f(【】,startIndex,sum)递归终止 if(和target){ 加入; 返回; }递…

HTTPS为什么就安全了?我们做了什么?

目录 一 安全概念 二 HTTPS的安全措施 三 总结 一 安全概念 网络安全是一个比较笼统的概念。我们说网络安全的时候,往往会包含很多安全问题,包括网络设备层面、通信过程、数据本身等多方面引入的安全问题。比如设备被有意无意的破坏,链路…

微搭低代码从入门到精通-03 创建模型应用

我们在进行低代码开发的时候,第一个需要建立的概念就是应用。不管你开发的是小程序还是管理系统,最终的承载物就是应用。 而我们创建应用是一共可以创建两种类型的应用,自定义应用和模型应用。自定义应用对应着一页多端,你开发一…

【Hello Linux】 Linux的权限以及Shell原理

作者:小萌新 专栏:Linux 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:介绍Linux的基础命令 Linux的权限以及Shell原理Shell的运行原理权限Linux中权限的概念如何切换用户如何提升当前操作的权限如何添加信任…