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

PyInstaller打包exe存文件遇PermissionError,VS Code运行正常求助

解决PyInstaller打包截图脚本后的权限错误

先看问题中的代码:

import os
import time
from PIL import ImageGrab

IMAGES_DIR = 'Estudos3\images'

FILENAME_FORMAT = 'screenshot_{}.png'

def take_screenshot():
    filename = FILENAME_FORMAT.format(int(time.time()))

    filepath = os.path.join(IMAGES_DIR, filename)

    ImageGrab.grab().save(filepath)

take_screenshot()

问题描述

上述代码在VS Code中运行正常,能完成截图并保存到指定目录,但用PyInstaller打包成.exe后运行,出现权限错误:

PermissionError: [Errno 13] Permission denied: 'Estudos3\images\screenshot_1683919164.png'

解决办法

  • 检查运行权限:右键exe文件,选择「以管理员身份运行」测试。如果能正常保存,说明是权限不足。可以设置exe永久以管理员身份运行:右键exe→属性→兼容性→勾选「以管理员身份运行此程序」。
  • 改用绝对路径:相对路径Estudos3\images的工作目录在打包后可能和预期不符,导致权限问题或找不到目录。修改代码使用绝对路径:
    BASE_DIR = os.path.dirname(os.path.abspath(__file__))
    IMAGES_DIR = os.path.join(BASE_DIR, 'Estudos3', 'images')
    
    这样截图会保存在exe所在目录的Estudos3\images下,避免工作目录不一致的问题。
  • 确保目录存在:如果目标目录不存在,保存时也可能触发权限类错误。在截图函数里添加目录创建逻辑:
    def take_screenshot():
        os.makedirs(IMAGES_DIR, exist_ok=True)
        filename = FILENAME_FORMAT.format(int(time.time()))
        filepath = os.path.join(IMAGES_DIR, filename)
        ImageGrab.grab().save(filepath)
    
    exist_ok=True保证目录已存在时不会报错。
  • 避开系统保护目录:不要把exe放在C盘的Program Files、Windows等系统目录下,这些目录默认有严格的写入权限限制。将exe放在桌面、个人文档等用户有权限的目录运行。

内容的提问来源于stack exchange,提问作者Rodrigo Carvalho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:35:07