如何将多个Python脚本与一个JSON文件打包为单个EXE可执行文件?
把多个Python脚本+JSON文件打包成单个EXE的完整实现
我来给你一个亲测有效的实现方案,用PyInstaller就能轻松搞定这个需求,步骤清晰,跟着做就行!
1. 准备工作
首先确保你已经安装了PyInstaller,没装的话用pip一键安装:
pip install pyinstaller
2. 项目结构示例
先理清楚你的项目文件布局,我这里做个通用示例,你可以对应改成自己的文件:
my_packed_app/ ├── main.py # 程序的主入口脚本 ├── utils.py # 自定义依赖工具脚本 ├── config.json # 需要打包的JSON数据文件 └── helper_module.py # 其他自定义业务模块
3. 关键代码实现
重点要处理打包后的文件路径问题——PyInstaller会把所有资源放到临时目录,直接用相对路径会找不到文件,所以要写一个兼容打包前后的路径获取函数。
主入口脚本 main.py
import sys import os import json def get_resource_path(relative_path): """获取资源文件的正确路径,兼容打包前后两种场景""" try: # 打包后,PyInstaller会自动设置这个变量指向临时资源目录 base_path = sys._MEIPASS except Exception: # 未打包时,用当前脚本所在的目录 base_path = os.path.abspath(".") return os.path.join(base_path, relative_path) # 读取JSON数据文件 json_file_path = get_resource_path("config.json") with open(json_file_path, "r", encoding="utf-8") as f: app_config = json.load(f) print("✅ 成功加载配置:") print(app_config) # 导入并使用自定义依赖模块 from utils import show_greeting from helper_module import calculate_sum show_greeting(app_config["app_name"]) print("🔢 计算结果:", calculate_sum(10, 20))
依赖脚本 utils.py
def show_greeting(app_name): print(f"👋 欢迎使用 {app_name}!")
依赖脚本 helper_module.py
def calculate_sum(a, b): return a + b
JSON数据文件 config.json
{ "app_name": "我的打包工具", "version": "1.0.0", "author": "isrj5", "settings": { "auto_save": true, "theme": "dark" } }
4. 打包命令
有两种打包方式,选适合你的场景就行:
方式1:直接命令行打包(适合简单项目)
打开终端进入项目根目录,运行以下命令(注意Windows和类Unix系统的路径分隔符差异):
# Windows系统用分号分隔路径 pyinstaller --onefile --add-data "config.json;." --add-data "utils.py;." --add-data "helper_module.py;." main.py # Mac/Linux系统用冒号分隔路径 pyinstaller --onefile --add-data "config.json:." --add-data "utils.py:." --add-data "helper_module.py:." main.py
参数说明:
--onefile:生成单个独立的EXE文件--add-data:将指定的依赖文件/脚本打包进EXE,格式是"源文件;目标目录"(Windows)或"源文件:目标目录"(类Unix)
方式2:用spec文件打包(适合复杂项目)
如果你的项目有大量依赖或特殊配置,推荐用spec文件更灵活:
- 先生成默认的spec文件:
pyi-makespec --onefile main.py
- 打开生成的
main.spec文件,找到datas参数,添加你的依赖文件:
a = Analysis( ['main.py'], pathex=[], binaries=[], # 在这里添加所有需要打包的文件,格式是(源文件路径, 目标目录) datas=[('config.json', '.'), ('utils.py', '.'), ('helper_module.py', '.')], hiddenimports=[], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], noarchive=False, ) # 下面的内容保持默认即可
- 用spec文件执行打包:
pyinstaller main.spec
5. 验证效果
打包完成后,项目根目录会生成dist文件夹,里面就是你的单个EXE文件(Windows是.exe,Mac是.app,Linux是可执行文件)。双击运行它,你应该能看到控制台输出JSON配置内容、问候语和计算结果,说明所有文件都成功打包进去了!
内容的提问来源于stack exchange,提问作者isrj5
相关产品推荐
相关产品推荐

