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
相关产品推荐
相关产品推荐

