You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何在VM实例的Jupyter Notebook加载GCS上的pickle文件

解决Google Cloud Storage中Pickle文件在Jupyter Notebook的加载问题

首先,你之前的方法行不通的核心原因是:pickle.load() 配合 open() 只能读取本地文件系统的文件,或者实现了文件协议的路径,而HTTP/HTTPS URL并不被open()支持——虽然有些库(比如加载.mat文件的库)内部封装了HTTP请求逻辑,但pickle模块没有这个能力。

下面是正确的实现步骤,基于官方的google-cloud-storage库:

1. 安装依赖库

在Jupyter Notebook中先执行安装命令:

!pip install google-cloud-storage

2. 编写加载代码

你可以直接从GCS读取文件内容到内存,再用pickle加载,不需要下载到本地:

import pickle
from google.cloud import storage
from io import BytesIO

# 初始化GCS客户端(GCP VM实例默认会自动使用关联的服务账号权限,无需额外认证)
client = storage.Client()

# 指定你的存储桶名称和pickle文件路径
bucket_name = "<你的存储桶名称>"
file_name = "<你的pickle文件名>.p"

# 获取存储桶和文件对象
bucket = client.get_bucket(bucket_name)
blob = bucket.blob(file_name)

# 将文件内容读取到BytesIO对象(模拟文件流)
with BytesIO() as byte_stream:
    blob.download_to_file(byte_stream)
    byte_stream.seek(0)  # 重置流指针到开头
    data_x = pickle.load(byte_stream)

3. 权限验证

如果运行时提示权限错误,需要确认你的VM实例关联的服务账号拥有存储对象查看者(roles/storage.objectViewer)权限,或者针对该存储桶的读取权限:

  • 进入GCP控制台的存储桶页面
  • 点击“权限”标签
  • 添加你的VM服务账号(格式一般是[服务账号名]@[项目ID].iam.gserviceaccount.com),并赋予对应的读取权限

为什么之前的方法对.mat/.pts有效?

那些格式的加载库(比如scipy.io.loadmat)内部实现了HTTP请求逻辑,会先把远程文件下载到内存再解析,但pickle模块本身没有这个封装,所以必须手动处理远程文件的读取。

另外,不建议使用公开链接的方式加载文件,这会带来安全风险,而且官方库的方式更稳定、可维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:26:19