NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1458 most downloaded on PyPI
Read GCS, ABS and local paths with the same interface, clone of tensorflow.io.gfile
Last release 1 months ago
20 Aug 2026
Release timing varies
gaps range from 3 weeks to 12 months
Most releases are documented
notes for 48 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
7 years old
80 releases · first in 2019
Use streaming writes in higher level APIs
partial_writes_on_exc=False did not take effect when a failure occurred while
preparing a write to an Azure fileBlobFile now takes a partial_writes_on_exc argument, allowing you to ignore partial writes to remote files when exceptions are thrown
BlobFile now takes a partial_writes_on_exc argument, allowing you to ignore partial writes to remote files when exceptions are thrownwrite_text, write_bytes and copy will now avoid partial writes to remote files if interruptedBLOBFILE_REDIRECT_RETRY_COUNT environment variable to allow redirectsurllib3>=2One column per quarter.
Add option to support blind writes
bf.joinEAI_NODATA similarly to EAI_NONAME in DNS retry logicRemove use of deprecated utcnow
read_text / read_bytes / write_text / write_bytes functionslast_version_seen
VersionMismatch error if a file is modified between
issuing read API calls to Azure blob storageutcnow* Restore support for Python 3.8
Support resolving objects that define __blobpath__
__blobpath__requests (if you use requests, use 2.26 or newer)Support a version parameter for writing files to Azure, if the version doesn't match the remote version, a VersionMismatch error will be raised from @
version parameter for writing files to Azure, if the version doesn't match the remote version, a VersionMismatch error will be raised from @williamzhukSupport urllib3 2.0 by @hauntsaninja in #201
Full Changelog: v2.0.0...v2.0.1
Change configure defaults to output_az_paths=True and save_access_token_to_disk=True
configure defaults to output_az_paths=True and save_access_token_to_disk=TrueAzure timestamp parsing is now slightly faster
xmltodict with lxml as it is slightly fasterpycryptodome from @hauntsaninjaAdded new configure option, multiprocessing_start_method that defaults to spawn , due to issues with fork . To get the original behavior back, call bf
configure option, multiprocessing_start_method that defaults to spawn, due to issues with fork. To get the original behavior back, call bf.configure(multiprocessing_start_method="fork")Fix to default value for use_azure_storage_account_key_fallback from @hauntsaninja
use_azure_storage_account_key_fallback from @hauntsaninjaAdd support for anonymous auth for GCS
gfileparallel option for bf.copy will now use a faster copy for azure when copying between two different storage accounts
parallel option for bf.copy will now use a faster copy for azure when copying between two different storage accountscache_dirfix trailing semicolon with bf.join
parallel option for rmtreebf.joinsave_access_token_to_disk to save local access tokens locallyAdd shard_prefix_length to scanglob
shard_prefix_length to scanglobSupport using access tokens from new versions of azure-cli, thanks @hauntsaninja for adding this.
Change to use oauth v2 for azure, thanks @cjgibson for adding this.
Fix bug in scanglob that marked files as directories, thanks @jacobhilton for fixing this
scanglob that marked files as directories, thanks @jacobhilton for fixing thisconnection_pool_max_size and max_connection_pool_count are no longer supported due to issues with ProcessPoolExecutor, instead you may specify get_htt
connection_pool_max_size and max_connection_pool_count are no longer supported due to issues with ProcessPoolExecutor, instead you may specify get_http_pool if you need to control these settings.file_size argument to BlobFile to skip reading the size of the file on creation.Change default_buffer_size to 8 * 220
default_buffer_size to 8 * 2**20readall() to 8 * 2**20google_write_chunk_sizeAdded an option to disable streaming reads since azure doesn't handle it well, use_streaming_reads=False
use_streaming_reads=Falsedefault_buffer_size, which is important to set if you disable streaming reads.use_streaming_read=False. These are now disabled by default.default_buffer_size, which is important to set if you disable streaming reads.When uploading to a file with streaming=True (not the default), avoid an extra copy of the data being uploaded. This is mostly an optimization for whe
streaming=True (not the default), avoid an extra copy of the data being uploaded. This is mostly an optimization for when you do a single large f.write().Set use_azure_storage_account_key_fallback to False by default. This is a backwards breaking change if you rely on storage account keys. To go back to…
use_azure_storage_account_key_fallback to False by default. This is a backwards breaking change if you rely on storage account keys. To go back to the previous behavior, call bf.configure(use_azure_storage_account_key_fallback=True).Support pagination of azure management pages.
Don't log connection aborted errors on first try.
tell() for streaming write files, this fixes a bug where zip files would not be written correctly when written to a streaming=True file while using the zipfile library.Add create_context() function to create blobfile instances with different configurations
create_context() function to create blobfile instances with different configurationsRemove BLOBFILE_BACKENDS environment variable
BLOBFILE_BACKENDS environment variableAttempt to query for subscriptions even less often
bf.configureoutput_az_paths, set this to True to output az:// paths instead of the https:// onesuse_azure_storage_account_key_fallback, set this to False to disable falling back to storage account keys. This is recommended because the storage key fallback confuses users and can result in 429s from the Azure management endpoints..pyi files. These were for use by pyright, but confused PyCharm and are no longer necessary for pyright.pyright which symbols are exported.Fix for azure credentials when using service principals through azure cli, thanks to @hauntsaninja for the PR
bf.listdir on az:// paths in the presence of explicit directories, thanks to @WuTheFWasThat for the PRAdd support for az:// urls, thanks to @joschu for the PR. All azure urls output by blobfile are still the https:// format.
az:// urls, thanks to @joschu for the PR. All azure urls output by blobfile are still the https:// format.Fix to bf.isdir() from @hauntsaninja, which didn't work on some unusual azure directories.
bf.isdir() from @hauntsaninja, which didn't work on some unusual azure directories.Sleep when checking copy status, thanks to @hauntsaninja for the PR
New version to work around pypi upload failure
Better error message for bad refresh token, thanks @hauntsaninja for reporting this
bf.copy(..., parallel=True) logic, versions 1.0.0 and 0.17.3 could upload the wrong data when requests are retried internally by bf.copy. Also azure paths were not properly escaped.Remove deprecated functions LocalBlobFile (use BlobFile with streaming=False) and set_log_callback (use configure with log_callback= )
LocalBlobFile (use BlobFile with streaming=False) and set_log_callback (use configure with log_callback=<fn>)Change default write block size to 8 MB
parallel option to bf.copy to do some operations in parallel as well as parallel_executor argument to set the executor to be used.bf.copy between multiple azure storage accounts, thanks @hauntsaninja for reporting thisAllow anonymous access for azure containers. Try anonymous access if other methods fail and allow blobfile to work if user has no valid azure credenti
Fixed GCS cloud copy for large files from @hauntsaninja
Log all request failures by default rather than just errors after the first one, can now be set with the retry_log_threshold argument to configure().
retry_log_threshold argument to configure(). To get the previous behavior, use bf.configure(retry_log_threshold=1)azure_write_chunk_size option to configure(). Writing a block blob will delete any existing file before starting the writing process and writing may raise a ConcurrentWriteFailure in the event of multiple processes writing to the same file at the same time. If this happens, either avoid writing concurrently to the same file, or retry after some period.set_mtime function to set the modified time for an objectmd5 to stat object, which will be the md5 hexdigest if present on a remote file. Also add version which, for remote objects, represents some unique id that is changed when the file is changed.configure()scanglob which is glob but returnes DirEntry objects instead of stringsscandir which is listdir but returns DirEntry objects instead of stringslistdir entries for local paths are no longer returned in sorted order: with joinMore robust checking for azure account-does-not-exist errors
close() for _ProxyFilestorage.googleapis.com instead of www.googleapis.com for google api endpointAdd support for NO_GCE_CHECK=true environment variable used by colab notebooks
NO_GCE_CHECK=true environment variable used by colab notebookscopy.copy() due to odd behavior during interpreter shutdown which could cause write-mode BlobFiles to not finish their final uploadAZURE_STORAGE_KEY instead of AZURE_STORAGE_ACCOUNT_KEY by defaultAZURE_STORAGE_CONNECTION_STRINGno longer allow : in remote paths used with join except for the first path provided
: in remote paths used with join except for the first path providedBLOBFILE_BACKENDS environment variable to set what backends will be available for use with BlobFile, it should be set to local,google,azure to get the default behavior of allowing all backendsreopen streaming read files when an error is encountered in case urllib3 does not do this
reduce readall() default chunk size to fix performance regression, thanks @jpambrun for reporting this!
Added configure() to replace set_log_callback and add a configurable max connection pool size.
configure() to replace set_log_callback and add a configurable max connection pool size.pip install work without having to have extra tools installedAdded topdown=False support to walk()
topdown=False support to walk()copytree() exampleCreating a write-mode BlobFile for a local path will automatically create intermediate directories to be consistent with blob storage, see https://git
BlobFile for a local path will automatically create intermediate directories to be consistent with blob storage, see https://github.com/christopher-hesse/blobfile/issues/48Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →