使用auto-py-to-exe生成的EXE获取执行路径错误问题求助
解决auto-py-to-exe打包后路径获取错误的问题
你用auto-py-to-exe打包Python脚本为exe后,程序能正常运行,但获取的路径是系统临时目录(比如C:\Users\username\AppData\Local\Temp\_MEI26762),而非exe实际所在的C:\Users\username\Desktop\Bot目录,导致base和logs文件夹路径错误。
问题原因
auto-py-to-exe基于PyInstaller,打包后的exe运行时会把脚本解压到系统临时目录,此时os.path.abspath(__file__)指向的是临时目录里的脚本文件,而不是你的exe所在路径。
解决方案
修改路径获取逻辑,区分打包后和未打包的运行状态:
- 导入
sys模块 - 新增判断逻辑,获取正确的exe所在目录
修改后的完整代码:
import os import sys def get_script_dir(): # 判断是否为打包后的可执行文件 if getattr(sys, 'frozen', False): # 打包后,sys.executable指向当前运行的exe文件路径 script_dir = os.path.dirname(os.path.abspath(sys.executable)) else: # 未打包时,使用脚本文件的原始路径 script_dir = os.path.dirname(os.path.abspath(__file__)) return script_dir # 获取程序所在目录 script_dir = get_script_dir() print('Script located at:') print(script_dir) # 切换工作目录到程序所在位置 os.chdir(script_dir) new_cwd = os.getcwd() # 用os.path.join拼接路径,适配不同系统的路径分隔符 BASE_FOLDER = os.path.join(new_cwd, 'base') LOG_FOLDER = os.path.join(new_cwd, 'logs') print('Bases are taken from:') print(BASE_FOLDER) print('Logs are stored in:') print(LOG_FOLDER) base_csv = os.listdir(BASE_FOLDER)
额外优化
推荐使用os.path.join()拼接路径,替代直接字符串相加,这样能自动适配Windows、Linux等不同系统的路径分隔符,避免出现跨系统的路径错误。
内容的提问来源于stack exchange,提问作者Juan de la Cuadra
相关产品推荐
相关产品推荐

