Python 3.7.9导入matplotlib时出现Pillow版本冲突报错问题
问题根因
这个报错属于版本校验逻辑触发的误报,并非真的存在Pillow版本不匹配。
Pillow的_imaging扩展加载时会做严格的字符串全等校验:比对C扩展内置的核心版本字符串、Python层PIL包的版本字符串,二者完全一致才会正常加载。你看到的Core version值两侧带双引号就是问题核心——校验时实际比对的是"9.2.0"(带引号)和9.2.0(不带引号),字符串不相等才抛出了版本不匹配的错误。
这个异常基本都出在Conda虚拟环境中,触发原因是环境内存在Pillow安装残留:通常是之前混装过pip源、conda源不同构建版本的Pillow,或者conda缓存的旧构建文件未清理,导致C扩展读取到的版本字符串被额外包裹了引号。
验证步骤
先执行以下命令确认问题,注意命令要运行在Jupyter Notebook实际调用的Python环境中:
- 查看当前环境Pillow的安装路径与版本:
from PIL import Image print(Image.__version__) print(Image.__file__)
- 查看C扩展层读取到的原始版本值,确认引号问题:
from PIL import _imaging print(repr(_imaging.__version__))
如果第二条命令输出为'"9.2.0"'(外层为repr输出的单引号,内部版本号自带双引号),即可确认是多余引号导致的校验失败。
解决方案
按优先级从高到低尝试:
- 彻底清理残留后重装Pillow(最稳定的方案,Conda环境优先选这个)
先反复执行卸载命令,直到提示环境中无Pillow相关包,彻底清除残留:
清理conda缓存后,从conda-forge源重新安装匹配版本的Pillow和Matplotlib:conda remove pillow --force -y pip uninstall pillow -yconda clean -a -y conda install -c conda-forge pillow=9.2.0 matplotlib -y - 修复Jupyter内核绑定问题
部分场景下报错是因为Notebook调用的内核并非你安装依赖的Conda虚拟环境,执行以下命令重新注册内核:
重启Jupyter后,在内核列表中选择刚注册的对应虚拟环境内核再运行代码。conda install ipykernel -y python -m ipykernel install --user --name=你的虚拟环境名称 - 临时救急修复
如果暂时不方便重装包,可以找到第一步输出的PIL路径下的Image.py文件,定位到版本校验的代码段,在比对前给核心版本字符串增加strip('"')处理,去掉多余的双引号再做比对即可。
内容的提问来源于stack exchange,提问作者Lucas MiraB
相关产品推荐
相关产品推荐

