如何将Python脚本与JSON配置合并为单个.exe并通过GUI修改配置
解决方案
核心思路
把初始配置直接内嵌到Python脚本中,第一次运行时自动在用户专属目录(如Windows的AppData/Roaming)生成配置文件,后续读写都针对这个文件操作。这样既不需要单独携带config.json,修改后的配置也能持久保存,下次启动自动加载。
具体实现步骤
1. 替换原有配置读写代码
用以下代码替换你原来的JSON读写逻辑,内嵌默认配置并自动管理配置文件路径:
import json import os import sys # 内嵌默认配置(把你原来config.json的完整内容放这里) DEFAULT_CONFIG = { "version_data": {"你的原有键值对"}, "software_dict": {"你的原有键值对"}, "paths_dict": {"你的原有键值对"} } def get_config_path(): # 获取用户专属配置目录,避免权限问题 if sys.platform == "win32": # Windows系统:AppData/Roaming/你的软件标识名 config_dir = os.path.join(os.environ["APPDATA"], "YourAppID") else: # 其他系统:~/.config/你的软件标识名 config_dir = os.path.join(os.path.expanduser("~"), ".config", "YourAppID") os.makedirs(config_dir, exist_ok=True) return os.path.join(config_dir, "config.json") # 加载配置 config_path = get_config_path() if os.path.exists(config_path): with open(config_path, "r", encoding="utf-8") as f: data = json.load(f) else: # 第一次运行,写入默认配置 data = DEFAULT_CONFIG with open(config_path, "w", encoding="utf-8") as f: json.dump(data, f, indent=4) # 初始化变量 version_data = data["version_data"] software_dict = data["software_dict"] paths_dict = data["paths_dict"] # 保存配置的函数(GUI修改完配置后调用这个函数) def save_config(): with open(config_path, "w", encoding="utf-8") as f: json.dump({ "version_data": version_data, "software_dict": software_dict, "paths_dict": paths_dict }, f, indent=4)
2. 打包脚本
继续使用原来的PyInstaller命令打包即可:
pyinstaller --onefile --noconsole "python_script.py"
关键说明
- 配置存储路径:选择用户专属目录是为了避免写入权限问题(比如exe放在
Program Files时,直接写同目录会报错),同时配置会跟随用户账户保存。 - 默认配置:
DEFAULT_CONFIG里要填入你原来config.json的完整嵌套结构,确保第一次运行时能正确初始化变量。 - 保存调用:GUI修改配置后,调用
save_config()函数即可将修改后的内容写入配置文件,下次启动自动加载新配置。
内容的提问来源于stack exchange,提问作者Evil Morty
相关产品推荐
相关产品推荐

