pyinstaller打包json文件的方法

最近在构造一个系统,包含了json文件。

将json文件打包进最后的exe文件中,步骤如下:

步骤 1: 使用 --add-data 选项

当使用 PyInstaller 从命令行打包程序时,可以使用 --add-data 选项来指定需要包含的数据文件。这个选项的语法在不同操作系统上略有不同。

对于Windows系统,可以这样使用:

bash 复制代码
pyinstaller --onefile --windowed --add-data "data.json;." sele.py

这里,"data.json;." 表示将当前目录(源代码所在目录)的 data.json 文件添加到可执行文件所生成的临时目录下。分号用于分隔源文件路径和目标文件路径。

需要注意的是,对于Linux和macOS系统,我们应该使用冒号而不是分号:

bash 复制代码
pyinstaller --onefile --windowed --add-data "data.json:." sele.py

步骤 2: 在代码中指定资源路径

当使用PyInstaller打包后,程序的工作目录可能会改变,因此,直接使用相对路径访问资源文件可能会失败。要解决这个问题,最好的办法是在代码中动态地确定资源文件的路径。例如:

python 复制代码
import sys
import os

# 判断程序是不是用 PyInstaller 打包的
if getattr(sys, 'frozen', False):
    # 如果是,使用这个路径
    application_path = sys._MEIPASS
else:
    # 如果不是,使用普通的Python环境路径
    application_path = os.path.dirname(os.path.abspath(__file__))

data_path = os.path.join(application_path, 'data.json')

# 现在可以使用 data_path 来访问 data.json 文件
with open(data_path, 'r') as file:
    data = file.read()

这段代码首先检查程序是否被PyInstaller打包(通过检查 sys.frozen)。如果是,它使用 sys._MEIPASS 目录作为应用程序的工作路径。这个目录是PyInstaller创建的临时目录,用于存储所有包含的资源文件。如果程序没有被打包,它就使用脚本的当前目录。

按照上述步骤,可以确保 data.json 文件被正确包含在最终的exe文件中,并且能够在程序运行时被正确地读取。

相关推荐
淼澄研学几秒前
Win11 Dev Home与WinGet实操:基于JSON的声明式环境配置指南
json
可乐鸡翅yeah_9 小时前
开发调试高频痛点解决,一站式在线加密解密与编码转换实战
json·加密解密·json在线转换
小疯仔20 小时前
轨迹在地图上“漂“了 500 米?一文吃透 WGS-84→GCJ-02 坐标转换引擎(GPX→JSON 实战源码剖析)
小程序·json·notepad++
Flynt1 天前
"只输出 JSON"根本不够:LLM 结构化输出的坑,我实测了 60 次调用
llm·json
她说..1 天前
MySQL 与 Java 的 JSON 数据处理
java·mysql·json·springboot
牛油果子哥q2 天前
C++对接LLM完整工程:异步HTTP请求、JSON解析、超时容错、重连兜底
c++·http·json
小刘在重生~2 天前
Django|Ajax 入门、JSON 返回、ECharts 图表、文件上传完整笔记
ajax·django·json
谢斯4 天前
[unity]如何在unity中添加newtonsoft-json
unity·json·游戏引擎
2601_962066935 天前
短视频批量制作怎么做?2026年用 huasheng-cli 的 --json 与退出码,一张选题表批量出片
json·音视频
oliver_sys_log6 天前
老项目 json-lib 2.4 JSONTokener 精度丢失问题排查
json