share.streamlit部署Streamlit应用找不到pkl文件如何解决?
Streamlit Cloud部署pkl文件FileNotFoundError解决方案
核心原因是本地运行的工作目录和Streamlit Cloud平台的默认工作目录存在差异,硬编码的相对路径无法适配部署环境,按以下步骤修改即可:
- 优先使用绝对路径拼接的方式定位文件,避免直接写层级相对路径,推荐用Python标准库
pathlib处理路径,适配不同系统的路径规则。 - 在
app/app.py文件头部添加路径定义代码:
from pathlib import Path # 定位当前脚本所在的app文件夹绝对路径 APP_ROOT = Path(__file__).resolve().parent # 定位仓库根目录(app文件夹的上级目录) REPO_ROOT = APP_ROOT.parent # 拼接得到models文件夹的绝对路径 MODELS_PATH = REPO_ROOT / "models"
- 加载pkl模型时使用拼接后的路径,示例代码如下:
import pickle # 加载乳腺癌预测模型 with open(MODELS_PATH / "breast_cancer_model.pkl", "rb") as f: breast_cancer_model = pickle.load(f) # 其余pkl文件加载逻辑按相同规则修改即可
- 检查仓库根目录下的
.gitignore配置,确认所有pkl后缀的文件没有被纳入忽略规则,保证pkl文件已正常提交到GitHub仓库。 - 若修改后仍报错,可添加调试代码在部署日志中确认路径是否正确:
# 打印models目录下的所有文件,确认pkl文件存在 print("Models目录下文件列表:", [f.name for f in MODELS_PATH.iterdir() if f.is_file()])
内容的提问来源于stack exchange,提问作者le Minh Nguyen
相关产品推荐
相关产品推荐

