You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 10:42:51