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

Python调用gcsfs将Linux文件复制至GCS存储桶报错求助

解决方案:本地Linux文件上传至GCS(Python实现,无需gsutil)

你遇到的FileNotFound错误,主要有两个原因:一是本地路径存在拼写错误(代码中/venv/lib/python3.9./多了个冗余的点,应为/venv/lib/python3.9/);二是gcsfs.cp_file仅支持GCS存储桶内部的文件复制,不支持本地文件系统到GCS的跨系统复制。以下是两种可行的解决方法:

方法1:使用gcsfs的文件流读写

通过本地文件流读取+GCS文件流写入的方式完成上传,适配gcsfs的跨文件系统操作逻辑:

import gcsfs
import os

# 修正本地路径的拼写错误
os_path = os.path.join('/venv/lib/python3.9/site-packages/MY_PACKAGE/', 'a_model.py')
gcs_bucket_path = os.path.join('gs://MY_BUCKET/work_folder/', 'model.py')

# 先校验本地文件是否存在,提前排查路径问题
if not os.path.exists(os_path):
    raise FileNotFoundError(f"本地文件不存在:{os_path}")

fs = gcsfs.GCSFileSystem()
# 以二进制流的方式读取本地文件并写入GCS
with open(os_path, 'rb') as local_file:
    with fs.open(gcs_bucket_path, 'wb') as gcs_file:
        gcs_file.write(local_file.read())

方法2:使用官方google-cloud-storage库(推荐)

GCP官方提供的客户端库,功能更全面稳定,是本地文件上传GCS的标准方案:

  1. 先安装依赖:
pip install google-cloud-storage
  1. 编写上传代码:
from google.cloud import storage
import os

# 修正本地路径
os_path = os.path.join('/venv/lib/python3.9/site-packages/MY_PACKAGE/', 'a_model.py')
bucket_name = "MY_BUCKET"
gcs_blob_path = "work_folder/model.py"

# 校验本地文件存在性
if not os.path.exists(os_path):
    raise FileNotFoundError(f"本地文件不存在:{os_path}")

# 初始化GCS客户端
client = storage.Client()
bucket = client.get_bucket(bucket_name)
blob = bucket.blob(gcs_blob_path)

# 直接上传本地文件到指定GCS路径
blob.upload_from_filename(os_path)

注意:使用官方库时,需确保环境已配置GCP认证。可通过设置环境变量GOOGLE_APPLICATION_CREDENTIALS指定服务账号密钥文件路径,或在GCP托管服务(如GCE、GKE)中使用默认服务账号权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:52:44