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

Python3使用PyInstaller打包含Excel文件的脚本后报文件找不到错误如何解决

问题原因与解决方案

1. 核心问题:路径读取逻辑错误

PyInstaller的--onefile模式运行时,会先将所有打包的资源文件解压到系统临时目录的随机文件夹下。你代码里如果直接用相对路径Example.xlsx读取文件,默认是去exe的当前工作目录(也就是你双击运行exe时的所在文件夹)查找,而非临时解压目录,自然会报文件不存在。
你需要在代码里动态获取资源文件的实际路径,适配开发和打包双环境,示例代码如下:

import os
import sys

def get_resource_path(relative_path):
    if getattr(sys, 'frozen', False):
        # 打包后exe运行环境,取临时解压目录路径
        base_path = sys._MEIPASS
    else:
        # 本地开发环境,取当前脚本所在目录
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

# 读取Excel前调用该方法获取真实路径
excel_path = get_resource_path("Example.xlsx")
# 后续用pandas/openpyxl等工具直接读取excel_path即可

2. 配置不匹配问题

你执行打包命令时指定添加的文件是Example.xlsx,但你贴出的spec文件里datas配置的是('210307 Valuation portfolio (HC).xlsx', '.'),两个文件名完全不一致,说明要么是打包命令写错,要么是你手动修改过spec文件后没有基于spec重新打包。
对应修正方案:

  • 直接用命令打包:确保文件名匹配,Windows环境下注意路径分隔符用分号:
    pyinstaller --onefile --add-data "Example.xlsx;." main.py
  • 基于spec文件打包:先把spec里datas的源文件名改成Example.xlsx,再执行打包命令:
    pyinstaller main.spec

3. 快速校验方法

你可以先把生成的exe和Example.xlsx放在同一个文件夹下运行,如果此时可以正常启动,就说明核心问题确实是路径读取逻辑错误,按第一个方案修改代码即可。

内容的提问来源于stack exchange,提问作者justheretobe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:36:04