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

Python转EXE时遇FileNotFoundError:无法找到struct.json文件

问题原因与解决方案

问题本质

PyInstaller的单文件模式和文件夹模式运行机制完全不同:

  • 文件夹模式下,所有依赖文件(包括struct.json、ext.json)会直接放在输出文件夹里,和exe同目录,所以./struct.json这类相对路径能正常找到文件。
  • 单文件模式下,PyInstaller会把所有代码和依赖打包成单个exe,运行时会先将整个包解压到系统临时目录(比如Windows的%temp%\_MEIxxxxxx)。此时代码里的./struct.json指向的是你运行exe的当前目录,而非临时目录里的json文件,自然会触发找不到文件的错误。

解决步骤

1. 修改代码,动态获取资源路径

通过PyInstaller提供的sys._MEIPASS变量获取临时目录路径,结合文件名拼接出正确的资源路径。修改你的文件读取代码:

import sys
import os

def get_resource_path(filename):
    # 打包后环境:使用临时目录路径
    if hasattr(sys, '_MEIPASS'):
        return os.path.join(sys._MEIPASS, filename)
    # 开发环境:使用脚本所在目录的绝对路径
    return os.path.join(os.path.dirname(os.path.abspath(__file__)), filename)

# 读取json文件(建议用with语句自动管理文件句柄)
with open(get_resource_path('struct.json'), encoding="utf-8") as struct_file:
    # 这里添加你的文件处理逻辑
    pass

with open(get_resource_path('ext.json'), encoding="utf-8") as ext_file:
    # 这里添加你的文件处理逻辑
    pass

用os.path.dirname(os.path.abspath(__file__))替代./,能确保开发环境下,无论你在哪个目录运行py文件,都能从脚本所在目录正确读取资源。

2. 确认PyInstaller命令参数正确

你当前的--add-data参数无需修改,它能正确将json文件打包进exe,运行时解压到临时目录根目录:

--add-data "../../ext.json;." --add-data "../../struct.json;."

验证

重新运行py-to-exe.bat生成单文件exe,运行后即可正常读取json文件。

内容的提问来源于stack exchange,提问作者O'Schell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:40:11