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

升级Pillow至9.3/9.4后程序崩溃,Matplotlib报错如何解决?

问题详情

将Python虚拟环境中的Pillow从9.2.0升级至9.3或9.4版本后,程序崩溃,导入Matplotlib时触发以下报错:

Traceback (most recent call last):
  File "C:\Users\_", line 11, in <module>
    import matplotlib.pyplot as plt
  File "C:\Users\_", line 113, in <module>
    from . import _api, _version, cbook, _docstring, rcsetup
  File  "C:\Users\_", line 27, in <module>
    from matplotlib.colors import Colormap, is_color_like
  File "C:\Users\_", line 56, in <module>
    from matplotlib import _api, _cm, cbook, scale
  File "C:\Users\_", line 22, in <module>
    from matplotlib.ticker import (
  File "C:\Users\_", line 138, in <module>
    from matplotlib import transforms as mtransforms
  File "C:\Users\_", line 49, in <module>
    from matplotlib._path import (
ImportError: DLL load failed while importing _path: The specified module could not be found

当前使用Python 3.10.9,可正常运行的虚拟环境依赖包列表:

1. altgraph                  0.17.2
1. contourpy                 1.0.7
1. cycler                    0.11.0
1. dicom-numpy               0.6.3
1. fonttools                 4.33.3
1. future                    0.18.2
1. kiwisolver                1.4.2
1. matplotlib                3.6.3
1. numpy                     1.24.2
1. packaging                 21.3
1. pefile                    2021.9.3
1. Pillow                    9.2.0
1. pip                       23.0
1. pydicom                   2.3.1
1. pyinstaller               5.0.1
1. pyinstaller-hooks-contrib 2022.4
1. pyparsing                 3.0.8
1. python-dateutil           2.8.2
1. pywin32-ctypes            0.2.0
1. scipy                     1.10.0
1. setuptools                65.5.0
1. six                       1.16.0

已尝试卸载Pillow 9.2和Matplotlib,单独安装最新版Matplotlib,但Matplotlib会自动安装Pillow 9.4,问题依旧;仅能通过卸载Pillow 9.4并重新安装9.2.0恢复程序。

目前仅用PIL实现以下功能:将数组转为图像后写入Dataset对象的PixelData标签,代码如下:

from PIL import Image
ds.PixelData = Image.fromarray(ct_slice).tobytes() #write slice to file

咨询两个问题:

  1. 是否有无需使用Pillow的替代实现方式?
  2. 如何解决Pillow升级导致Matplotlib报错的问题?

解决方案

一、无需Pillow的替代实现

你的需求是将numpy数组ct_slice转换为字节流写入Dicom的PixelData,完全可以直接使用numpy内置的tobytes()方法实现,无需经过Pillow:

# 直接用numpy数组的tobytes方法
ds.PixelData = ct_slice.tobytes()

注意事项:

  • 确保ct_slice的数据类型(dtype)符合Dicom规范要求(比如CT图像通常为uint16),如果数组类型不符,可先做转换:ct_slice.astype(np.uint16).tobytes()
  • 若需要考虑字节序(大小端),可使用ct_slice.tobytes('C')(C顺序,默认)或ct_slice.tobytes('F')(Fortran顺序),根据Dicom文件的要求选择。

二、解决Pillow升级导致Matplotlib报错的方案

1. 匹配Matplotlib与Pillow的兼容版本

Matplotlib 3.6.3对Pillow的依赖要求是>=6.2.0,但部分高版本Pillow(9.3/9.4)在Windows环境下可能存在DLL打包问题。可以尝试:

  • 安装Matplotlib 3.7.x及以上版本,这些版本通常修复了与新版Pillow的兼容问题:
    pip install --upgrade matplotlib>=3.7.0
    
  • 若需保留Matplotlib 3.6.3,可尝试安装Pillow 9.2.1(介于9.2.0和9.3之间),查看是否能解决DLL问题:
    pip install pillow==9.2.1
    

2. 清理缓存并重新安装依赖

虚拟环境中缓存的损坏安装包可能导致DLL冲突,执行以下步骤彻底重装:

  1. 卸载相关包:
    pip uninstall -y pillow matplotlib
    
  2. 清理pip缓存:
    pip cache purge
    
  3. 重新安装指定版本的依赖:
    pip install matplotlib==3.6.3 pillow==9.3.0
    

3. 检查并更新系统依赖

Windows下的Python扩展包依赖VC++运行库,若版本缺失或老旧可能导致DLL加载失败:

  • 下载并安装最新版的Microsoft Visual C++ Redistributable for Visual Studio 2015-2022
  • 安装完成后重启虚拟环境或电脑,再尝试导入Matplotlib。

4. 重建虚拟环境

若上述方法无效,可能是虚拟环境本身文件损坏,可重新创建虚拟环境并逐步安装依赖:

  1. 创建新虚拟环境:
    python -m venv new_env
    # 激活环境(Windows cmd)
    new_env\Scripts\activate.bat
    
  2. 按顺序安装依赖:
    pip install numpy==1.24.2
    pip install matplotlib==3.6.3
    pip install pillow==9.4.0
    # 再安装其他所需包
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 09:55:31