Auto-py-to-exe打包的单文件exe脱离原文件目录无法运行如何解决
故障原因
Auto-py-to-exe是PyInstaller的图形化封装工具,选择单文件模式打包时,你添加的附加文件a.txt不会直接和生成的exe存放在同一位置。程序启动时会自动把所有打包进去的依赖资源解压到系统临时目录下的专属_MEIPASS文件夹中运行。
你原来的代码直接用open("a.txt")读取文件,本质是在exe启动时的当前工作目录查找a.txt,自然找不到被藏在临时目录里的打包文件,只有当你把原始a.txt放在exe同目录时,程序才会误读到外部文件,看起来“正常运行”。
修复步骤
不需要调整现有打包的附加文件配置(只要你之前确实把a.txt加入了附加文件列表即可),只需要修改代码的路径读取逻辑,让程序自动区分是脚本运行环境还是打包后的exe运行环境,自动拼接正确的a.txt路径。
修改后的完整代码如下:
import sys import os subs = [] # 自动适配运行环境,定位资源文件路径 if getattr(sys, 'frozen', False): # 打包为exe运行时,从PyInstaller的临时解压目录取资源 resource_dir = sys._MEIPASS else: # 本地跑py脚本时,从脚本当前工作目录取资源 resource_dir = os.path.abspath(".") a_file_path = os.path.join(resource_dir, "a.txt") with open(a_file_path, encoding="utf-8") as file: for line in file: if line != "\n": x = line.strip() subs.append(x)
注:代码里加了
encoding="utf-8"是为了避免Windows系统默认GBK编码读取txt时报编码错误,如果你的a.txt是其他编码可以自行调整。
重新打包注意事项
- 确认Auto-py-to-exe中选择的是单文件输出模式
- 确认「附加文件」列表中已经正确添加了
a.txt - 重新打包生成的exe可以单独移动到任意没有原始py脚本、原始a.txt的目录下运行,不会再报文件找不到的错误
内容的提问来源于stack exchange,提问作者BeginnerCode776
相关产品推荐
相关产品推荐

