Google Cloud Function无法读取指定路径下的Pandas DataFrame问题
问题分析与解决方案
问题根源
Cloud Shell的/tmp是当前会话的专属临时目录,里面的文件是你手动上传或生成的;但Google Cloud Function的/tmp是每个函数实例独立的临时存储空间,每次触发函数(或新实例启动)时这个目录都是空的,和Cloud Shell的/tmp完全不共享,所以直接访问肯定会报找不到文件的错误。
解决方案
要在Cloud Function中读取GCS上的文件,必须先把文件从GCS下载到函数的/tmp目录,再进行读取。具体步骤如下:
1. 配置依赖
创建requirements.txt文件,添加所需依赖:
pandas==2.1.4 google-cloud-storage==2.15.0
2. 修改函数代码
更新后的代码会先从GCS下载文件到/tmp,再读取DataFrame:
import pandas as pd import os from google.cloud import storage def read_dataframe_from_gcs(request): # 替换为你的GCS存储桶名称和文件路径 bucket_name = "你的GCS存储桶名称" gcs_file_path = "excel_files" # 存储桶内的文件路径 local_file_path = "/tmp/excel_files" # 初始化GCS客户端并下载文件 storage_client = storage.Client() bucket = storage_client.bucket(bucket_name) blob = bucket.blob(gcs_file_path) try: blob.download_to_filename(local_file_path) except Exception as e: return f"从GCS下载文件失败: {str(e)}" # 检查文件是否下载成功 if not os.path.exists(local_file_path): return "文件未成功下载到/tmp目录" # 读取并处理DataFrame try: df = pd.read_csv(local_file_path) print(df) return "成功从/tmp读取DataFrame" except Exception as e: return f"读取DataFrame出错: {str(e)}"
3. 权限配置
确保Cloud Function使用的服务账号拥有GCS存储桶的读取权限(至少包含storage.objects.get权限),否则会出现下载失败的权限错误。
注意事项
- 函数实例销毁后,
/tmp目录里的文件会被清除,所以每次触发函数都需要重新下载文件 - 如果文件体积较大,要调整Cloud Function的内存配额和超时时间,避免下载或读取过程超时
内容的提问来源于stack exchange,提问作者s nandan
相关产品推荐
相关产品推荐

