You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 13:10:54