在GCP上部署Streamlit应用后图片无法加载问题求助
Streamlit部署到GCP后图片显示为0的解决方案
问题原因
- 语法错误:代码中
st.image(dis, channels="RGB)缺少右双引号,生产环境运行时会触发解析异常 - 函数分支无返回:
load_image仅在入参为yes时返回图片对象,其余情况默认返回None,传入st.image会导致异常渲染 - 依赖导入缺失:代码未导入PIL库,部署环境无缓存的导入上下文会触发运行报错
- 路径不匹配:GCP部署环境的工作目录和本地不一致,相对路径
images/yes.jpg找不到对应文件 - 旧缓存装饰器异常:
@st.cache是Streamlit旧版缓存API,对PIL对象的序列化存在兼容问题,容易出现渲染异常
部署后异常效果如下图:
修复方案
步骤1:修改代码逻辑
import streamlit as st from PIL import Image import os # 替换旧缓存API为资源专用的cache_resource @st.cache_resource def load_image(out): if out=='yes': # 用绝对路径定位图片,避免相对路径在部署环境失效 img_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "images/yes.jpg") # 加路径存在校验 if os.path.exists(img_path): return Image.open(img_path) # 异常分支明确返回值,避免无返回情况 return None output = "yes" # 此处替换为你自己的业务逻辑赋值 dis = load_image(output) if dis: # 补全语法引号 st.image(dis, channels="RGB") else: st.warning("图片加载失败")
步骤2:校验部署配置
- 确认GCP部署包中包含
images目录及目录下的yes.jpg文件,不要在.gcloudignore里排除静态资源目录 - 确认
requirements.txt中添加了Pillow>=9.0.0依赖声明,保证部署环境安装了图片处理库
内容的提问来源于stack exchange,提问作者mech iyad
相关产品推荐
相关产品推荐

