【问题标题】:Subprocess CALL or python library for uploading to Google Cloud Storage?用于上传到 Google Cloud Storage 的子进程 CALL 或 python 库?
【发布时间】:2020-12-23 01:57:57
【问题描述】:

我正在尝试编写一个脚本来将文件上传到 Google Cloud Storage。我注意到有两种方法可以做到这一点:

a) 使用 gsutil 并通过子进程从 python 调用它 b) 将 from google.cloud 导入存储与“本机”方法一起使用。

每种方法的优点/缺点是什么? (a) 方法似乎更容易,但我不知道与 b) 方法相比是否有任何缺点。

谢谢!

(a)的例子

filename='myfile.csv'
gs_bucket='my/bucket'
parallel_threshold='150M' # minimum size for parallel upload; 0 to disable

subprocess.check_call([
  'gsutil',
  '-o', 'GSUtil:parallel_composite_upload_threshold=%s' % (parallel_threshold,),
  'cp', filename, 'gs://%s/%s' % (gs_bucket, filename)
])

(b)的例子

from google.cloud import storage
def upload_blob(bucket_name, source_file_name, destination_blob_name):
    """Uploads a file to the bucket."""
    # bucket_name = "your-bucket-name"
    # source_file_name = "local/path/to/file"
    # destination_blob_name = "storage-object-name"

    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)
    blob = bucket.blob(destination_blob_name)

    blob.upload_from_filename(source_file_name)

    print(
        "File {} uploaded to {}.".format(
            source_file_name, destination_blob_name
        )
    )

【问题讨论】:

    标签: python google-cloud-platform google-cloud-storage


    【解决方案1】:

    最重要的是,您应该选择最适合您偏好的方法。如果无论哪种方式都适合您,那么这是一个偏好问题。

    但是,如果您打算在除已正确安装和配置 gsutil 的机器之外的任何地方运行此代码,则会遇到问题。它变成了一个外部依赖,你可能不喜欢尝试在它已经工作的地方以外的任何地方进行设置。

    如果您希望更轻松地移动此代码,则客户端库的可预测性更高,并且应该在任何有 Internet 连接的地方运行,前提是您的代码具有可用于初始化 SDK 的服务帐户凭据。

    【讨论】:

      猜你喜欢
      • 2017-09-16
      • 2017-04-02
      • 2019-11-07
      • 1970-01-01
      • 2014-11-22
      • 2020-06-13
      • 2014-01-05
      • 2014-04-16
      • 1970-01-01
      相关资源
      最近更新 更多