Deleting a bucket in Google Cloud Storage using Python
Start your free 7-days trial now!
Prerequisites
To follow along with this guide, please make sure to have:
created a service account and downloaded the private key (JSON file) for authentication (please check out my detailed guide)
installed the Python client library for Google Cloud Storage:
pip install --upgrade google-cloud-storage
Deleting bucket in Google Cloud Storage
To delete a bucket that contains some files in Google Cloud Storage using Python, use the bucket's delete(~)
method:
from google.cloud import storage
# Authenticate ourselves using the private key of our service accountpath_to_private_key = './gcs-project-354207-099ef6796af6.json'client = storage.Client.from_service_account_json(json_credentials_path=path_to_private_key)# The bucket to deletebucket = client.get_bucket('test-bucket-skytowner')bucket.delete(force=True)
Note that by default force=False
, which means that the bucket will be deleted only if it is empty. If the bucket contains some files, then an error will be thrown:
from google.cloud import storage
path_to_private_key = './gcs-project-354207-099ef6796af6.json'client = storage.Client.from_service_account_json(json_credentials_path=path_to_private_key)bucket = client.get_bucket('test-bucket-skytowner')bucket.delete()
Conflict: 409 DELETE https://storage.googleapis.com/storage/v1/b/test-bucket-skytowner?prettyPrint=false:The bucket you tried to delete is not empty.
By setting force=True
, all the files in the bucket will be deleted first, and then the bucket will be deleted.
Even with the argument force=True
, if the bucket contains more than 256 files, then GCS will not delete any files, let alone the bucket. This is because GCS cannot perform long-running operations. The way to delete buckets with more than 256 files is to iterate over all the files in the bucket and delete each file one by one:
blobs = client.list_blobs('test-bucket-skytowner')for blob in blobs: print(f'Deleting file {blob.name}') blob.delete()
# Now that all the files have been deleted, we can delete our empty bucketbucket = client.get_bucket('test-bucket-skytowner')bucket.delete()