如何获取编译为.exe文件的Python脚本的实际路径?
解决auto-py-to-exe生成的.exe无法获取自身真实路径的问题
当用auto-py-to-exe打包Python脚本后,程序运行时会被自动解压到系统临时目录,此时os.path.abspath(__file__)指向的是临时文件夹里的脚本副本,而非最终的.exe文件路径。以下是两种可行的解决方法:
方法一:利用sys.executable获取exe路径
sys.executable在打包后会直接指向当前运行的.exe文件,未打包时则指向Python解释器。结合打包环境判断使用:
import os import sys def get_exe_path(): if getattr(sys, 'frozen', False): # 已打包环境,返回exe文件的完整路径 return sys.executable else: # 未打包环境,返回脚本文件路径 return os.path.abspath(__file__) # 测试输出 print(get_exe_path())
方法二:结合sys._MEIPASS获取exe所在目录
sys._MEIPASS是PyInstaller打包后生成的临时目录路径,通过它可以判断是否处于打包环境,进而获取exe所在的目录:
import os import sys def get_exe_dir(): if hasattr(sys, '_MEIPASS'): # 已打包环境,返回exe所在的文件夹路径 return os.path.dirname(sys.executable) else: # 未打包环境,返回脚本所在的文件夹路径 return os.path.dirname(os.path.abspath(__file__)) # 测试输出 print(get_exe_dir())
如果只需要exe所在的文件夹路径,直接使用os.path.dirname(sys.executable)即可(打包环境下)。
内容的提问来源于stack exchange,提问作者appelmoesDEV
相关产品推荐
相关产品推荐

