Pyinstaller打包

打包配置

打包方法

方法一 直接打包

sh

pyinstaller --onefile script.py

方法二 通过配置spec文件打包

sh

pyinstaller script.spec

常见问题

问题1.Exception Type: FileNotFoundError

pyinstaller打包,如何添加静态文件,比如app\\resources\\data\\version_list.json

在使用PyInstaller打包Python应用程序时,添加静态文件(如app/resources/data/version_list.json)可以通过以下几种方法实现:

方法1:使用--add-data选项

这是最常用的方法,通过--add-data选项可以指定要包含的文件及其目标路径。具体命令如下:

sh复制

pyinstaller --add-data "app/resources/data/version_list.json;app/resources/data" script.py
  • app/resources/data/version_list.json是源文件的路径。

  • app/resources/data是目标路径,即打包后文件在临时目录中的相对路径。

  • 在Windows上,路径分隔符是;,在Linux和macOS上是:

方法2:编辑.spec文件

如果你已经生成了.spec文件,可以通过编辑该文件来添加静态文件。首先,使用以下命令生成.spec文件:

sh复制

pyinstaller --onefile script.py

这将生成一个script.spec文件。然后,编辑该文件,在Analysis部分的datas列表中添加你的文件:

Python复制

a = Analysis(['script.py'],...datas=[('app/resources/data/version_list.json', 'app/resources/data')],...)

最后,使用.spec文件重新打包:

sh复制

pyinstaller script.spec

方法3:在代码中动态获取资源文件路径

为了确保程序在打包后能够正确找到资源文件,可以在代码中使用sys._MEIPASS来动态获取资源文件的路径。以下是一个示例函数,用于获取资源文件的路径:

Python复制

import os
import sysdef get_resource_path(relative_path):if hasattr(sys, '_MEIPASS'):return os.path.join(sys._MEIPASS, relative_path)return os.path.join(os.path.abspath("."), relative_path)# 使用示例
version_list_path = get_resource_path("app/resources/data/version_list.json")

这个函数会根据程序是直接从源代码运行还是从打包后的可执行文件运行,来返回正确的资源文件路径。

完整示例

假设你的项目结构如下:

复制

project/
│
├── app/
│   ├── resources/
│   │   └── data/
│   │       └── version_list.json
│   └── ui/
│       └── tool/
│           └── pc_decrypt/
│               └── pc_decrypt.py
│
└── main.py

你可以在main.py中使用以下代码来获取version_list.json文件的路径:

Python复制

import os
import sysdef get_resource_path(relative_path):if hasattr(sys, '_MEIPASS'):return os.path.join(sys._MEIPASS, relative_path)return os.path.join(os.path.abspath("."), relative_path)# 使用示例
version_list_path = get_resource_path("app/resources/data/version_list.json")# 读取文件内容
with open(version_list_path, 'r') as file:version_list = file.read()print(version_list)

然后使用以下命令打包:

sh复制

pyinstaller --add-data "app/resources/data/version_list.json;app/resources/data" main.py

这样,打包后的可执行文件在运行时就能正确找到并读取version_list.json文件了。

问题二 找不到模块

如果打包后运行提示找不到某些模块,可以:

使用 --hidden-import 参数手动添加
在spec文件中的 hiddenimports 列表中添加

问题三. 文件路径问题

在打包后的程序中,需要特别注意文件路径的处理:

import os
import sys

# 获取程序运行时的真实路径
if getattr(sys, 'frozen', False):
    application_path = os.path.dirname(sys.executable)
else:
    application_path = os.path.dirname(os.path.abspath(__file__))


问题四.减小文件体积

通过以下方法减小打包后的文件体积:

使用虚拟环境,只安装必要的依赖
使用 --exclude-module 排除不需要的模块
使用UPX压缩(如果可用)


注意事项

始终使用虚拟环境进行开发和打包
仔细检查依赖项,避免包含不必要的模块
在目标平台上测试打包后的程序
保存并管理spec文件,方便后续修改和重新打包
记录打包过程中的问题和解决方案

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

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

相关文章

腾讯云AI代码助手编程挑战赛-智能聊天助手

作品简介 本作品开发于腾讯云 AI 代码助手编程挑战赛,旨在体验腾讯云 AI 代码助手在项目开发中的助力。通过这一开发过程,体验到了 AI 辅助编程的高效性。 技术架构 前端: 使用 VUE3、TypeScript、TDesign 和 ElementUI 实现。 后端: 基于 Python 开发…

计算机视觉算法实战——面部特征点检测

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​​​​​​​​​​​​​​​​​​ 1. 领域介绍✨✨ 面部特征点检测(Facial Landmark Detection)是计算机视觉中…

【STM32-学习笔记-8-】I2C通信

文章目录 I2C通信Ⅰ、硬件电路Ⅱ、IIC时序基本单元① 起始条件② 终止条件③ 发送一个字节④ 接收一个字节⑤ 发送应答⑥ 接收应答 Ⅲ、IIC时序① 指定地址写② 当前地址读③ 指定地址读 Ⅳ、MPU6050---6轴姿态传感器(软件I2C)1、模块内部电路2、寄存器地…

Android SDK下载安装(图文详解)

安装完sdk,就可以直接使用adb命令了,我们做app自动化测试,也需要sdk环境的依赖。 1. 下载Android SDK 网盘下载地址:https://pan.quark.cn/s/8398e52cefc9 官网下载地址:https://www.androiddevtools.cn/ (…

农业移动式水肥一体机全面解析:开启精准农业新篇章

在当今科技飞速发展的时代,农业领域也迎来了众多创新设备,农业移动式水肥一体机便是其中的佼佼者。它正悄然改变着传统的农业灌溉与施肥模式,为实现精准农业提供了强有力的支持。 一、什么是农业移动式水肥一体机 农业移动式水肥一体机&…

2008-2020年各省社会消费品零售总额数据

2008-2020年各省社会消费品零售总额数据 1、时间:2008-2020年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区、年份、社会消费品零售总额 4、范围:31省 5、指标解释:社会消费品零售总额指企业&#x…

江科大STM32入门——读写备份寄存器(BKP)实时时钟(RTC)笔记整理

wx:嵌入式工程师成长日记 https://mp.weixin.qq.com/s/hDk7QaXP8yfYIj1gUhtMrw?token1051786482&langzh_CNhttps://mp.weixin.qq.com/s/hDk7QaXP8yfYIj1gUhtMrw?token1051786482&langzh_CN RTC是一个独立的定时器,BKP并不能完全掉电不丢失&am…

GitLab CI/CD使用runner实现自动化部署前端Vue2 后端.Net 7 Zr.Admin项目

1、查看gitlab版本 建议安装的runner版本和gitlab保持一致 2、查找runner 执行 yum list gitlab-runner --showduplicates | sort -r 找到符合gitlab版本的runner,我这里选择 14.9.1版本 如果执行出现找不到下载源,添加官方仓库 执行 curl -L &quo…

MySQL解压版(保姆级教程)

文章目录 1. 下载MySQL2. 解压压缩包3. 添加环境变量4. 创建配置文件5. 启动管理员模式下的CMD6. 重启mysql7. 检查服务是否成功启动8. 可能遇见的错误🎯 数据目录未正确初始化🎯 MySQL服务已存在但路径错误🎯 端口被占用🎯 MySQL…

人工智能实验(四)-A*算法求解迷宫寻路问题实验

零、A*算法学习参考资料 1.讲解视频 A*寻路算法详解 #A星 #启发式搜索_哔哩哔哩_bilibili 2.A*算法学习网站 A* 算法简介 一、实验目的 熟悉和掌握A*算法实现迷宫寻路功能,要求掌握启发式函数的编写以及各类启发式函数效果的比较。 二、实验要求 同课本 附录…

【Vue实战】Vuex 和 Axios 拦截器设置全局 Loading

目录 1. 效果图 2. 思路分析 2.1 实现思路 2.2 可能存在的问题 2.2.1 并发请求管理 2.2.2 请求快速响应和缓存带来的问题 3. 代码实现 4. 总结 1. 效果图 如下图所示,当路由变化或发起请求时,出现 Loading 等待效果,此时页面不可见。…

Github配置ssh key,密钥配对错误怎么解决?

解决密钥配对的方案如下: 方法一、最有效的方案:重新配置,验证 SSH 密钥是否已添加到 GitHub 确保您的 SSH 密钥已经正确添加到了 GitHub 账户中。您可以打开命令行控制台(cmd/powerShell都可以),按照以下…

Java基础知识(六) -- 常用类

1.包装类 1.1 概述 Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,但当使用只针对对象设计的API或新特性(例如泛型),那么基本数据类型的数据就需要用包装类来包装。 序号基本数据类型包装类(java…

【Linux】深入理解文件系统(超详细)

目录 一.磁盘 1-1 磁盘、服务器、机柜、机房 📌补充: 📌通常网络中用高低电平,磁盘中用磁化方向来表示。以下是具体说明: 📌如果有一块磁盘要进行销毁该怎么办? 1-2 磁盘存储结构 ​编辑…

【硬件介绍】Type-C接口详解

一、Type-C接口概述 Type-C接口特点:以其独特的扁头设计和无需区分正反两面的便捷性而广受欢迎。这种设计大大提高了用户的使用体验,避免了传统USB接口需要多次尝试才能正确插入的问题。Type-C接口内部结构:内部上下两排引脚的设计虽然可能不…

Linux第二课:LinuxC高级 学习记录day02

2.4、shell中的特殊字符 2.4.4、命令置换符 或者 $() 反引号:esc下面的按键,英文状态下直接按 功能:将一个命令的输出作为另一个命令的参数 echo 不会认为hostname是一个命令 加上 之后,先执行hostname,拿到主机名…

图生生AI描述生图:一句话生成蛇年海报素材

2025年春晚吉祥物“巳升升”的亮相,引发了广泛讨论。其整体造型参考甲骨文中的“巳”字,以青绿色为主调,象征春意盎然、蓬勃生机。从头部轮廓、脸颊螺旋形状到五官设计,都蕴含着丰富的传统文化元素。巳升升的亮相,春节…

KMP前缀表 ≈ find() 函数——28.找出字符串中第一个匹配项的下标【力扣】

class Solution { public: //得到前缀表void getNext(int *next,string needle){int j0;for(int i1;i<needle.size();i){while(j>0 && needle[j]!needle[i]) jnext[j-1];//**j>0**>j0是出口if(needle[i]needle[j]) j;next[i]j;//若写入if中&#xff0c;则该…

前端笔记----

在我的理解里边一切做页面的代码都是属于前端代码。 之前用过qt框架&#xff0c;也是用来写界面的&#xff0c;但是那是用来写客户端的&#xff0c;而html是用来写web浏览器的&#xff0c;相较之下htmlcssJavaScript写出来的界面是更加漂亮的。这里就记录我自个学习后的一些笔…

FairGuard游戏安全2024年度报告

导 读&#xff1a;2024年&#xff0c;国内游戏市场实际销售收入3257.83亿元&#xff0c;同比增长7.53%&#xff0c;游戏用户规模6.74亿人&#xff0c;同比增长0.94%&#xff0c;市场收入与用户规模双双实现突破&#xff0c;迎来了历史新高点。但游戏黑灰产规模也在迅速扩大&…