如何用Python读取同一GitHub仓库文件?解决FileNotFoundError问题
解决Streamlit应用加载GitHub仓库内.pkl文件的FileNotFoundError问题
问题描述
在'SpecLines_App'中尝试加载同一GitHub仓库中的'classifier_model.pkl'文件时,持续出现FileNotFoundError。尝试过的代码如下:
import streamlit as st import numpy as np import pickle import pandas as pd #https://github.com/mblk3/MLM_Atomic_Spec_Lines/blob/02f6a04db06b459169ea0d19c347146ea1ad17d8/classifier_model.pkl #joblibFile = open('code_/classifier_model.pkl', 'rb') #joblibFile = open(url, 'rb') #model = pickle.load(joblibFile) model = pd.read_pickle(r'classifier_model.pkl')
原因分析
- 路径错误:本地开发环境和Streamlit部署环境的工作目录可能不一致,直接使用文件名或错误的相对路径会导致文件查找失败。
- 链接类型错误:GitHub网页链接仅用于展示文件内容,无法直接通过
open()或pd.read_pickle()读取,需要使用文件的原始下载链接。
解决方案
方案1:修正文件相对路径
- 先排查当前工作目录,添加代码确认:
import os st.write("当前工作目录:", os.getcwd()) - 根据输出的工作目录调整路径:
- 若Streamlit应用文件在
SpecLines_App文件夹,模型文件在仓库根目录,路径应为../classifier_model.pkl - 若两者在同一目录,直接使用
classifier_model.pkl即可
- 若Streamlit应用文件在
方案2:使用GitHub原始链接加载文件
打开GitHub上的模型文件页面,点击右上角的「Raw」按钮获取原始链接,然后通过网络加载:
import pandas as pd # 替换为文件的原始链接 model_url = "https://raw.githubusercontent.com/mblk3/MLM_Atomic_Spec_Lines/02f6a04db06b459169ea0d19c347146ea1ad17d8/classifier_model.pkl" model = pd.read_pickle(model_url)
也可使用pickle配合requests加载:
import requests from io import BytesIO import pickle model_url = "https://raw.githubusercontent.com/mblk3/MLM_Atomic_Spec_Lines/02f6a04db06b459169ea0d19c347146ea1ad17d8/classifier_model.pkl" response = requests.get(model_url) model = pickle.load(BytesIO(response.content))
方案3:确保文件被正确部署
- 检查仓库的
.gitignore文件,确认classifier_model.pkl未被排除 - 确认文件存在于GitHub仓库的目标分支下
内容的提问来源于stack exchange,提问作者Mia Blake
相关产品推荐
相关产品推荐

