Jupyter导入fastai.vision.all报PIL.Image无Resampling属性错误
AttributeError: module 'PIL.Image' has no attribute 'Resampling' 是Pillow(PIL)与fastai版本不兼容导致的。
Pillow 9.1.0版本才正式将图像重采样相关枚举(如LANCZOS、BILINEAR)迁移到PIL.Image.Resampling路径下,新版本fastai调用了该新API;如果本地环境Pillow版本低于9.1.0,导入fastai.vision.all时就会触发该属性不存在的错误。
之前代码可正常运行,一般是环境依赖被意外改动:要么更新fastai时未同步升级Pillow,要么其他依赖安装过程中把Pillow降级到了兼容阈值以下。

按优先级从高到低排列:
升级Pillow到兼容版本(推荐)
直接在Jupyter单元格执行对应包管理命令升级Pillow,完成后重启内核再重新导入模块即可:# pip环境用这个 pip install --upgrade Pillow# conda环境用这个 conda install "pillow>=9.1.0"升级完成后可执行以下代码验证版本,输出版本号≥9.1.0即符合要求:
import PIL print(PIL.__version__)临时兼容补丁(无法升级Pillow时用)
如果项目有其他依赖强制要求使用9.1.0以下版本的Pillow,可以在导入fastai.vision.all之前先运行以下代码,手动给老版本Pillow补全Resampling属性映射:import PIL.Image if not hasattr(PIL.Image, 'Resampling'): PIL.Image.Resampling = PIL.Image该补丁会把老版本直接挂载在
PIL.Image下的重采样常量映射到Resampling属性下,和新版本API结构对齐,不会影响后续代码运行。降级fastai匹配老版本Pillow(不推荐)
若既不能升级Pillow也不想加补丁,可以把fastai降级到未适配新Pillow API的版本(2.7.0之前的版本),执行命令:pip install fastai==2.6.3该方案会错过fastai后续的功能更新和bug修复,非必要不选择。
内容的提问来源于stack exchange,提问作者BenZenoVKa

