添加到Path环境变量的Python打包Exe无法读取配置文件求助
解决方案:通过获取exe实际路径加载配置文件
PyInstaller这类打包工具会在运行时将exe解压到临时目录执行,导致程序当前工作目录偏离exe的实际存放路径,直接用相对路径自然找不到.config文件。核心解决思路是获取exe本身的实际文件路径,再从该路径所在目录加载配置文件,完全不需要预定义固定路径。
具体实现方法
方法一:兼容开发与打包环境的通用写法
通过判断PyInstaller的临时环境标记,分别返回对应目录:
import sys import os def get_app_root_dir(): # 识别PyInstaller打包后的临时运行环境 if hasattr(sys, '_MEIPASS'): # 获取原始exe的实际路径(而非临时目录中的执行文件) exe_real_path = os.path.realpath(sys.executable) return os.path.dirname(exe_real_path) else: # 开发环境下,返回脚本所在目录 return os.path.dirname(os.path.realpath(sys.argv[0])) # 拼接配置文件路径并加载 config_file_path = os.path.join(get_app_root_dir(), '.config') with open(config_file_path, 'r', encoding='utf-8') as f: config_content = f.read()
方法二:简化版写法(仅针对打包后的exe)
如果只考虑打包后的运行场景,可直接通过sys.executable获取原始exe路径,无需判断临时环境:
import os import sys # 获取exe所在的实际目录 exe_dir = os.path.dirname(os.path.abspath(sys.executable)) # 拼接配置文件路径 config_path = os.path.join(exe_dir, '.config')
打包注意事项
- 确保
.config文件与exe放在同一目录,打包时无需额外参数将配置文件嵌入exe(否则会被解压到临时目录,无法外部修改)。 - 测试时将exe所在目录添加到系统
Path环境变量后,在任意命令行窗口执行exe,程序都会自动定位到同目录下的.config文件。
内容的提问来源于stack exchange,提问作者Katori
相关产品推荐
相关产品推荐

