You need to enable JavaScript to run this app. Cartopy加载Stamen底图触发PIL告警致Anaconda Spyder内核卡死求助
优惠活动
大模型
产品
解决方案
定价
更多

Cartopy加载Stamen底图触发PIL告警致Anaconda Spyder内核卡死求助

根因说明

该告警是Pillow库处理带透明属性的调色板模式(P模式)PNG图片时的已知提示,触发程序卡死的原因有两个:

  1. 当前使用的Python3.8配套的Pillow、Cartopy版本较低,对这类特殊格式图片的处理存在缺陷,极端情况下会出现内存泄漏或逻辑死锁
  2. 代码设置的画布尺寸过大(90*50英寸),会大幅提升瓦片加载的内存占用,放大了格式处理的异常问题
解决方案

1. 依赖升级(最有效方案)

打开Anaconda Prompt,执行以下命令升级对应包,修复底层缺陷:

  • 升级Pillow到9.0及以上版本,修复调色板透明图片处理bug:
    conda install pillow>=9.0.0
  • 升级Cartopy到0.20及以上版本,优化瓦片图加载逻辑:
    conda install cartopy>=0.20.0

2. 代码层面优化

2.1 调整画布参数

不要用超大画布尺寸,改用dpi控制输出清晰度,避免内存占用过高:

# 原代码 fig = plt.figure(figsize=(90, 50)) 替换为以下内容
fig = plt.figure(figsize=(18, 10), dpi=300)

2.2 强制图片格式转换

在代码导入模块部分添加逻辑,自动将所有P模式带透明的图片转为RGBA格式,直接消除告警触发条件:

from PIL import Image
# 覆盖默认图片打开方法,自动转换异常格式
original_img_open = Image.open
def safe_img_open(*args, **kwargs):
    img = original_img_open(*args, **kwargs)
    if img.mode == 'P' and 'transparency' in img.info:
        img = img.convert('RGBA')
    return img
Image.open = safe_img_open

2.3 应急屏蔽告警

如果暂时无法升级依赖,可以临时屏蔽该类告警(仅做应急,无法解决卡死问题):

import warnings
warnings.filterwarnings("ignore", category=UserWarning, module="PIL.Image")

3. 运行环境优化

  • 提前缓存瓦片资源:首次运行成功加载对应区域的瓦片后,Cartopy会自动将资源缓存到你配置的pre_existing_data_dir路径,后续运行无需重复拉取在线资源,减少异常概率
  • 关闭Spyder交互式渲染:在代码开头添加plt.ioff(),绘图完成后调用plt.show()显式渲染,避免IPython内核后台渲染冲突导致卡死

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 06:21:03