实现自动打包py及替换pyinstaller --add-data参数的方法

2024年了,PyInstaller已经来到了6.5.0版本,可我还是不会用它那个--add-data的方法,度了几圈试了试,始终不(行)如(不)意(通),就是没能把附加文件(或资源文件)弄到dist目录中去,百思不得解,只能另寻它法,佛说:法海无边!

一、使用环境

1.Win 10 64位操作系统

2.python3.12.2 32位

3.IDE:PyCharm 2024.1 社区版

4.pyinstaller 6.5.0

二、我的项目结构如下

当然手动复制可以解决你的烦恼,可是,我不想啊!能自动为啥不用自动呢!

看了上图,有人会说为啥不加上--add-data呢,抱一丝,哥玩不转它。

哥尝试:

pyinstaller -F -w -i iss_32.ico --add-data ".\cfg.ini;.\dist" --add-data ".\audio\*;.\dist\audio" LedController.py
或
pyinstaller -F -w -i iss_32.ico --add-data "./cfg.ini;./dist" --add-data "./audio/*;./dist/audio" LedController.py
或
pyinstaller -F -w -i iss_32.ico --add-data ".\\cfg.ini;.\\dist" --add-data ".\\audio\\*;.\\dist\\audio" LedController.py
或
pyinstaller -F -w -i iss_32.ico --add-data ".//cfg.ini;.//dist" --add-data ".//audio//*;.//dist//audio" LedController.py
或
pyinstaller -F -w -i iss_32.ico --add-data "\cfg.ini;\dist" --add-data "\audio\*;\dist\audio" LedController.py
或
pyinstaller -F -w -i iss_32.ico --add-data "/cfg.ini;/dist" --add-data "/audio/*;/dist/audio" LedController.py
或
pyinstaller -F -w -i iss_32.ico --add-data "\\cfg.ini;\\dist" --add-data "\\audio\\*;\\dist\\audio" LedController.py
或
pyinstaller -F -w -i iss_32.ico --add-data "//cfg.ini;//dist" --add-data "//audio//*;//dist//audio" LedController.py

没毛用!

再尝试改spec文件中的datas参数,再pyinstaller LedController.spec

pyinstaller LedController.spec
datas=[('./cfg.ini', './dist'), ('./audio/*', './dist/audio')]
或
datas=[('.\cfg.ini', '.\dist'), ('.\audio\*', '.\dist\audio')]
或
datas=[('/cfg.ini', '/dist'), ('/audio/*', '/dist/audio')]
或
datas=[('\cfg.ini', '\dist'), ('\audio\*', '\dist\audio')]
或
datas=[('.\\cfg.ini', '.\\dist'), ('.\\audio\\*', '.\\dist\\audio')]
或
datas=[('.//cfg.ini', './/dist'), ('.//audio//*', './/dist//audio')]
或
datas=[('\\cfg.ini', '\\dist'), ('\\audio\\*', '\\dist\\audio')]
或
datas=[('//cfg.ini', '//dist'), ('//audio//*', '//dist//audio')]

还是没毛用!

于是看了看 https://pyinstaller.org/_/downloads/en/v6.5.0/pdf/

赶紧试了下

pyinstaller --noconfirm --log-level=WARN --onefile --nowindow --add-data="cfg.ini;config" LedController.py

嗯!.............................................这..................绝对不可能!好吧,我还是放弃吧。这不是我能触摸的,我的境界还不够!

此时音乐响起,好难过,这不是我要的那种结果,太多太多,让我迷惑,最后我还是迷失了自我,求求你不要再来折磨我...

三、开始自摸之路

1.创建一个build.py用于实现自动打包成exe和添加附加文件,再也不用频繁在命令行敲代码了

# -*- coding: utf-8 -*-
import os
import time
import shutil
import PyInstaller.__main__# 清除缓存文件
# 判断是否有build、dist文件夹以及.spec文件,有就删除
if os.path.isdir(r'.\build'):shutil.rmtree(r'.\build')
if os.path.isdir(r'.\dist'):shutil.rmtree(r'.\dist')
if os.path.isfile(r'.\LedController.spec'):os.remove(r'.\LedController.spec')
time.sleep(2)# 开始生成exe文件,等同于:pyinstaller -F -w -i iss_32.ico LedController.py
PyInstaller.__main__.run(['-F','-w','--icon=iss_32.ico',  # 这里不能使用-i iss_32.ico,说是无此文件,奇怪'LedController.py'
])
time.sleep(2)# 复制附加文件(如资源文件等)到生成的exe文件同一目录中
# PS:百度了很多的pyinstaller参数--add-data的用法反正是死活没成功
# 还不如另寻它法,条条大路通罗马,何必单恋这只花
# 把当前目录下的cfg.ini文件到当前dist目录中
shutil.copy2(r'.\cfg.ini', r'.\dist')
# 把当前目录下的audio文件夹(包括里面所有的文件)复制到当前dist目录中
shutil.copytree(r'.\audio', r'.\dist\audio')
print("=========生成完成!=========")

2.点击运行当前脚本

3.奈斯!完美!把附加文件自动复制到dist目录下了

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【nodejs基础学习三-浏览器偏好设置】

系列文章目录 第一章 nodejs基础学习–注释、变量、运算符、字符串、函数(一) 第二章 nodejs基础学习–循环、对象字符、模块导入出(二) 第三章 nodejs基础学习三-浏览器设置 系列文章目录一、开发者模式二、web偏好设置 一、开发…

2021年团体程序设计天梯赛-总决赛_L1

标题:L1-1 人与神 题目: 跨界大神 L. Peter Deutsch 有一句名言:“To iterate is human, to recurse divine.”(迭代的是人,递归的是神)。本题就请你直接在屏幕上输出这句话。 输入格式: 本题没…

Linux之线程互斥与同步

1.线程互斥相关概念 临界资源:多线程执行流共享的资源就叫做临界资源 。 临界区:每个线程内部,访问临界自娱的代码,就叫做临界区。 互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临…

后端nginx使用set_real_ip_from获取用户真实IP

随着nginx的迅速崛起,越来越多公司将apache更换成nginx. 同时也越来越多人使用nginx作为负载均衡, 并且代理前面可能还加上了CDN加速,但是随之也遇到一个问题:nginx如何获取用户的真实IP地址. 前言:Nginx ngx_http_realip_module…

MapMagic 2 Splines (Beta)

请注意,要使用该模块则必须安装带对象模块的 MapMagic 2 才行。此模块目前正处于早期体验阶段。其功能有限。 MapMagic 2 世界生成器的官方模块。把样条线带到 MapMagic 中,可用于创建道路、溪流、河流或其他加长的对象。 下载:​​Unity资…

c 语言 斐波那契搜索(Fibonacci Search)

给定一个大小为 n 的排序数组 arr[] 和要在其中搜索的元素 x。如果 x 存在于数组中,则返回 x 的索引,否则返回 -1。 例子: 输入: arr[] {2, 3, 4, 10, 40}, x 10输出: 3 元素 x 出现在索引 3 处。 输入&#xff1…

数据结构-合并两个有效数组

题目描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,…

意得辑意得辑

你是否也曾遇到过在发表论文时英语写作水平不尽如人意的困境?审稿意见总是指出语言表达不够好,需要找英语母语者修改?不用担心,我和你一样,也曾历经这样的挑战。但是,我找到了一家值得信赖的专业润色机构—…

Apache Incubator Answer 本地开发部署

文章目录 简介Github文档插件部署 Answer开发环境编译项目初始化项目运行项目 简介 一款适合任何团队的问答平台软件。 Apache Incubator Answer是一个开源项目,它是一个用于构建和部署问答系统的框架。该项目是Apache软件基金会的孵化器项目,提供一个…

Lobe UI - 基于 AntDesign 开发的 AIGC Web 应用的开源 UI 组件库

今天推荐一个可以快速开发 ChatGPT UI 界面的组件库,质量很高,拿来就能用。 Lobe UI 是由 lobehub 团队开发的一套 web UI 组件库,和我之前推荐的很多通用型的 UI 组件库不同,Lobe UI 是专门为目前火热的 AIGC 应用开发而打造&am…

一起学习python——基础篇(13)

前言,python编程语言对于我个人来说学习的目的是为了测试。我主要做的是移动端的开发工作,常见的测试主要分为两块,一块为移动端独立的页面功能,另外一块就是和其他人对接工作。 对接内容主要有硬件通信协议、软件接口文档。而涉…

Mybatis-Plus快速入门

MyBatisPlus 通过扫描实体类,并基于反射获取实体类信息作为数据库信息 类名驼峰转下划线作为表名为id的字段作为主键变量名驼峰转下划线作为表的字段名 遵守这些约定MyBatisPlus就会自动生成字段,方便我们快速实现 一、快速入门 起步依赖 MyBatisPlus…

天软特色因子看板 (2024.4 第3期)

该因子看板跟踪天软特色因子A05005(近一月单笔流出金额占比(%),该因子为近一月单笔流出金额占比(% 均值因子,用以刻画下跌时的 单成交中可能存在的抄底现象 今日为该因子跟踪第3期,跟踪其在SH000852 (中证1000) 中的表现,要点如下…

加州大学欧文分校英语基础语法专项课程01:Word Forms and Simple Present Tense 学习笔记

Word Forms and Simple Present Tense Course Certificate 本文是学习Coursera上 Word Forms and Simple Present Tense 这门课程的学习笔记。 文章目录 Word Forms and Simple Present TenseWeek 01: Introduction & BE VerbLearning Objectives Word FormsWord Forms (P…

vivado 调试核时钟设置指南

调试核时钟设置指南 注释 : 以下章节适用于 7 系列、 UltraScale 和 UltraScale 器件。 Versal 调试核使用基于 AXI 的连接 , 且不受本章中的 时钟设置指南的约束。 Vivado 硬件管理器使用 JTAG 接口来与 Vivado Debug Hub 核进行通信 &#…

Dubbo 序列化

Dubbo 序列化 1、什么是序列化和反序列化 序列化(serialization)在计算机科学的资料处理中,是指将数据结构或对象状态转换成可取用格式(例如存成文件,存于缓冲,或经由网络中发送),…

物联网实验

实验1 基于ZStack光敏传感器实验 1.实验目的 我们通过上位机发指令给协调器,协调器把串口接收到的指令通过Zigbee协议无线发送给带有光敏传感器的终端节点,获取到数据以后把数据返回给上位机,实现无线获取数据的目的。 2.实验设备 硬件&a…

酷开科技一手抓技术,一手抓内容,领跑0TT大屏领域发展

相较于流量池接近饱和的平台而言,OTT市场对于内容创作者是一片新的领域,不同于PC端和移动端,“大屏”设备或许是当下短视频市场不可多得的流量洼地。酷开系统正在用“屏”来为人们构建一个场景智能化的高效率、更便捷、超炫酷的新生活方式。以…

C语言中的数据结构--链表的应用1(2)

前言 上一节我们学习了链表的概念以及链表的实现,那么本节我们就来了解一下链表具体有什么用,可以解决哪些实质性的问题,我们借用习题来加强对链表的理解,那么废话不多说,我们正式进入今天的学习 单链表相关经典算法O…

乡村智慧化升级:数字乡村打造农村生活新品质

目录 一、乡村智慧化升级的内涵与意义 二、乡村智慧化升级的具体实践 1、加强农村信息基础设施建设 2、推广智慧农业应用 3、提升乡村治理智慧化水平 4、丰富智慧乡村生活内容 三、数字乡村打造农村生活新品质的成果展现 1、农业生产效率与质量双提升 2、农民收入与消…