Google Drive client.
python -m pip install drive
With Poetry:
poetry add drive
You also need to have libmagic installed to get automatic detection of uploaded files’ MIME types. If you don’t have
it, you must provide the original_mime_type keyword argument when you upload a file.
On Linux, if you do have libmagic but Python can’t see it, see this StackOverflow question.
Requirement: Python 3.9 or higher.
The API exposes a client as drive.client.Client that manipulates instances of
drive.files.File. A File represent a Google Drive file. Note that both
regular files and directories are represented as Files, and a file can have
multiple parent directories. You can check if a File is a directory using the
is_directory attribute.
Note: "Folder" is just a synonym for "Directory".
By default, the client reads your service account key JSON file at the location
given by the environment variable GOOGLE_APPLICATION_CREDENTIALS. You can
override this behavior by passing it directly:
client = Client("/path/to/your/service-account-key.json")
See Google’s documentation on how to create a service account key.
High-level Client methods:
get_file(file_id)(File)get_file_by_name(name)(File)files_shared_with_me()(Filelist)get_shared_directory(name)(File)root()(File)upload_file(parent, path[, name]): Upload a fileupload_excel_workbook(parent, name, workbook): Upload anopenpyxlworkbook in a Google spreadsheet underparentwith the namename.
The client also exposes low-level methods that work on file ids.
id(str, attribute)name(str, attribute)is_directory(bool, attribute)human_type(str, attribute): Human-readable file typeexists()(bool)unlink()(bool): Remove the file. If it's a directory, all its children are removed as wellrename(new_name): Rename the filemove_in(new_parent[, new_name]): Move a file under another directory. It can also rename the file at the same time.list(): List a directory’s contentcreate_folder(name): Create a folder under the current oneget_or_create_folder(name): Retrieve a child folder or create it if it doesn’t existget_child(name): Return a file under the current directory.parents(): Return a file's parentsparent(): Return the first parent of a filedownload_file(path[, mime_type]): Download the file at a given locationdownload_workbook(): Download the file as anopenpyxlworkbookjson(): Parse the file as JSONjsons(): Parse the file as JSONS (one JSON per line) and returns a generator
Methods that operate on directories (e.g. list()) generally have no effect if
the File instance is a regular file.
from drive.client import Client
# Uses credentials from the path in the environment variable
# GOOGLE_APPLICATION_CREDENTIALS.
cl = Client()
# Get the root directory
d = cl.root()
print(d.is_directory) # True
print(d.name) # e.g. "My Drive"
# Get a directory's content
for f in d.list():
print(f.name)
# Get a shared directory
d = cl.get_shared_directory("My Shared Dir")from drive.client import Client
from openpyxl import Workbook
cl = Client()
# Download
f = cl.get_file_by_name("my_sheet")
workbook = f.download_workbook() # openpyxl workbook
# save your download:
workbook.save("myfile.xlsx")
# Upload
workbook = Workbook()
d = cl.get_shared_directory("My Shared Directory")
cl.upload_excel_workbook(d, "my_other_sheet", workbook)from drive.client import Client
cl = Client()
# download a Drawing in a png image
cl.download_file("11AASomeFileId", "localfile.png", "image/png")Copyright © 2016-2025 Baptiste Fontaine
Distributed under the MIT License.