如何通过Python脚本生成.spec文件并打包JSON至exe
PyInstaller打包JSON文件的脚本实现方案
一、能否通过现有代码生成.spec文件?
现有代码执行时会自动生成.spec文件,但会直接完成后续打包流程。如果想仅生成.spec文件、不执行打包,可以直接调用PyInstaller的makespec模块,脚本示例:
from PyInstaller.building.makespec import main # 生成.spec文件,参数与命令行pyi-makespec一致 main([ 'main.py', '--onefile', r'-i=some_picture.ico', '--noconsole', '--specpath=./' # 指定.spec文件生成在当前目录,可选 ])
执行该脚本后,当前目录会生成对应的main.spec文件,后续可直接编辑该文件添加JSON打包逻辑。
二、当前步骤是否是打包JSON文件的正确方式?
不是。现有代码未包含JSON文件的打包配置,需要通过编辑.spec文件实现,完整流程如下:
1. 编辑.spec文件添加JSON打包规则
打开生成的main.spec,找到Analysis部分,在datas参数中添加JSON文件的路径配置,格式为(源文件路径, 打包后存放路径):
a = Analysis( ['main.py'], pathex=[], binaries=[], # 示例:将同目录下的config.json打包后放在exe根目录 datas=[('config.json', '.')], hiddenimports=[], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], noarchive=False, )
2. 调用脚本执行.spec文件完成打包
编辑好.spec后,用以下脚本执行打包:
import PyInstaller.__main__ # 直接传入.spec文件名,所有配置已在.spec中定义 PyInstaller.__main__.run(['main.spec'])
3. 代码中读取打包后的JSON文件
由于是--onefile打包,运行时exe会解压到系统临时目录,读取JSON时需适配路径:
import json import sys import os def get_config_path(): # 判断是否为打包后的运行环境 if getattr(sys, 'frozen', False): base_dir = sys._MEIPASS else: base_dir = os.path.dirname(os.path.abspath(__file__)) return os.path.join(base_dir, 'config.json') # 读取配置 with open(get_config_path(), 'r', encoding='utf-8') as f: config_data = json.load(f)
内容的提问来源于stack exchange,提问作者IM123
相关产品推荐
相关产品推荐

