使用auto-py-to-exe打包后程序无法将文件保存至正确路径
问题解决:打包exe后WiFi配置保存路径异常
核心原因
auto-py-to-exe基于PyInstaller,单文件打包时会将程序临时解压到C:\Users\User\AppData\Local\Temp\_MEIxxxx目录再运行,此时程序默认的工作目录是这个临时目录,而非exe文件所在的位置,导致保存路径偏离预期。
解决方案
修改代码,获取exe/脚本实际所在的目录,基于该目录创建时间命名的子文件夹,而非依赖默认工作目录。
代码修改示例
替换原代码中获取保存目录的逻辑,改用以下方式:
import os import sys import datetime import subprocess def get_base_directory(): # 判断是否为打包后的exe运行 if hasattr(sys, '_MEIPASS'): # 打包后,sys.argv[0]是exe的绝对路径 return os.path.dirname(os.path.abspath(sys.argv[0])) else: # 脚本运行时,__file__是脚本的绝对路径 return os.path.dirname(os.path.abspath(__file__)) # 获取基础目录(exe/脚本所在位置) base_dir = get_base_directory() # 创建以当前时间命名的子目录 current_time = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") save_dir = os.path.join(base_dir, current_time) os.makedirs(save_dir, exist_ok=True) # 执行netsh命令导出WiFi配置 netsh_command = f'netsh wlan export profile folder="{save_dir}" key=clear' try: subprocess.run(netsh_command, shell=True, check=True) print(f"WiFi配置已成功保存到:{save_dir}") except subprocess.CalledProcessError as e: print(f"导出失败:{e}")
验证步骤
- 用VSCode运行修改后的脚本,确认配置文件仍保存到脚本所在目录的时间子文件夹。
- 重新用auto-py-to-exe打包成exe,运行exe后检查exe所在目录是否生成了预期的时间子文件夹及WiFi配置文件。
额外说明
- 若使用多文件打包模式(auto-py-to-exe中选择"One Directory"),默认工作目录就是exe所在目录,也能解决问题,但单文件模式更便于分发,推荐上述代码修改方案。
- 无需重装软件或关闭杀毒软件,问题根源是路径获取逻辑的问题,而非环境或软件冲突。
内容的提问来源于stack exchange,提问作者Roee Zamir
相关产品推荐
相关产品推荐

