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

Python3使用PIL显示图片时提示文件被移动或删除如何解决

Python3下Pillow调用show()提示文件被移动的解决方法

问题复现

实现图片打开展示的原有代码如下:

from PIL import Image

r = Image.open('C:/Users/sudam/OneDrive/Desktop/programming/python/projects/good night app/morning.png' )
r.show()

运行代码后Windows照片查看器启动即报错,提示指定文件已被移动,检索到的现有解决方案均仅适配Python2环境,在Python3下无法生效。

故障原因

  • Pillow库Image.show()方法在Windows平台的默认实现存在时序缺陷:方法执行时会先将目标图片转存到系统临时目录,再唤起系统默认看图程序打开该临时文件,子进程启动后会立刻释放临时文件句柄触发自动回收,Windows照片查看器加载速度较慢,等它实际读取文件时,临时文件已经被删除,因此抛出文件已移动/不存在的错误。
  • 代码里的图片路径包含空格(good night app目录名),旧版本Pillow在Python3环境下对带空格路径的参数转义存在bug,会进一步提升该故障的触发概率。

解决方法

按操作成本从低到高排序:

  • 升级Pillow到最新稳定版本,新版Pillow已经修复了Windows平台临时文件过早回收、带空格路径转义的问题,直接执行以下升级命令即可,原有代码不需要做任何修改:
    pip install --upgrade pillow
    
  • 暂时不想升级Pillow的话,可以手动覆写图片打开逻辑,绕开默认的临时文件回收机制,参考代码如下:
    from PIL import Image
    import os
    import tempfile
    
    img = Image.open('C:/Users/sudam/OneDrive/Desktop/programming/python/projects/good night app/morning.png')
    # 生成固定路径的临时文件,不会被自动回收
    temp_img_path = os.path.join(tempfile.gettempdir(), "pillow_temp_show.png")
    img.save(temp_img_path)
    # 调用系统默认程序打开图片
    os.startfile(temp_img_path)
    
  • 将系统默认图片查看器从旧版Windows照片查看器更换为系统自带的新版「照片」应用,新版应用加载速度更快,不存在读取文件的时序差问题,不需要修改代码即可正常运行。

注意:Python2环境下流传的修改PIL源码、调整注册表类的方案不要直接套用,Python3对应的Pillow分支已经重构了Windows端的调用逻辑,硬套老方案会触发字符串编码、路径转义类的兼容问题,无法解决问题。

内容的提问来源于stack exchange,提问作者sudam edirisinghe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:34:46