os.path.realpath路径异常:Access宏运行PyInstaller打包exe路径错误
问题原因与解决方法
为什么会出现这个问题?
这其实是两个因素共同导致的:
- Access宏的工作目录设置:当你通过Access宏运行外部exe时,Access会默认把该exe的**当前工作目录(CWD)**设置为你的用户文档文件夹(也就是
C:\Users\USERNAME\Documents),而不是exe所在的文件夹。 - PyInstaller打包后
__file__的特殊性:你用os.path.realpath(__file__)来获取路径,但在PyInstaller打包后的程序里,__file__指向的是程序运行时临时解压到系统临时目录的脚本文件路径,而不是你生成的exe文件本身的路径。直接双击exe时,临时目录的路径刚好和exe所在目录有关联,所以你误以为拿到了正确的exe路径,但通过Access启动时,工作目录的变化打破了这个关联,最终返回了Access设置的默认工作目录。
怎么解决?
要准确获取exe所在的文件夹,你应该用sys.executable来定位exe的实际路径,再推导其所在目录。同时,为了兼容开发环境(未打包时),可以加个判断区分两种场景:
import os import sys def get_app_directory(): # 检查是否是PyInstaller打包后的运行环境 if hasattr(sys, '_MEIPASS'): # 打包后,sys.executable指向生成的exe文件 return os.path.dirname(os.path.abspath(sys.executable)) else: # 开发环境,返回当前脚本所在目录 return os.path.dirname(os.path.abspath(__file__)) # 获取正确的目录 dir_path = get_app_directory() print(dir_path)
额外说明
这样修改后,不管你是直接双击exe,还是通过Access宏启动,脚本都能准确找到exe所在的文件夹,完全不受当前工作目录的影响。
内容的提问来源于stack exchange,提问作者Vincent
相关产品推荐
相关产品推荐

